From 12daad889e93d4ca20da1d8fab40fa8464f5f267 Mon Sep 17 00:00:00 2001 From: Kazuhiro Fujieda Date: Thu, 15 Feb 2018 21:51:03 +0900 Subject: [PATCH] =?utf8?q?=E3=82=AF=E3=82=A6=E3=82=A9=E3=83=BC=E3=82=BF?= =?utf8?q?=E3=83=AA=E3=83=BC=E3=81=AE=E4=B8=80=E9=83=A8=E3=81=AE=E4=BB=BB?= =?utf8?q?=E5=8B=99=E3=81=AE=E3=82=AB=E3=82=A6=E3=83=B3=E3=82=BF=E3=82=92?= =?utf8?q?=E5=AE=9F=E8=A3=85=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- KancolleSniffer.Test/QuestInfoTest.cs | 93 ++++++++++++++++++++++++++++++++--- KancolleSniffer/QuestInfo.cs | 64 +++++++++++++++++++++--- 2 files changed, 142 insertions(+), 15 deletions(-) diff --git a/KancolleSniffer.Test/QuestInfoTest.cs b/KancolleSniffer.Test/QuestInfoTest.cs index 12122f9..cf3a211 100644 --- a/KancolleSniffer.Test/QuestInfoTest.cs +++ b/KancolleSniffer.Test/QuestInfoTest.cs @@ -500,6 +500,72 @@ namespace KancolleSniffer.Test } /// + /// 426: 海上通商航路の警戒を厳とせよ! + /// + [TestMethod] + public void MissionResult_426() + { + var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1)); + questInfo.InspectQuestList(Js(new + { + api_list = new[] + { + new {api_no = 426, api_category = 4, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}, + } + })); + + questInfo.InspectDeck(Js( + new[] + { + new {api_id = 2, api_mission = new[] {2, 3}}, + new {api_id = 3, api_mission = new[] {2, 4}}, + new {api_id = 4, api_mission = new[] {2, 5}}, + })); + questInfo.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1})); + questInfo.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1})); + questInfo.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1})); + PAssert.That(() => + questInfo.Quests[0].Count.NowArray.SequenceEqual(new[] {1, 1, 1, 0})); + questInfo.InspectDeck(Js( + new[] + { + new {api_id = 2, api_mission = new[] {2, 10}}, + })); + questInfo.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1})); + PAssert.That(() => + questInfo.Quests[0].Count.NowArray.SequenceEqual(new[] {1, 1, 1, 1})); + } + + /// + /// 428: 近海に侵入する敵潜を制圧せよ! + /// + [TestMethod] + public void MissionResult_428() + { + var questInfo = new QuestInfo(null, null, () => new DateTime(2015, 1, 1)); + questInfo.InspectQuestList(Js(new + { + api_list = new[] + { + new {api_no = 428, api_category = 4, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}, + } + })); + + questInfo.InspectDeck(Js( + new[] + { + new {api_id = 2, api_mission = new[] {2, 4}}, + new {api_id = 3, api_mission = new[] {2, 101}}, + new {api_id = 4, api_mission = new[] {2, 102}}, + })); + questInfo.InspectMissionResult("api%5Fdeck%5Fid=2", Js(new {api_clear_result = 1})); + questInfo.InspectMissionResult("api%5Fdeck%5Fid=3", Js(new {api_clear_result = 1})); + questInfo.InspectMissionResult("api%5Fdeck%5Fid=4", Js(new {api_clear_result = 1})); + PAssert.That(() => + questInfo.Quests[0].Count.NowArray.SequenceEqual(new[] {1, 1, 1})); + } + + /// /// 503: 艦隊大整備! /// 504: 艦隊酒保祭り! /// @@ -564,6 +630,7 @@ namespace KancolleSniffer.Test /// /// 613: 資源の再利用 /// 638: 対空機銃量産 + /// 663: 新型艤装の継続研究 /// 673: 装備開発力の整備 /// 674: 工廠環境の整備 /// 675: 運用装備の統合整備 @@ -571,10 +638,10 @@ namespace KancolleSniffer.Test /// 677: 継戦支援能力の整備 /// [TestMethod] - public void DestroyItem_613_638_673_674_675_676_677() + public void DestroyItem_613_638_663_673_674_675_676_677() { var itemInfo = new ItemInfo(); - var questInfo = new QuestInfo(itemInfo, null, () => new DateTime(2015, 1, 1)) {AcceptMax = 7}; + var questInfo = new QuestInfo(itemInfo, null, () => new DateTime(2015, 1, 1)) {AcceptMax = 8}; itemInfo.InjectItemSpec(new[] { @@ -595,6 +662,7 @@ namespace KancolleSniffer.Test { new {api_no = 613, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}, new {api_no = 638, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}, + new {api_no = 663, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}, new {api_no = 673, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}, new {api_no = 674, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}, new {api_no = 675, api_category = 6, api_state = 2, api_title = "", api_detail = "", api_progress_flag = 0}, @@ -604,16 +672,16 @@ namespace KancolleSniffer.Test })); questInfo.InspectDestroyItem("api%5Fslotitem%5Fids=1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9&api%5Fverno=1", null); PAssert.That(() => - questInfo.Quests.Select(q => new {q.Id, q.Count.Now}).Take(4).SequenceEqual(new[] + questInfo.Quests.Select(q => new {q.Id, q.Count.Now}).Take(5).SequenceEqual(new[] { - new {Id = 613, Now = 1}, new {Id = 638, Now = 1}, + new {Id = 613, Now = 1}, new {Id = 638, Now = 1}, new {Id = 663, Now = 1}, new {Id = 673, Now = 1}, new {Id = 674, Now = 1} })); - var q675 = questInfo.Quests[4]; + var q675 = questInfo.Quests[5]; PAssert.That(() => q675.Id == 675 && q675.Count.NowArray.SequenceEqual(new[] {1, 1})); - var q676 = questInfo.Quests[5]; + var q676 = questInfo.Quests[6]; PAssert.That(() => q676.Id == 676 && q676.Count.NowArray.SequenceEqual(new[] {1, 1, 1})); - var q677 = questInfo.Quests[6]; + var q677 = questInfo.Quests[7]; PAssert.That(() => q677.Id == 677 && q677.Count.NowArray.SequenceEqual(new[] {1, 1, 1})); } @@ -653,7 +721,9 @@ namespace KancolleSniffer.Test { new QuestCount {Id = 211, Now = 2}, new QuestCount {Id = 214, NowArray = new[] {20, 7, 10, 8}}, - new QuestCount {Id = 854, NowArray = new[] {2, 1, 1, 1}} + new QuestCount {Id = 854, NowArray = new[] {2, 1, 1, 1}}, + new QuestCount {Id = 426, NowArray = new[] {1, 1, 1, 1}}, + new QuestCount {Id = 428, NowArray = new[] {1, 1, 1}} } }; questInfo.LoadState(status); @@ -664,6 +734,13 @@ namespace KancolleSniffer.Test PAssert.That(() => z.ToToolTip() == "2-4 6-1 6-3 6-4"); z.NowArray = new[] {0, 0, 0, 0}; PAssert.That(() => z.ToToolTip() == ""); + var q426 = status.QuestCountList[3]; + PAssert.That(() => q426.ToString() == "4/4"); + PAssert.That(() => q426.ToToolTip() == "警備任務 対潜警戒任務 海上護衛任務 強硬偵察任務"); + var q428 = status.QuestCountList[4]; + PAssert.That(() => q428.ToToolTip() == "対潜警戒任務1 海峡警備行動1 長時間対潜警戒1"); + q428.NowArray = new[] {0, 1, 0}; + PAssert.That(() => q428.ToToolTip() == "海峡警備行動1"); } } } \ No newline at end of file diff --git a/KancolleSniffer/QuestInfo.cs b/KancolleSniffer/QuestInfo.cs index d59b61b..9fc458e 100644 --- a/KancolleSniffer/QuestInfo.cs +++ b/KancolleSniffer/QuestInfo.cs @@ -160,7 +160,7 @@ namespace KancolleSniffer public override string ToString() { - if (Id == 854) + if (Id == 426 || Id == 854) return $"{NowArray.Count(n => n >= 1)}/{Spec.MaxArray.Length}"; return NowArray != null ? string.Join(" ", NowArray.Zip(Spec.MaxArray, (n, m) => $"{n}/{m}")) @@ -169,11 +169,22 @@ namespace KancolleSniffer public string ToToolTip() { - return Id != 854 - ? "" - : string.Join(" ", - new[] {"2-4", "6-1", "6-3", "6-4"}.Zip(NowArray, (map, n) => n >= 1 ? map : "") - .Where(s => !string.IsNullOrEmpty(s))); + switch (Id) + { + case 426: + return string.Join(" ", + new[] {"警備任務", "対潜警戒任務", "海上護衛任務", "強硬偵察任務"}.Zip(NowArray, (mission, n) => n >= 1 ? mission : "") + .Where(s => !string.IsNullOrEmpty(s))); + case 428: + return string.Join(" ", + new[] {"対潜警戒任務", "海峡警備行動", "長時間対潜警戒"}.Zip(NowArray, (mission, n) => n >= 1 ? mission + n : "") + .Where(s => !string.IsNullOrEmpty(s))); + case 854: + return string.Join(" ", + new[] {"2-4", "6-1", "6-3", "6-4"}.Zip(NowArray, (map, n) => n >= 1 ? map : "") + .Where(s => !string.IsNullOrEmpty(s))); + } + return ""; } public bool Cleared => NowArray?.Zip(Spec.MaxArray, (n, m) => n >= m).All(x => x) ?? Now >= Spec.Max; @@ -229,6 +240,8 @@ namespace KancolleSniffer {410, new QuestMission {Interval = Weekly, Max = 1, Ids = new[] {37, 38}}}, // 410: 南方への輸送作戦を成功させよ! {411, new QuestMission {Interval = Weekly, Max = 6, Shift = 1, Ids = new[] {37, 38}}}, // 411: 南方への鼠輸送を継続実施せよ! {424, new QuestMission {Interval = Monthly, Max = 4, Shift = 1, Ids = new[] {5}}}, // 424: 輸送船団護衛を強化せよ! + {426, new QuestSpec {Interval = Quarterly, MaxArray = new[] {1, 1, 1, 1}}}, // 426: 海上通商航路の警戒を厳とせよ! + {428, new QuestSpec {Interval = Quarterly, MaxArray = new[] {2, 2, 2}}}, // 428: 近海に侵入する敵潜を制圧せよ! {503, new QuestSpec {Interval = Daily, Max = 5}}, // 503: 艦隊大整備! {504, new QuestSpec {Interval = Daily, Max = 15}}, // 504: 艦隊酒保祭り! @@ -242,6 +255,7 @@ namespace KancolleSniffer {613, new QuestSpec {Interval = Weekly, Max = 24}}, // 613: 資源の再利用 {638, new QuestDestroyItem {Interval = Weekly, Max = 6, Items = new[] {21}}}, // 638: 対空機銃量産 + {663, new QuestDestroyItem {Interval = Quarterly, Max = 10, Items = new[] {3}} }, // 663: 新型艤装の継続研究 {673, new QuestDestroyItem {Interval = Daily, Max = 4, Items = new[] {1}, Shift = 1}}, // 673: 装備開発力の整備 {674, new QuestDestroyItem {Interval = Daily, Max = 3, Items = new[] {21}, Shift = 2}}, // 674: 工廠環境の整備 {675, new QuestSpec {Interval = Quarterly, MaxArray = new[] {6, 4}}}, // 675: 運用装備の統合整備 @@ -535,14 +549,50 @@ namespace KancolleSniffer var deck = int.Parse(values["api_deck_id"]); if ((int)json.api_clear_result == 0) return; + var mid = _missionId[deck - 1]; foreach (var quest in _quests.Values) { var count = quest.Count; if (!(count.Spec is QuestMission mission)) continue; - if (mission.Check(_missionId[deck - 1])) + if (mission.Check(mid)) IncrementCount(count); } + if (_quests.TryGetValue(426, out var q426)) + { + var count = q426.Count; + switch (mid) + { + case 3: + count.NowArray[0]++; + break; + case 4: + count.NowArray[1]++; + break; + case 5: + count.NowArray[2]++; + break; + case 10: + count.NowArray[3]++; + break; + } + } + if (_quests.TryGetValue(428, out var q428)) + { + var count = q428.Count; + switch (mid) + { + case 4: + count.NowArray[0]++; + break; + case 101: + count.NowArray[1]++; + break; + case 102: + count.NowArray[2]++; + break; + } + } } private void IncrementCount(QuestCount count) -- 2.11.0