Esempio n. 1
0
    private void setupQuest()
    {
        m_QuestSelect.isEndShowList = false;
        m_QuestSelect.QuestList.Clear();
        m_questButtons.Clear();

        if (m_SelectAreaIndex >= m_QuestSelect.EpisodeList.Count)
        {
            return;
        }

        EpisodeDataContext episodeData = m_QuestSelect.EpisodeList[m_SelectAreaIndex];

        MasterDataArea areaMaster = episodeData.master;

        if (areaMaster == null)
        {
            return;
        }

        List <MasterDataQuest2> quest2List = MasterFinder <MasterDataQuest2> .Instance.SelectWhere("where area_id = ?", areaMaster.fix_id);

        quest2List.Sort((a, b) => (int)a.fix_id - (int)b.fix_id);
        MasterDataQuest2[] quest2Array = quest2List.ToArray();
        if (quest2Array == null)
        {
            return;
        }

        MainMenuParam.m_QuestStaminaAmend = (float)episodeData.amend.m_QuestSelectAreaAmendStamina / 100.0f;

        //クエストリスト更新
        {
            uint _count         = 0;
            uint _notClearCount = 0;
            bool bSkip          = false;
            for (int i = 0; i < quest2Array.Length; i++)
            {
                uint             _index        = _count;
                MasterDataQuest2 _masterQuest2 = quest2Array[i];

                if (_masterQuest2.active != MasterDataDefineLabel.BoolType.ENABLE)
                {
                    continue;
                }

                if (_masterQuest2.story != 0 && _notClearCount != 0)
                {
                    //未クリアクエスト以降のシナリオはスキップ
                    bSkip = true;
                }
                else if (_masterQuest2.story == 0 &&
                         !ServerDataUtil.ChkRenewBitFlag(ref UserDataAdmin.Instance.m_StructPlayer.flag_renew_quest_clear, quest2Array[i].fix_id))
                {
                    //1つめの未クリアは表示
                    if (_notClearCount != 0)
                    {
                        bSkip = true;
                    }

                    _notClearCount++;
                }

                if (bSkip)
                {
                    continue;
                }

                var model = new ListItemModel(_index);
                model.OnClicked += () =>
                {
                    SelectQuest(_index);
                };
                m_questButtons.Add(model);

                QuestDataContext newQuest = new QuestDataContext(model);
                newQuest.master           = _masterQuest2;
                newQuest.area_category_id = m_MasterAreaCategory.fix_id;
                newQuest.boss             = MasterDataUtil.GetGuerrillaBossParamFromQuestID(_masterQuest2.fix_id);
                newQuest.m_QuestId        = _index + 1;

                if (_masterQuest2.story == 0)
                {
                    newQuest.m_QuestType = QuestDataContext.ExecType.Quest2;
                    newQuest.IconLabel   = GameTextUtil.GetText("questselect_text1");
                    {
                        //詳細情報テキスト差し替え
                        MasterDataQuestAppearance[] questAppearance = MasterFinder <MasterDataQuestAppearance> .Instance.SelectWhere("where area_category_id = ?", MainMenuParam.m_QuestSelectAreaCateID).ToArray();

                        if (questAppearance.IsNullOrEmpty() == false)
                        {
                            // newQuest.IconLabel = GameTextUtil.GetText(questAppearance[0].boss_text_key);
                            // テキストキーではなく直接テキストが入っている
                            newQuest.IconLabel = questAppearance[0].boss_text_key;
                        }
                    }
                    UnitIconImageProvider.Instance.Get(
                        _masterQuest2.boss_chara_id,
                        sprite => { newQuest.IconImage = sprite; });
                }
                else
                {
                    newQuest.m_QuestType = QuestDataContext.ExecType.Event;
                    newQuest.IconLabel   = GameTextUtil.GetText("questselect_text2");
                    newQuest.IconImage   = ResourceManager.Instance.Load("storyicon");
                }

                string titleFormat = GameTextUtil.GetText("questselect_questname1");
                if (newQuest.boss != null)
                {
                    titleFormat = GameTextUtil.GetText("questselect_questname2");
                }

                newQuest.Title       = string.Format(titleFormat, _masterQuest2.quest_name);
                newQuest.Index       = _index;
                newQuest.SelectImage = m_SelectSprite;

                //                newQuest.BackGroundTexture = m_QuestSelect.BackGroundImage.texture;

                newQuest.IsActivePoint = false;
                switch (_masterQuest2.consume_type)
                {
                case 1:    //スタミナ
                    newQuest.IsActivePoint = true;
                    newQuest.PointLabel    = GameTextUtil.GetText("questselect_text3");
                    if (episodeData.amend.m_QuestSelectAreaAmendStamina == 100)
                    {
                        newQuest.m_Point = (uint)_masterQuest2.consume_value;
                        newQuest.Point   = string.Format("{0}", _masterQuest2.consume_value);
                    }
                    else
                    {
                        uint point = (uint)((float)_masterQuest2.consume_value * ((float)episodeData.amend.m_QuestSelectAreaAmendStamina / 100.0f));
                        newQuest.m_Point = point;
                        newQuest.Point   = string.Format(GameTextUtil.GetText("stmina_bahutext"), point);
                    }

                    //スコア倍率アップ
                    newQuest.AmendText = "";
                    if (_masterQuest2.story == 0 &&
                        _masterQuest2.consume_value != 0 &&
                        episodeData.amend.m_FlagAmendScore)
                    {
                        float score_rate = (float)episodeData.amend.m_QuestSelectAreaAmendScore / 100.0f;
                        newQuest.AmendText = string.Format("スコア {0:0.0}倍", score_rate);
                    }
                    break;

                case 2:    //Key
                {
                    newQuest.IsActivePoint = true;
                    newQuest.m_Point       = (uint)_masterQuest2.consume_value;
                    string             strFormat  = GameTextUtil.GetText("questselect_text5");
                    MasterDataQuestKey _keyMaster = MasterDataUtil.GetMasterDataQuestKeyFromAreaCategoryID(m_MasterAreaCategory.fix_id);
                    if (_keyMaster != null)
                    {
                        newQuest.PointLabel = string.Format(strFormat, _keyMaster.key_name);
                    }
                    newQuest.Point = string.Format("{0}", _masterQuest2.consume_value);
                }
                break;

                case 3:    //Ticket
                    newQuest.IsActivePoint = true;
                    newQuest.m_Point       = (uint)_masterQuest2.consume_value;
                    newQuest.PointLabel    = GameTextUtil.GetText("questselect_text4");
                    newQuest.Point         = string.Format("{0}", _masterQuest2.consume_value);
                    break;
                }

                newQuest.SetFlag(quest2Array[i].fix_id);

                m_QuestSelect.QuestList.Add(newQuest);

                _count++;
            }

            //-------------------------------------------------
            // イベントスケジュールがあるが検索
            //-------------------------------------------------
            MasterDataEvent eventMaster = MasterDataUtil.GetMasterDataEventFromID(areaMaster.event_id);
            m_QuestSelect.m_EventMaster = eventMaster;
            if (eventMaster != null &&
                eventMaster.event_schedule_show == MasterDataDefineLabel.BoolType.ENABLE)
            {
                m_QuestSelect.IsViewDetailButton = true;
            }
            else
            {
                m_QuestSelect.IsViewDetailButton = false;
            }
        }


        // View更新
        foreach (var episodeButton in m_episodeButtons)
        {
            episodeButton.HideArrow();
        }

        // インジケーターを表示
        if (LoadingManager.Instance != null)
        {
            LoadingManager.Instance.RequestLoadingStart(LOADING_TYPE.ASSETBUNDLE);
        }
        m_QuestSelect.Show(episodeData.masterDataAreaCategory.fix_id, () =>
        {
            foreach (var questButton in m_questButtons)
            {
                questButton.Appear();
            }

            foreach (var episodeButton in m_episodeButtons)
            {
                if (episodeButton.isSelected)
                {
                    episodeButton.ShowArrow();
                }
                else
                {
                    episodeButton.HideArrow();
                }
            }
            //戻るボタン抑制解除
            SetSuspendReturn(false);

            StartCoroutine(WaitShowQuestList(() =>
            {
                m_QuestSelect.isEndShowList = true;
            }));
        }, () =>
        {
            // インジケーターを閉じる
            if (LoadingManager.Instance != null)
            {
                LoadingManager.Instance.RequestLoadingFinish(LOADING_TYPE.ASSETBUNDLE);
            }
        });
    }
