예제 #1
0
    //-----------------------------------------------------------------------

    /*!
     *  @brief		現在の行動パラメータを取得
     */
    //-----------------------------------------------------------------------
    public MasterDataEnemyActionParam GetCurrentActionParam()
    {
        MasterDataEnemyActionParam actionParam = null;

        //--------------------------------
        // テーブル切り替え時:行動IDがある場合
        // @add Developer v320
        //--------------------------------
        if (m_ActionSwitchParamID > UNUSE_ACTIONPARAM_ID)
        {
            // アクションパラメータのマスターデータを取得
            actionParam = BattleParam.m_MasterDataCache.useEnemyActionParam((uint)m_ActionSwitchParamID);
            return(actionParam);
        }

        //--------------------------------
        // 現在の行動テーブルデータを参照する
        //--------------------------------
        MasterDataEnemyActionTable tableData = GetCurrentActionTableParam();

        if (tableData == null)
        {
            return(null);
        }


        //--------------------------------
        // 現在のアクションパラメータを取得
        //--------------------------------
        int actionStep = m_ActionStep;


        int[] actionParamIDArray = { tableData.action_param_id1,
                                     tableData.action_param_id2,
                                     tableData.action_param_id3,
                                     tableData.action_param_id4,
                                     tableData.action_param_id5,
                                     tableData.action_param_id6,
                                     tableData.action_param_id7,
                                     tableData.action_param_id8 };

        int actionParamID = actionParamIDArray[actionStep];

        if (actionParamID == UNUSE_ACTIONPARAM_ID)
        {
            return(null);
        }


        //--------------------------------
        // アクションパラメータのマスターデータの取得
        //--------------------------------
        actionParam = BattleParam.m_MasterDataCache.useEnemyActionParam((uint)actionParamID);


        return(actionParam);
    }
예제 #2
0
    //-----------------------------------------------------------------------

    /*!
     *  @brief		アクションテーブルの切り替え判定
     */
    //-----------------------------------------------------------------------
    public void SelectActionTable(int battle_total_turn)
    {
        MasterDataEnemyActionTable enemy_action_table = searchCurrentMasterDataEnemyActionTable(battle_total_turn);

        int table_id_current = UNUSE_ACTIONTABLE_ID;

        if (enemy_action_table != null)
        {
            table_id_current = (int)enemy_action_table.fix_id;
        }

        //--------------------------------
        //	テーブルID設定
        //--------------------------------
        if (m_CurrentActionTableID != table_id_current)
        {
#if UNITY_EDITOR && OUTPUT_INGAME_LOG
            Debug.LogError("SelectActionTable <<< " + table_id_current);
#endif // #if UNITY_EDITOR && OUTPUT_INGAME_LOG

            //--------------------------------
            //	テーブルID更新
            //--------------------------------
            m_CurrentActionTableID = table_id_current;

            //--------------------------------
            //	更新された場合は、進行状態を更新する
            //--------------------------------
            if (enemy_action_table != null)
            {
                //--------------------------------
                // テーブル切り替え時:行動IDを保存
                //--------------------------------
                m_ActionSwitchParamID = enemy_action_table.change_action_id;

                if (enemy_action_table.action_select_type == MasterDataDefineLabel.EnemyACTSelectType.RAND)
                {
                    //--------------------------------
                    //	ランダム選択の場合は抽選を行う
                    //--------------------------------
                    StepActionTable();
                }
                else
                {
                    //--------------------------------
                    //	巡回選択時は先頭に設定
                    //--------------------------------
                    m_ActionStep = 0;
                }
            }
        }
    }
