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); } }); }
//---------------------------------------------------------------------------- /*! * @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(); }