Esempio n. 2
0
    //----------------------------------------------------------------------------

    /*!
     *          @brief	基底継承:MainMenuSeq:ページ切り替えにより有効化された際に呼ばれる関数
     *          @note	ページのレイアウト再構築を兼ねる
     */
    //----------------------------------------------------------------------------
    protected override void PageSwitchSetting(bool initalize)
    {
        base.PageSwitchSetting(initalize);

        //----------------------------------------
        // ゲリラボス情報を取得
        //----------------------------------------
        m_GuerrillaBoss = MasterDataUtil.GetGuerrillaBossParamFromQuestID(MainMenuParam.m_QuestSelectMissionID);

        //----------------------------------------
        // ゲーム本編に引き渡す情報を色々設定
        //----------------------------------------
        {
            //----------------------------------------
            // 選択されている助っ人を取得
            //----------------------------------------
            PacketStructFriend cHelper = MainMenuParam.m_QuestHelper;
            if (cHelper == null)
            {
                Debug.LogError("SelectFriendNone");
            }

            //----------------------------------------
            //
            //----------------------------------------
            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
            };

            // @add Developer 2015/09/07 ver300
            PacketStructUnit cLinkUnitStruct = null;

            UserDataUnitParam[] acUnitParam = new UserDataUnitParam[acUnitStruct.Length];
            for (int i = 0; i < acUnitStruct.Length; i++)
            {
                if (acUnitStruct[i] == null)
                {
                    continue;
                }

                acUnitParam[i] = new UserDataUnitParam();
                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;

                // @add Developer 2015/09/07 ver300
                // リンクユニットを取得
                if (i != acUnitStruct.Length - 1)
                {
                    cLinkUnitStruct = CharaLinkUtil.GetLinkUnit(acUnitStruct[i].link_unique_id);
                }
                else
                {
                    cLinkUnitStruct = cHelper.unit_link;
                }

                // リンクユニットのパラメータ設定
                if (cLinkUnitStruct == null)
                {
                    continue;
                }
                acUnitParam[i].m_UnitParamLinkID          = cLinkUnitStruct.id;
                acUnitParam[i].m_UnitParamLinkLv          = (int)cLinkUnitStruct.level;
                acUnitParam[i].m_UnitParamLinkPlusPow     = (int)cLinkUnitStruct.add_pow;
                acUnitParam[i].m_UnitParamLinkPlusHP      = (int)cLinkUnitStruct.add_hp;
                acUnitParam[i].m_UnitParamLinkPoint       = (int)acUnitStruct[i].link_point;
                acUnitParam[i].m_UnitParamLinkLimitOverLV = (int)cLinkUnitStruct.limitover_lv;
            }


            //----------------------------------------
            // 固定パーティ情報でパーティ情報を上書き
            //----------------------------------------
            FixPartyAssign(ref acUnitParam, MainMenuParam.m_QuestSelectMissionID);

            {
                SceneGoesParamToQuest2 cSceneGoesParamToQuest2 = new SceneGoesParamToQuest2();

                cSceneGoesParamToQuest2.m_QuestAreaID        = MainMenuParam.m_QuestSelectAreaID;
                cSceneGoesParamToQuest2.m_QuestAreaAmendCoin = MainMenuParam.m_QuestSelectAreaAmendCoin;      // ※パーセント表記
                cSceneGoesParamToQuest2.m_QuestAreaAmendDrop = MainMenuParam.m_QuestSelectAreaAmendDrop;      // ※パーセント表記
                cSceneGoesParamToQuest2.m_QuestAreaAmendExp  = MainMenuParam.m_QuestSelectAreaAmendEXP;       // ※パーセント表記
                cSceneGoesParamToQuest2.m_QuestMissionID     = MainMenuParam.m_QuestSelectMissionID;
                cSceneGoesParamToQuest2.m_QuestRandSeed      = RandManager.GetRand();
                cSceneGoesParamToQuest2.m_IsUsedAutoPlay     = false;
                cSceneGoesParamToQuest2.m_QuestGuerrillaBoss = m_GuerrillaBoss;

                cSceneGoesParamToQuest2.m_PartyFriend      = cHelper;
                cSceneGoesParamToQuest2.m_PartyChara0Param = acUnitParam[0];
                cSceneGoesParamToQuest2.m_PartyChara1Param = acUnitParam[1];
                cSceneGoesParamToQuest2.m_PartyChara2Param = acUnitParam[2];
                cSceneGoesParamToQuest2.m_PartyChara3Param = acUnitParam[3];
                cSceneGoesParamToQuest2.m_PartyChara4Param = acUnitParam[4];

                cSceneGoesParamToQuest2.m_NextAreaCleard = MainMenuUtil.ChkActiveNextArea(MainMenuParam.m_QuestSelectAreaID);

                SceneGoesParam.Instance.m_SceneGoesParamToQuest2 = cSceneGoesParamToQuest2;

                //----------------------------------------
                // ゲーム開始情報をローカル保存。
                //
                // 通信前に保存しているため、通信中にアプリを終了させるとサーバー側の諸々消費を飛ばして次回起動時に開始情報が残ってしまう。
                // そのままクエストに入られるとサーバー上でコスト消費が行われずにクエストに移行する可能性があるがので、
                // タイトル画面で「サーバーにクエスト開始が届いているか」をチェックするAPIを投げて届いている場合のみ適用することで対応する。
                //----------------------------------------
                if (LocalSaveManager.Instance != null)
                {
                    LocalSaveManager.Instance.SaveFuncGoesToMenuResult(null);
                    LocalSaveManager.Instance.SaveFuncGoesToMenuRetire(null);
                    LocalSaveManager.Instance.SaveFuncGoesToQuest2Restore(null);
                    LocalSaveManager.Instance.SaveFuncGoesToQuest2Start(cSceneGoesParamToQuest2);
                    LocalSaveManager.Instance.SaveFuncInGameContinue(null);
                    LocalSaveManager.Instance.SaveFuncInGameReset(null);
                }
            }
        }
        //----------------------------------------
        // 通信発行
        //----------------------------------------
        ServerCommunicate();
    }