예제 #3
0
    //-----------------------------------------------------------------------

    /*!
     *  @brief		アクションテーブルの切り替え時行動確認
     *  @add		Developer 2016/01/04 v320
     */
    //-----------------------------------------------------------------------
    public bool CheckActionSwitch(int battle_total_turn)
    {
        bool bResult = false;

        MasterDataEnemyActionTable enemy_action_table = searchCurrentMasterDataEnemyActionTable(battle_total_turn);

        int table_id_current = UNUSE_ACTIONTABLE_ID;

        if (enemy_action_table != null)
        {
            table_id_current = (int)enemy_action_table.fix_id;
        }

        //--------------------------------
        // テーブルID設定
        //--------------------------------
        if (m_CurrentActionTableID != table_id_current)
        {
            //--------------------------------
            // 更新された場合は、進行状態を更新する
            //--------------------------------
            if (enemy_action_table != null &&
                enemy_action_table.change_action_id != 0)
            {
                //--------------------------------
                // 行動パターン切り替わり時行動有り
                //--------------------------------
                bResult = true;

                //--------------------------------
                // 行動テーブル進行度の決定:ここでやりたくないが、中断復帰の都合上このタイミングでやる
                //--------------------------------
                if (enemy_action_table.action_select_type == MasterDataDefineLabel.EnemyACTSelectType.RAND)
                {
                    //--------------------------------
                    // ランダム選択の場合は抽選を行う
                    //--------------------------------
                    StepActionTable();
                }
                else
                {
                    //--------------------------------
                    // 巡回選択時は先頭に設定
                    //--------------------------------
                    m_ActionStep = 0;
                }
            }
        }

        return(bResult);
    }
예제 #4
0
    //-----------------------------------------------------------------------

    /*!
     *  @brief		現在のテーブルパラメータを取得
     */
    //-----------------------------------------------------------------------
    public MasterDataEnemyActionTable GetCurrentActionTableParam()
    {
        //--------------------------------
        //	未定義IDを参照した場合
        //--------------------------------
        if (m_CurrentActionTableID == UNUSE_ACTIONTABLE_ID)
        {
            return(null);
        }


        //--------------------------------
        //	現在の行動テーブルデータを参照する
        //--------------------------------
        MasterDataEnemyActionTable tableData = BattleParam.m_MasterDataCache.useEnemyActionTable((uint)m_CurrentActionTableID);

        if (tableData == null)
        {
            return(null);
        }


        return(tableData);
    }
예제 #5
0
    // マスターデータを取得(同時にキャッシュもされます)
    public T use(uint id)
    {
        if (id == 0)
        {
            return(null);
        }

        if (m_Dictionary == null)
        {
            m_Dictionary = new Dictionary <uint, T>();
        }

        if (m_Dictionary.ContainsKey(id))
        {
            return(m_Dictionary[id]);
        }

        T master_data = null;

#if BUILD_TYPE_DEBUG
        // デバッグ用の一時的なマスターデータがあればそこから取得
        if (m_DebugAllData != null)
        {
            for (int idx = 0; idx < m_DebugAllData.Length; idx++)
            {
                T wrk_master_data = m_DebugAllData[idx];
                if (wrk_master_data != null &&
                    wrk_master_data.fix_id == id
                    )
                {
                    master_data = wrk_master_data;
                    break;
                }
            }

            m_Dictionary[id] = master_data;
            return(master_data);
        }
#endif

        if (typeof(T) == typeof(MasterDataParamEnemy) ||
            typeof(T) == typeof(MasterDataEnemyActionTable) ||
            typeof(T) == typeof(MasterDataEnemyActionParam)
            )
        {
            // クエストのたびにサーバからもらうもの
            //敵のマスターデータのうち MasterDataParamEnemy・MasterDataEnemyActionTable・MasterDataEnemyActionParam は PacketStructQuestBuildから毎回取得しているようです(おそらくチート対策)
            if (BattleParam.m_QuestBuild != null
                )
            {
                if (typeof(T) == typeof(MasterDataParamEnemy) &&
                    BattleParam.m_QuestBuild.list_e_param != null
                    )
                {
                    for (int idx = 0; idx < BattleParam.m_QuestBuild.list_e_param.Length; idx++)
                    {
                        MasterDataParamEnemy wrk_master_data = BattleParam.m_QuestBuild.list_e_param[idx];
                        if (wrk_master_data != null &&
                            wrk_master_data.fix_id == id
                            )
                        {
                            master_data = wrk_master_data as T;
                            break;
                        }
                    }
                }
                else
                if (typeof(T) == typeof(MasterDataEnemyActionTable) &&
                    BattleParam.m_QuestBuild.list_e_acttable != null
                    )
                {
                    for (int idx = 0; idx < BattleParam.m_QuestBuild.list_e_acttable.Length; idx++)
                    {
                        MasterDataEnemyActionTable wrk_master_data = BattleParam.m_QuestBuild.list_e_acttable[idx];
                        if (wrk_master_data != null &&
                            wrk_master_data.fix_id == id
                            )
                        {
                            master_data = wrk_master_data as T;
                            break;
                        }
                    }
                }
                else
                if (typeof(T) == typeof(MasterDataEnemyActionParam) &&
                    BattleParam.m_QuestBuild.list_e_actparam != null
                    )
                {
                    for (int idx = 0; idx < BattleParam.m_QuestBuild.list_e_actparam.Length; idx++)
                    {
                        MasterDataEnemyActionParam wrk_master_data = BattleParam.m_QuestBuild.list_e_actparam[idx];
                        if (wrk_master_data != null &&
                            wrk_master_data.fix_id == id
                            )
                        {
                            master_data = wrk_master_data as T;
                            break;
                        }
                    }
                }
            }

#if BUILD_TYPE_DEBUG && USE_LOCAL_ENEMY_MASTER
            if (master_data == null)
            {
                master_data = _getMasterData(id);
            }
#endif //USE_LOCAL_ENEMY_MASTER
        }
        else
        {
            master_data = _getMasterData(id);
        }

        m_Dictionary[id] = master_data;

        return(master_data);
    }
예제 #6
0
    /// <summary>
    /// 現在の条件を満たした敵行動テーブルを検索
    /// </summary>
    /// <param name="battle_total_turn"></param>
    /// <returns></returns>
    private MasterDataEnemyActionTable searchCurrentMasterDataEnemyActionTable(int battle_total_turn)
    {
        if (m_BattleEnemy == null)
        {
            return(null);
        }

        MasterDataParamEnemy enemy_param = m_BattleEnemy.getMasterDataParamEnemy();

        if (enemy_param == null)
        {
            return(null);
        }

        List <MasterDataEnemyActionTable> enemy_action_tables = new List <MasterDataEnemyActionTable>();

        {
            int[] table_id_array =
            {
                enemy_param.act_table1,
                enemy_param.act_table2,
                enemy_param.act_table3,
                enemy_param.act_table4,
                enemy_param.act_table5,
                enemy_param.act_table6,
                enemy_param.act_table7,
                enemy_param.act_table8
            };

            for (int idx = 0; idx < table_id_array.Length; idx++)
            {
                MasterDataEnemyActionTable enemy_action_table = BattleParam.m_MasterDataCache.useEnemyActionTable((uint)table_id_array[idx]);
                if (enemy_action_table != null)
                {
                    enemy_action_tables.Add(enemy_action_table);
                }
            }

            // 優先度、降順にソート
            enemy_action_tables.Sort((a, b) => b.timing_priority - a.timing_priority);
        }

        MasterDataEnemyActionTable ret_val = null;

        for (int priority_idx = 0; priority_idx < enemy_action_tables.Count; priority_idx++)
        {
            MasterDataEnemyActionTable enemy_action_table = enemy_action_tables[priority_idx];

            bool is_cond = true;
            for (int cond_idx = 0; cond_idx < enemy_action_table.Get_timing_type_count(); cond_idx++)
            {
                MasterDataDefineLabel.EnemyACTPatternSelectType timing_type = enemy_action_table.Get_timing_type(cond_idx);
                int timing_type_param = enemy_action_table.Get_timing_type_param(cond_idx);

                switch (timing_type)
                {
                case MasterDataDefineLabel.EnemyACTPatternSelectType.HP:
                    if (checkTimingHPRate(timing_type_param) == false)
                    {
                        is_cond = false;
                    }
                    break;

                case MasterDataDefineLabel.EnemyACTPatternSelectType.HP_UNDER:
                    if (checkTimingHPRateUnder(timing_type_param) == false)
                    {
                        is_cond = false;
                    }
                    break;

                case MasterDataDefineLabel.EnemyACTPatternSelectType.TURN:
                    if (checkTimingTotalTurn(battle_total_turn, timing_type_param) == false)
                    {
                        is_cond = false;
                    }
                    break;
                }

                if (is_cond == false)
                {
                    break;
                }
            }

            if (is_cond)
            {
                ret_val = enemy_action_table;
                break;
            }
        }

        return(ret_val);
    }
예제 #7
0
    //-----------------------------------------------------------------------

    /*!
     *  @brief		アクションテーブル更新
     */
    //-----------------------------------------------------------------------
    public void StepActionTable()
    {
        //--------------------------------
        // 現在の行動テーブルデータを参照する
        //--------------------------------
        MasterDataEnemyActionTable table = GetCurrentActionTableParam();

        if (table == null)
        {
            return;
        }


        int[] actionParamArray = { table.action_param_id1,
                                   table.action_param_id2,
                                   table.action_param_id3,
                                   table.action_param_id4,
                                   table.action_param_id5,
                                   table.action_param_id6,
                                   table.action_param_id7,
                                   table.action_param_id8 };

        MasterDataDefineLabel.EnemyACTSelectType selectType = table.action_select_type;



        //--------------------------------
        //	セーフティ
        //--------------------------------
        if (m_ActionStep < 0)
        {
            m_ActionStep = 0;
        }


        //--------------------------------
        // 進行状態の更新
        //--------------------------------
        switch (selectType)
        {
        case MasterDataDefineLabel.EnemyACTSelectType.RAND:
        {
            //--------------------------------
            // ランダムセレクト設定
            //--------------------------------
            int totalCount = 0;
            int randomVal  = 0;
            int randomMix  = 1;
            int randomMax  = 100;
            int tempValue  = 0;
            int tempRate   = 10;


            for (int i = 0; i < actionParamArray.Length; i++)
            {
                if (actionParamArray[i] == UNUSE_ACTIONPARAM_ID)
                {
                    break;
                }

                totalCount = totalCount + 1;
            }


            randomMix = 0;
            randomMax = totalCount * tempRate;


            //--------------------------------
            // 乱数生成
            //--------------------------------
            randomVal = (int)m_RandomActionTable.GetRand((uint)randomMix, (uint)(randomMax + 1));

            //--------------------------------
            // 抽選処理
            //--------------------------------
            for (int i = 0; i < totalCount; i++)
            {
                tempValue = randomVal - ((i + 1) * tempRate);
                if (tempValue > 0)
                {
                    continue;
                }

                m_ActionStep = i;
                break;
            }
        }
        break;


        case MasterDataDefineLabel.EnemyACTSelectType.LOOP:
        {
            //--------------------------------
            // 巡回設定
            //--------------------------------
            m_ActionStep = m_ActionStep + 1;


            if (m_ActionStep >= 0 &&
                m_ActionStep < actionParamArray.Length)
            {
                //--------------------------------
                // 未設定、最終定義まで到達した場合は、先頭に戻す
                //--------------------------------
                if (actionParamArray[m_ActionStep] == UNUSE_ACTIONPARAM_ID)
                {
                    m_ActionStep = 0;
                }
            }
            else
            {
                //--------------------------------
                //	範囲外に到達したら先頭へ
                //--------------------------------
                m_ActionStep = 0;
            }
        }
        break;

        default:
            break;
        }
    }
예제 #8
0
    // Update is called once per frame
    void Update()
    {
        if (DebugOptionInGame.Instance == null)
        {
            return;
        }

        if (m_TestGameManager == null)
        {
            return;
        }

        switch (m_Status)
        {
        case eStatus.API_QUEST_START:
        {
            if (DebugOptionInGame.Instance.inGameDebugDO.m_UseAPI == true)
            {
                m_HelperIndex = RandManager.GetRand(0, (uint)(UserDataAdmin.Instance.m_StructHelperList.Length - 1));
                PacketStructFriend cHelper = null;
                if (UserDataAdmin.Instance.m_StructFriendList.Length > 0 &&
                    UserDataAdmin.Instance.m_StructFriendList[0] != null)
                {
                    cHelper = UserDataAdmin.Instance.m_StructFriendList[0];
                }
                else if (UserDataAdmin.Instance.m_StructHelperList.Length > 0)
                {
                    cHelper = UserDataAdmin.Instance.m_StructHelperList[m_HelperIndex];
                }
                {
                    ServerDataUtilSend.SendPacketAPI_Quest2Start(
                        DebugOptionInGame.Instance.inGameDebugDO.m_QuestId,
                        0,
                        cHelper.user_id,
                        cHelper.unit,
                        false,
                        UserDataAdmin.Instance.m_StructPlayer.unit_party_current,
                        0,
                        0,
                        null,
                        false
                        )
                    .setSuccessAction(_data =>
                        {
                            if (SceneGoesParam.Instance.m_SceneGoesParamToQuest2Build == null)
                            {
                                SceneGoesParam.Instance.m_SceneGoesParamToQuest2Build = new SceneGoesParamToQuest2Build();
                            }
                            SceneGoesParam.Instance.m_SceneGoesParamToQuest2Build.m_QuestBuild = _data.GetResult <RecvQuest2Start>().result.quest;
                            m_Status = eStatus.DATA_CREATE;
                        })
                    .setErrorAction(data =>
                        {
                            Debug.LogErrorFormat("[TestGameMain] Quest2Start API Error [{0}] : QuestId = {1}", data.m_PacketCode.ToString(), DebugOptionInGame.Instance.inGameDebugDO.m_QuestId.ToString());
                            m_TestGameManager.Message_text = "API Error\r\n [" + data.m_PacketCode.ToString() + "]";
                        })
                    .SendStart();
                    m_Status = eStatus.NONE;
                }
            }
            else
            {
                if (SceneGoesParam.Instance.m_SceneGoesParamToQuest2Build == null)
                {
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2Build = new SceneGoesParamToQuest2Build();
                }
                {
                    MasterDataQuest2        masterDataQuest2 = MasterDataUtil.GetQuest2ParamFromID(DebugOptionInGame.Instance.inGameDebugDO.m_QuestId);
                    PacketStructQuest2Build cQuestBuild      = new PacketStructQuest2Build();
                    int floor_size = 2;
                    //----------------------------------------
                    // 最終的な構築情報を格納する領域を確保
                    //----------------------------------------
                    TemplateList <PacketStructQuest2BuildBattle> acQuestBuildBattle = new TemplateList <PacketStructQuest2BuildBattle>();
                    TemplateList <PacketStructQuest2BuildDrop>   acQuestBuildDrop   = new TemplateList <PacketStructQuest2BuildDrop>();
                    acQuestBuildBattle.Alloc(64);

                    int nFloorDataAccess = 0;
                    cQuestBuild.boss = new int[floor_size];

                    for (int i = 0; i < floor_size; i++)
                    {
                        nFloorDataAccess = (i - 1);
                        if (nFloorDataAccess < 0)
                        {
                            continue;
                        }
                        //----------------------------------------
                        //	0番目要素ダミーデータの入力
                        //----------------------------------------
                        PacketStructQuest2BuildBattle build_param_battle = new PacketStructQuest2BuildBattle();
                        if (build_param_battle != null)
                        {
                            build_param_battle.unique_id         = 0;
                            build_param_battle.enemy_list        = null;
                            build_param_battle.drop_list         = null;
                            build_param_battle.chain             = 0;
                            build_param_battle.chain_turn_offset = 0;
                            build_param_battle.bgm_id            = 0;

                            acQuestBuildBattle.Add(build_param_battle);
                        }

                        //----------------------------------------
                        // 戦闘情報を設定
                        //----------------------------------------
                        int battle_num = MasterDataUtil.GetQuest2BattleNum(masterDataQuest2.fix_id);
                        for (int j = 0; j < battle_num; j++)
                        {
                            uint enemy_group_id = MasterDataUtil.GetQuest2EnemyGroup(masterDataQuest2.fix_id, j);
                            if (enemy_group_id == 0)
                            {
                                continue;
                            }

                            MasterDataEnemyGroup acMasterGroupEnemy = ServerFogery_GetEnemyGroupFromID(enemy_group_id);
                            if (acMasterGroupEnemy == null)
                            {
                                Debug.LogError("EnemyGroup not found id = " + enemy_group_id);
                                continue;
                            }
                            CreateQuestBuildBattle(
                                i
                                , ref acQuestBuildBattle
                                , ref acQuestBuildDrop
                                , acMasterGroupEnemy
                                );
                        }
                        //----------------------------------------
                        // ボス戦闘情報を設定
                        //----------------------------------------
                        cQuestBuild.boss[i] = 0;
                        if (masterDataQuest2.boss_group_id > 0)
                        {
                            MasterDataEnemyGroup cBossEnemyGroup = ServerFogery_GetEnemyGroupFromID(masterDataQuest2.boss_group_id);
                            if (cBossEnemyGroup != null)
                            {
                                cQuestBuild.boss[i] = CreateQuestBuildBattle(
                                    i
                                    , ref acQuestBuildBattle
                                    , ref acQuestBuildDrop
                                    , cBossEnemyGroup
                                    );
                            }
                            else
                            {
                                Debug.LogError("EnemyGroup not found Boss id = " + masterDataQuest2.boss_group_id);
                            }
                        }
                    }

                    TemplateList <MasterDataParamEnemy>       e_param_list     = new TemplateList <MasterDataParamEnemy>();
                    TemplateList <MasterDataEnemyActionParam> e_act_param_list = new TemplateList <MasterDataEnemyActionParam>();
                    TemplateList <MasterDataEnemyActionTable> e_act_table_list = new TemplateList <MasterDataEnemyActionTable>();

                    for (int i = 0; i < acQuestBuildBattle.m_BufferSize; i++)
                    {
                        if (acQuestBuildBattle[i] == null)
                        {
                            continue;
                        }

                        if (acQuestBuildBattle[i].enemy_list == null)
                        {
                            continue;
                        }

                        for (int j = 0; j < acQuestBuildBattle[i].enemy_list.Length; j++)
                        {
                            if (acQuestBuildBattle[i].enemy_list[j] == 0)
                            {
                                continue;
                            }

                            MasterDataParamEnemy enemy_param = ServerForgery_GetEnemyParamFromID(acQuestBuildBattle[i].enemy_list[j]);
                            e_param_list.Add(enemy_param);

                            int[] table_id = { enemy_param.act_table1,
                                               enemy_param.act_table2,
                                               enemy_param.act_table3,
                                               enemy_param.act_table4,
                                               enemy_param.act_table5,
                                               enemy_param.act_table6,
                                               enemy_param.act_table7,
                                               enemy_param.act_table8 };

                            for (int k = 0; k < table_id.Length; k++)
                            {
                                if (table_id[k] == 0)
                                {
                                    continue;
                                }

                                MasterDataEnemyActionTable table = ServerFogery_GetEnemyActionTable(table_id[k]);
                                e_act_table_list.Add(table);

                                int[] action_id = { table.action_param_id1,
                                                    table.action_param_id2,
                                                    table.action_param_id3,
                                                    table.action_param_id4,
                                                    table.action_param_id5,
                                                    table.action_param_id6,
                                                    table.action_param_id7,
                                                    table.action_param_id8 };

                                for (int l = 0; l < action_id.Length; l++)
                                {
                                    e_act_param_list.Add(GetEnemyActionParam(action_id[l]));
                                }
                            }
                        }
                    }


                    //----------------------------------------
                    // 構築した動的要素を配列化して受け渡し
                    //----------------------------------------
                    cQuestBuild.list_drop       = acQuestBuildDrop.ToArray();
                    cQuestBuild.list_battle     = acQuestBuildBattle.ToArray();
                    cQuestBuild.list_e_param    = e_param_list.ToArray();
                    cQuestBuild.list_e_actparam = e_act_param_list.ToArray();
                    cQuestBuild.list_e_acttable = e_act_table_list.ToArray();

                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2Build.m_QuestBuild = cQuestBuild;
                }
                m_Status = eStatus.DATA_CREATE;
            }
        }
        break;

        case eStatus.DATA_CREATE:
        {
            {
                MasterDataQuest2 masterDataQuest = MasterDataUtil.GetQuest2ParamFromID(DebugOptionInGame.Instance.inGameDebugDO.m_QuestId);
                //----------------------------------------
                // ダミーパラメータを設定
                //----------------------------------------
                if (SceneGoesParam.Instance.m_SceneGoesParamToQuest2 == null)
                {
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2 = new SceneGoesParamToQuest2();
                }
                SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_QuestAreaID    = masterDataQuest.area_id;
                SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_QuestMissionID = masterDataQuest.fix_id;
                SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_QuestRandSeed  = RandManager.GetRand();
                SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_IsUsedAutoPlay = false;

                SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara0Param = new UserDataUnitParam();
                SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara1Param = new UserDataUnitParam();
                SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara2Param = new UserDataUnitParam();
                SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara3Param = new UserDataUnitParam();
                SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara4Param = new UserDataUnitParam();

                if (DebugOptionInGame.Instance.inGameDebugDO.m_DebugParty == false &&
                    UserDataAdmin.Instance != null &&
                    UserDataAdmin.Instance.m_StructHelperList.IsNullOrEmpty() != true &&
                    UserDataAdmin.Instance.m_StructPartyAssign.IsNullOrEmpty() != true)
                {
                    PacketStructFriend cHelper      = UserDataAdmin.Instance.m_StructHelperList[m_HelperIndex];
                    int nPartyCurrent               = UserDataAdmin.Instance.m_StructPlayer.unit_party_current;
                    PacketStructUnit[] acUnitStruct =
                    {
                        UserDataAdmin.Instance.m_StructPartyAssign[nPartyCurrent][0]
                        , UserDataAdmin.Instance.m_StructPartyAssign[nPartyCurrent][1]
                        , UserDataAdmin.Instance.m_StructPartyAssign[nPartyCurrent][2]
                        , UserDataAdmin.Instance.m_StructPartyAssign[nPartyCurrent][3]
                        , cHelper.unit
                    };
                    UserDataUnitParam[] acUnitParam =
                    {
                        SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara0Param,
                        SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara1Param,
                        SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara2Param,
                        SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara3Param,
                        SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara4Param,
                    };
                    for (int i = 0; i < acUnitStruct.Length; i++)
                    {
                        if (acUnitStruct[i] != null)
                        {
                            acUnitParam[i].m_UnitDataID            = acUnitStruct[i].id;
                            acUnitParam[i].m_UnitParamLevel        = (int)acUnitStruct[i].level;
                            acUnitParam[i].m_UnitParamEXP          = (int)acUnitStruct[i].exp;
                            acUnitParam[i].m_UnitParamUniqueID     = acUnitStruct[i].unique_id;
                            acUnitParam[i].m_UnitParamLimitBreakLV = (int)acUnitStruct[i].limitbreak_lv;
                            acUnitParam[i].m_UnitParamLimitOverLV  = (int)acUnitStruct[i].limitover_lv;
                            acUnitParam[i].m_UnitParamPlusPow      = (int)acUnitStruct[i].add_pow;
                            acUnitParam[i].m_UnitParamPlusHP       = (int)acUnitStruct[i].add_hp;
                        }
                    }
                }
                else
                {
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara0Param.m_UnitDataID     = DebugOptionInGame.Instance.inGameDebugDO.m_MasterDataDefaultParty.party_chara0_id;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara1Param.m_UnitDataID     = DebugOptionInGame.Instance.inGameDebugDO.m_MasterDataDefaultParty.party_chara1_id;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara2Param.m_UnitDataID     = DebugOptionInGame.Instance.inGameDebugDO.m_MasterDataDefaultParty.party_chara2_id;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara3Param.m_UnitDataID     = DebugOptionInGame.Instance.inGameDebugDO.m_MasterDataDefaultParty.party_chara3_id;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara4Param.m_UnitDataID     = DebugOptionInGame.Instance.inGameDebugDO.m_MasterDataDefaultParty.party_chara4_id;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara0Param.m_UnitParamLevel = (int)DebugOptionInGame.Instance.inGameDebugDO.m_MasterDataDefaultParty.party_chara0_level;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara1Param.m_UnitParamLevel = (int)DebugOptionInGame.Instance.inGameDebugDO.m_MasterDataDefaultParty.party_chara1_level;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara2Param.m_UnitParamLevel = (int)DebugOptionInGame.Instance.inGameDebugDO.m_MasterDataDefaultParty.party_chara2_level;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara3Param.m_UnitParamLevel = (int)DebugOptionInGame.Instance.inGameDebugDO.m_MasterDataDefaultParty.party_chara3_level;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara4Param.m_UnitParamLevel = (int)DebugOptionInGame.Instance.inGameDebugDO.m_MasterDataDefaultParty.party_chara4_level;

                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara0Param.m_UnitParamEXP = 100;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara1Param.m_UnitParamEXP = 100;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara2Param.m_UnitParamEXP = 100;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara3Param.m_UnitParamEXP = 100;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara4Param.m_UnitParamEXP = 100;

                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara0Param.m_UnitParamUniqueID = 1;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara1Param.m_UnitParamUniqueID = 2;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara2Param.m_UnitParamUniqueID = 3;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara3Param.m_UnitParamUniqueID = 4;
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2.m_PartyChara4Param.m_UnitParamUniqueID = 5;
                }

                LocalSaveManager.Instance.SaveFuncGoesToQuest2Start(SceneGoesParam.Instance.m_SceneGoesParamToQuest2);
                LocalSaveManager.Instance.SaveFuncGoesToQuest2Restore(null);
                DebugOptionInGame.Instance.m_Quest2Build = SceneGoesParam.Instance.m_SceneGoesParamToQuest2Build.m_QuestBuild;
                SceneCommon.Instance.ChangeScene(SceneType.SceneQuest2);
            }
            m_Status = eStatus.NONE;
        }
        break;

        case eStatus.DATA_RESTORE:
        {
            {
                SceneGoesParam.Instance.m_SceneGoesParamToQuest2        = LocalSaveManager.Instance.LoadFuncGoesToQuest2Start();
                SceneGoesParam.Instance.m_SceneGoesParamToQuest2Restore = LocalSaveManager.Instance.LoadFuncGoesToQuest2Restore();
                if (SceneGoesParam.Instance.m_SceneGoesParamToQuest2Build == null)
                {
                    SceneGoesParam.Instance.m_SceneGoesParamToQuest2Build = new SceneGoesParamToQuest2Build();
                }
                SceneGoesParam.Instance.m_SceneGoesParamToQuest2Build.m_QuestBuild = DebugOptionInGame.Instance.m_Quest2Build;
                SceneCommon.Instance.ChangeScene(SceneType.SceneQuest2);
            }
            m_Status = eStatus.NONE;
        }
        break;

        default:
            break;
        }
    }