poi-plugin-quest-info-2 0.8.4 → 0.8.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- 148476742357a844acd8fd6ca11723711fd4217d
1
+ 9e3d68b81583efb366edf0a296854f08e52ef6e8
@@ -4,4 +4,4 @@ export const KcwikiQuestData = {
4
4
  'zh-CN': zh_CN,
5
5
  }
6
6
 
7
- export const version = '148476742357a844acd8fd6ca11723711fd4217d'
7
+ export const version = '9e3d68b81583efb366edf0a296854f08e52ef6e8'
@@ -1,11 +1,10 @@
1
1
  [
2
2
  "315",
3
- "356",
3
+ "326",
4
4
  "932",
5
- "971",
6
- "972",
7
- "973",
8
- "974",
9
- "975",
10
- "1114"
5
+ "979",
6
+ "980",
7
+ "981",
8
+ "1116",
9
+ "1117"
11
10
  ]
@@ -903,7 +903,7 @@
903
903
  },
904
904
  "191": {
905
905
  "code": "A86",
906
- "desc": "改装驱逐舰编成任务:以改装过的阳炎型驱逐舰 “浦风改”“谷风改”,\\n 以及为应对激化的对空战斗而着重对空兵装大幅度强化改装过的 “矶风乙改”“滨风乙改”, 再次编成 “第十七驱逐队”!",
906
+ "desc": "改装驱逐舰编成任务:以改装过的阳炎型驱逐舰 “浦风改”“谷风改”,以及为应对激化的对空战斗而着重对空兵装大幅度强化改装过的 “矶风乙改”“滨风乙改”, 再次编成 “第十七驱逐队”!",
907
907
  "memo": "奖励:伊良湖 *1 补强增设 *1",
908
908
  "memo2": "有任务完成音效",
909
909
  "name": "改装「第十七驱逐队」再编成开始!",
@@ -2206,10 +2206,10 @@
2206
2206
  ]
2207
2207
  },
2208
2208
  "326": {
2209
- "code": "C59",
2209
+ "code": "C67",
2210
2210
  "desc": "夏季大演习:夏季期间一日之中「演习」取得 8 回以上「胜利」,努力提高舰队的练度!不要输给酷暑!舰队、拔锚!",
2211
- "memo": "奖励:间宫 *1 礼物箱 *1",
2212
- "memo2": "夏季期间限定单日演习 8 次 S 胜 (与「夏季大演習 (C45) 内容相同)",
2211
+ "memo": "奖励:间宫 ×1 礼物箱 ×1",
2212
+ "memo2": "夏季期间限定单日演习 8 次 S 胜 ( “夏季大演习 (C59) 内容相同)",
2213
2213
  "name": "夏季大演习",
2214
2214
  "pre": []
2215
2215
  },
@@ -2486,6 +2486,16 @@
2486
2486
  "B180"
2487
2487
  ]
2488
2488
  },
2489
+ "357": {
2490
+ "code": "C66",
2491
+ "desc": "大和型战舰演习任务:编成以大和型战舰「大和」以及「武藏」两舰、僚舰轻巡 1 艘、驱逐舰 2 艘以上的演习舰队。今日在同一舰队的演习中取得 3 次或更多【S 胜利】以上的的判定吧!",
2492
+ "memo": "奖励:以下奖励三选一:15.5cm 三連装副砲 ×2 新型火炮兵装资材 开发资材 ×6 以下奖励三选一:间宫 21 号対空電探 ×2 改修资材 ×4",
2493
+ "memo2": "年常任务 (6 月) 大和 + 武藏 + 轻巡 1 艘 + 驱逐舰 2 艘 + 任意舰,在演习取得 3 次【S 胜利】。",
2494
+ "name": "「大和型战舰」第一舰队演习开始!",
2495
+ "pre": [
2496
+ "C46"
2497
+ ]
2498
+ },
2489
2499
  "401": {
2490
2500
  "code": "D1",
2491
2501
  "desc": "舰队出发「远征」!",
@@ -5823,7 +5833,9 @@
5823
5833
  "memo": "奖励:以下奖励三选一:新型火炮兵装资材 新型航空兵装资材 补强增设 以下奖励三选一:试制 长 12.7cm 连装炮 A 型改四新型航空兵装资材 ×3 战斗详报",
5824
5834
  "memo2": "浦波改二 + 青叶 + 鬼怒 + 任意舰,出击 1-4、2-3、2-5、7-2P2、7-4 各一次 S 胜",
5825
5835
  "name": "第十六战队,改装「浦波改二」出击!",
5826
- "pre": []
5836
+ "pre": [
5837
+ "B86"
5838
+ ]
5827
5839
  },
5828
5840
  "971": {
5829
5841
  "code": "2204B2",
@@ -5849,7 +5861,9 @@
5849
5861
  "memo": "奖励:以下奖励三选一:开发资材 ×8 熟练搭乘员 新型航空兵装资材 以下奖励三选一:Swordfish (水上機型) ×2SOC Seagull OS2U",
5850
5862
  "memo2": "年常任务 (5 月) 包含任意英国和美国舰娘共三艘,加其他任意舰娘 Red",
5851
5863
  "name": "日英美联合水上舰队,起航!",
5852
- "pre": []
5864
+ "pre": [
5865
+ "B141"
5866
+ ]
5853
5867
  },
5854
5868
  "974": {
5855
5869
  "code": "B180",
@@ -5858,7 +5872,8 @@
5858
5872
  "memo2": "包含矶波改二的舰队出击 1-2、1-3、5-1,各一次 S 胜",
5859
5873
  "name": "「矶波改二」,起航!",
5860
5874
  "pre": [
5861
- "By1"
5875
+ "By1",
5876
+ "B79"
5862
5877
  ]
5863
5878
  },
5864
5879
  "975": {
@@ -5871,6 +5886,65 @@
5871
5886
  "C65"
5872
5887
  ]
5873
5888
  },
5889
+ "976": {
5890
+ "code": "B181",
5891
+ "desc": "以旗舰大和改二 / 重、僚舰轻巡 1 艘、驱逐舰 2 艘以上的舰队,出击镇守府海域南西群岛防卫线、南西群岛海域冲之岛海、南方海域前方、西方海域加斯加达马岛!摧毁敌方部队!",
5892
+ "memo": "奖励:以下奖励三选一:高速修复材 ×10 新型火炮兵装资材 ×2 补强增设 以下奖励三选一:試製 51cm 連装砲 15.5cm 三連装副砲改二 Green",
5893
+ "memo2": "旗舰大和改二 / 改二重 + 轻巡 1 艘 + 驱逐舰 2 艘 + 任意舰出击 1-4、2-5、5-1、4-4,各一次 S 胜",
5894
+ "name": "改大和型战列舰「大和改二」、出击!",
5895
+ "pre": [
5896
+ "B32",
5897
+ "F109"
5898
+ ]
5899
+ },
5900
+ "977": {
5901
+ "code": "B182",
5902
+ "desc": "部署由两艘改装大和级战列舰「大和改二 / 重」和「武蔵改二」以及两艘或以上的驱逐舰组成的舰队!在咖喱洋里兰卡岛海域、萨部岛近海海域、塔威塔威泊地海岸深处、kw 环礁沿海海域消灭敌人!",
5903
+ "memo": "奖励:以下奖励三选一:改装设计图 战斗详报 10cm 連装高角砲群 集中配備以下奖励三选一:15m 二重測距儀 + 21 号電探改二 46cm 三連装砲改 Green",
5904
+ "memo2": "大和改二 / 改二重 + 武藏改二 + 驱逐舰 2 艘 + 2 任意舰出击 4-5、5-3、7-2P2、6-5 各 S 胜一次。",
5905
+ "name": "遇敌必歼!最精锐大和型「第一战队」起锚!",
5906
+ "pre": [
5907
+ "B181",
5908
+ "C66"
5909
+ ]
5910
+ },
5911
+ "978": {
5912
+ "code": "B183",
5913
+ "desc": "【扩张作战】以重型改装「大和改二重」为旗舰的强大舰队出击槟榔屿海域深处、昭南本土航线、沙门海域北方、中部北海域孔雀岛近海!摧毁并粉碎每个海域的敌舰!",
5914
+ "memo": "奖励:以下奖励三选一:间宫 ×2 新型兵装资材 ×2 改修资材 ×8 以下奖励三选一:15m 二重测距仪改 + 21 号电探改二 + 熟练射击指挥所试制 51cm 三连装炮 10cm 連装高角砲群 集中配備 Green",
5915
+ "memo2": "旗舰大和改二重 + 任意舰出击 7-3P2、7-4、5-5、6-4 各一次 S 胜利",
5916
+ "name": "【扩张作战】重型改装「大和改二重」出击!",
5917
+ "pre": [
5918
+ "B182"
5919
+ ]
5920
+ },
5921
+ "979": {
5922
+ "code": "2207B1",
5923
+ "desc": "在镇守府周围进行海上护航并准备后勤! 出击镇守府海域南西群岛近海、炼油厂地带沿岸、镇守府近海、镇守府近海航路、南西群岛东部奥廖尔海! 以确保安全!",
5924
+ "memo": "奖励:以下奖励三选一:高速修复材 ×8 钢材 ×4000 开发资材 ×10 以下奖励三选一:勋章 ×1 燃料 ×8000 特制家具职人 ×1",
5925
+ "memo2": "以任意舰队出击 1-2、1-3、1-5、2-3 各一次 A 胜以上?1-6 到达终点一次",
5926
+ "name": "【期间限定任务】资源回复海上护卫",
5927
+ "pre": []
5928
+ },
5929
+ "980": {
5930
+ "code": "B184",
5931
+ "desc": "由第十五驱逐队「早潮改二」「親潮改二」「黒潮改二」包含其中两艘的舰队,消灭冲之岛海域、沙门海域、沙门海域北方、中部北海域孔雀岛近海附近的部队!",
5932
+ "memo": "奖励:以下奖励三选一:特制家具职人 ×1 补强增设 ×1 勋章 ×1 以下奖励三选一:战斗详报 ×112.7cm 连装炮 C 型改三 x161cm 四連装 (酸素) 魚雷後期型 ×1",
5933
+ "memo2": "以早潮改二、親潮改二、黒潮改二其中两艘 + 任意舰四艘出击 2-4、5-4、5-5、6-4 各一次 S 胜",
5934
+ "name": "起锚!精强「第十五驱逐队」",
5935
+ "pre": []
5936
+ },
5937
+ "981": {
5938
+ "code": "B185",
5939
+ "desc": "编成包含「Fletcher 级」以及「John C.Butler 级」2 只以上的舰队,反复出击南西诸岛东部奥廖尔海,中部北海域孔雀岛近海,南西海域槟榔屿海域深部,昭南本土航线!消灭敌军!",
5940
+ "memo": "奖励:以下奖励三选一:特制家具职人 ×2 间宫 ×2 改修资材 ×7 以下奖励二选一:5inch 単装砲 Mk.30 ×4GFCS Mk.37 ×1",
5941
+ "memo2": "以 Fletcher、Johnston、Samuel B.Roberts 其中两艘 + 任意舰四艘出击 2-3、6-4、7-3P2、7-4 各 2 次 S 胜",
5942
+ "name": "美驱逐舰部队的激战",
5943
+ "pre": [
5944
+ "B184",
5945
+ "F110"
5946
+ ]
5947
+ },
5874
5948
  "1101": {
5875
5949
  "code": "F96",
5876
5950
  "desc": "工厂整备:废弃「12.7cm 连装炮」x8,准备家具币 x4000 和「14cm 单装炮」「20.3cm 连装炮」各 x4!※完成任务后,准备了的家具币和必要装备 (低改修值的优先) 会被消费。",
@@ -5995,5 +6069,35 @@
5995
6069
  "memo2": "废弃小口径主炮、中口径主炮、副炮各 3 个准备 35.6cm 连装炮 ×3、高速建造材 ×8、铝 ×800",
5996
6070
  "name": "「工厂任务」新装备开发计划 I",
5997
6071
  "pre": []
6072
+ },
6073
+ "1115": {
6074
+ "code": "F109",
6075
+ "desc": "废弃大口径主炮、副炮、水上侦察机各装备各废弃 3 个,准备 46cm 三连装炮 x2、洋上补给 x4 以及 2700 弹药!※任务完成后,准备的装备和资源会被消耗。",
6076
+ "memo": "奖励:以下奖励三选一:新型火炮兵装资材 新型高温高圧缶 开发资材 ×6 以下奖励三选一:新型兵装资材 ×2 新型高温高圧缶 勋章",
6077
+ "memo2": "",
6078
+ "name": "【工厂任务】新装备开发计划 II",
6079
+ "pre": [
6080
+ "C3",
6081
+ "F108"
6082
+ ]
6083
+ },
6084
+ "1116": {
6085
+ "code": "F110",
6086
+ "desc": "「水上侦察机」「水上轰炸机 / 多用途水上机」「机枪」各废弃 3 个、准备「九八式水上侦察机 (夜侦)」x2、高速建造资材 x10、钢材 2800!(任务完成后,会消耗准备好的资源、夜侦以及资材)",
6087
+ "memo": "奖励:以下奖励二选一:开发资材 ×8 改修资材 ×2 以下奖励三选一:新型航空兵装资材 ×1 改修资材 ×3 熟练搭乘员 ×1",
6088
+ "memo2": "",
6089
+ "name": "【工厂任务】新装备开发计划 III",
6090
+ "pre": []
6091
+ },
6092
+ "1117": {
6093
+ "code": "F111",
6094
+ "desc": "旗舰「川内改二」或「由良改二」,在第一装备格装备改修 max「九八式水上侦察机 (夜侦)」,准备改修 max「零式水上侦察机 11 型乙」x1,改修资材 x13,开发资材 x13,以及熟练搭载员 x3!",
6095
+ "memo": "奖励:零式水上侦察机 11 型乙改 (夜侦)×1",
6096
+ "memo2": "",
6097
+ "name": "【工厂任务】新夜侦的实装配备",
6098
+ "pre": [
6099
+ "F101",
6100
+ "F110"
6101
+ ]
5998
6102
  }
5999
6103
  }
@@ -1 +1 @@
1
- 2022042601
1
+ 2022071002
@@ -12,4 +12,4 @@ export const QuestData = {
12
12
  'ko-KR': ko_KR,
13
13
  }
14
14
 
15
- export const version = '2022042601'
15
+ export const version = '2022071002'
@@ -2063,6 +2063,12 @@
2063
2063
  "desc": "Secure 4 S-Rank victories in Exercises within the same day using Oyashio Kai Ni and Kuroshio Kai Ni as the first two ships and up to 4 additional ships.",
2064
2064
  "memo": "This quest resets on the first quest reset of October. ※Elite DesDiv 15 First Platoon Exercises! ➣Rewards: ¶First choice: Either a ★+2 Type 22 Surface Radar Kai 4 OR a ★+2 Skilled Lookouts ¶Second choice: Either two Irako OR three Screws"
2065
2065
  },
2066
+ "356": {
2067
+ "code": "C65",
2068
+ "name": "Annual DesDiv 19 Excercises - May",
2069
+ "desc": "Secure 3 S-Rank victories in Exercises within the same day using Isonami Kai Ni, Uranami Kai Ni, Ayanami Kai Ni, Shikinami Kai Ni and up to 2 additional ships.",
2070
+ "memo": "This quest resets on the first quest reset of May. ※Elite DesDiv 19 Exercises! ➣Rewards: ¶First choice: Either a Irako OR four Development Materials ¶Second choice: Either a ★+4 Skilled Lookouts OR a Mamiya OR three Screws"
2071
+ },
2066
2072
  "401": {
2067
2073
  "code": "D1",
2068
2074
  "name": "The First Expedition!",
@@ -4139,6 +4145,24 @@
4139
4145
  "desc": "Sortie a CVL as flagship, 2 DD and up to 3 additional ships to [W2-3], [W3-5], [W7-4] and [W6-4]. S-Rank each boss node.",
4140
4146
  "memo": "➣ Rewards either six New Model Aviation Armament Materials OR 3 Medals OR a 51cm Twin Gun Mount"
4141
4147
  },
4148
+ "973": {
4149
+ "code": "By11",
4150
+ "name": "Annual UK-US Joint Surface Fleet - May",
4151
+ "desc": "Sortie 3 British/American ships, no any CV(L/B) and up to 3 additional ships to [W3-1], [W3-3], [W4-3] and [W7-3-P]. A-Rank+ the boss node of each.",
4152
+ "memo": "This quest resets on the first quest reset of May. ※Japan-UK-US Joint Surface Fleet, Weigh Anchor! ➣Rewards: ¶First choice: Either eight Development Materials OR a Skilled Crew Member OR a New Model Aviation Armament Materials ¶Second choice: Either two Swordfish (Seaplane Model) OR a SOC Seagull OR a OS2U"
4153
+ },
4154
+ "974": {
4155
+ "code": "B180",
4156
+ "name": "Isonami Kai Ni, Weigh Anchor!",
4157
+ "desc": "Sortie a fleet with Isonami Kai Ni and up to 5 additional ships to [W1-2], [W1-3] and [W5-1]. S-Rank each boss node.",
4158
+ "memo": "➣Rewards: ¶First choice: Either nine Buckets OR a New Model Artillery Armament Materials OR a Reinforcement Expansion ¶Second choice: Either a 12.7cm Twin Gun Mount Model A Kai Ni OR two 61cm Triple (Oxygen) Torpedo Mount OR nine Development Materials"
4159
+ },
4160
+ "975": {
4161
+ "code": "By12",
4162
+ "name": "Annual DesDev 19 Sortie - May",
4163
+ "desc": "Sortie Isonami Kai Ni, Uranami Kai Ni, Ayanami Kai Ni, Shikinami Kai Ni, and up to 2 additional ships to [W1-5], [W2-3], [W3-2] and [W5-3]. S-Rank the boss node of each.",
4164
+ "memo": "This quest resets on the first quest reset of May. ※Elite DesDiv 19, All-out Sortie! ➣Rewards: ¶First choice: Either two Skilled Lookouts OR four Screws OR nine Buckets ¶Second choice: Either two Medals OR two 12.7cm Twin Gun Mount Model A Kai Ni OR a 61cm Triple (Oxygen) Torpedo Mount Late Model"
4165
+ },
4142
4166
  "1101": {
4143
4167
  "code": "F96",
4144
4168
  "name": "Another Naval Arsenal Maintenance",
@@ -4210,5 +4234,11 @@
4210
4234
  "name": "Deployment a New Assault Aircraft with [Guided Missile]",
4211
4235
  "desc": "Have a Ki-102 B, a Type 2 Two-seat Fighter Toryuu Model C, two Skilled Crew Members and four New Model Aviation Armament Materials.",
4212
4236
  "memo": "✘ Consumes the items (even with any ★). ➣ Rewards a Ki-102 B Kai + No.1 Model 1B Guided Missile"
4237
+ },
4238
+ "1114": {
4239
+ "code": "F108",
4240
+ "name": "New Equipment Development Plan I",
4241
+ "desc": "Have three 35.6cm Twin Gun Mounts, 8 Flamethrowers and 800 bauxite. Scrap 3 Small Cal. Main Guns, 3 Medium Cal. Main Guns and 3 Secondary Guns.",
4242
+ "memo": "✘Consumes the items and resources. ➣Rewards: ¶First choice: Either a New Model Artillery Armament Materials OR a New Model Aviation Armament Materials OR five Development Materials ¶Second choice: Either a New Model Armament Materials OR a New Model Rocket Development Materials OR three Screws"
4213
4243
  }
4214
4244
  }
@@ -1396,6 +1396,12 @@
1396
1396
  "desc": "旗艦に「黒潮改二」または「親潮改二」、そのいずれかを二番艦とする演習艦隊で、本日中に【S 判定】勝利を 4 回以上達成せよ!",
1397
1397
  "memo": "※イヤーリー (10 月) ※演習:当日中に演習で 4 回 S 勝利 ※編成:黒潮改二・親潮改二を旗艦 + 黒親潮改二・潮改二を二番艦 + 自由枠 4 [獲] 二回選択報酬: 22 号対水上電探改四★2x1、熟練見張員★2x1 / 給糧艦「伊良湖」x2、改修資材 x3"
1398
1398
  },
1399
+ "356": {
1400
+ "code": "C65",
1401
+ "name": "精鋭「第十九駆逐隊」演習!",
1402
+ "desc": "精鋭駆逐艦演習任務:精鋭第十九駆逐隊「磯波改二」「浦波改二」「綾波改二」「敷波改二」4 隻を含む演習艦隊を編成。同艦隊で本日中に演習で【S 判定】勝利 3 回以上を達成せよ!",
1403
+ "memo": "※イヤーリー (5 月) ※演習:当日中に演習で 3 回 S 勝利 ※編成:磯波改二 + 浦波改二 + 綾波改二 + 敷波改二 + 自由枠 2 [獲] 二回選択報酬:給糧艦「伊良湖」x1、開発資材 x4 / 熟練見張員★4x1、給糧艦「間宮」x1、改修資材 x3"
1404
+ },
1399
1405
  "401": {
1400
1406
  "code": "D1",
1401
1407
  "name": "はじめての「遠征」!",
@@ -3113,7 +3119,7 @@
3113
3119
  "code": "B179",
3114
3120
  "name": "第十六戦隊、改装「浦波改二」出撃します!",
3115
3121
  "desc": "「浦波改二」、さらに「青葉」「鬼怒」を含む艦隊で、南西諸島防衛線、東部オリョール海、沖ノ島沖、タウイタウイ泊地沖深部、昭南本土航路へ出撃!敵艦隊を捕捉撃滅せよ!",
3116
- "memo": "※出撃:1-4・2-3・2-5・7-2-M・7-4 のボスマスを各 1 回ずつ S 勝利\n※編成:浦波改二 + 青葉 + 鬼怒 + 自由枠 3 [獲] 二回選択報酬:新型砲熕兵装資材 x1、新型航空兵装資材 x1、補強増設 x1 / 試製 長 12.7cm 連装砲 A 型改四 x1、新型航空兵装資材 x3、戦闘詳報 x1"
3122
+ "memo": "※出撃:1-4・2-3・2-5・7-2-M・7-4 のボスマスを各 1 回ずつ S 勝利 ※編成:浦波改二 + 青葉 + 鬼怒 + 自由枠 3 [獲] 二回選択報酬:新型砲熕兵装資材 x1、新型航空兵装資材 x1、補強増設 x1 / 試製 長 12.7cm 連装砲 A 型改四 x1、新型航空兵装資材 x3、戦闘詳報 x1"
3117
3123
  },
3118
3124
  "971": {
3119
3125
  "code": "2204B2",
@@ -3127,6 +3133,24 @@
3127
3133
  "desc": "【九周年任務拡張作戦】旗艦に軽空母、随伴駆逐艦 2 隻以上の艦隊で、東部オリョール海、北方 AL 海域、昭南本土航路、中部北海域ピーコック島沖へ出撃!敵戦力を撃滅せよ!",
3128
3134
  "memo": "※期間限定 ※出撃:2-3・3-5・7-4・6-4 のボスマスを各 1 回ずつ S 勝利 ※編成:軽母を旗艦 + 駆逐 2 + 自由枠 3 [獲] 家具「祝九周年!春の飾り窓」、選択報酬:新型航空兵装資材 x6、勲章 x3、51cm 連装砲 x1"
3129
3135
  },
3136
+ "973": {
3137
+ "code": "By11",
3138
+ "name": "日英米合同水上艦隊、抜錨せよ!",
3139
+ "desc": "米英艦艇 3 隻以上を含む空母を伴わない艦隊で、北方海域モーレイ海及びアルフォンシーノ方面、西方海域リランカ島、南西海域ペナン島沖深部を哨戒、敵戦力を捕捉、これを撃破せよ!",
3140
+ "memo": "※イヤーリー (5 月) ※出撃:3-1・3-3・4-3・7-3-P のボスマスを各 1 回ずつ A 勝利以上 ※編成:空母なしの (米英艦計 3 隻 + 自由枠 3) ※空母だから軽空母も護衛空母も装甲空母も不可なので注意 ※自由枠だからタイトルと関係なく日本艦なくても可、その他の海外艦いても可 ※金剛は英艦ではなく自由枠になるので注意 ※2022 年 4 月まで実装された米英艦に限られる可能性にも注意 [獲] 二回選択報酬:開発資材 x8、熟練搭乗員 x1、新型航空兵装資材 x1 / Swordfish (水上機型) x2、SOC Seagull x1、OS2U x1"
3141
+ },
3142
+ "974": {
3143
+ "code": "B180",
3144
+ "name": "「磯波改二」、抜錨せよ!",
3145
+ "desc": "改装特 I 型駆逐艦「磯波改二」を含む有力な艦隊で、鎮守府海域南西諸島沖、製油所地帯沿岸、さらに南方海域前面に展開!各作戦海域の敵艦隊を捕捉、これを撃滅せよ!",
3146
+ "memo": "※出撃:1-2・1-3・5-1 のボスマスを各 1 回ずつ S 勝利 ※編成:磯波改二 + 自由枠 5 [獲] 二回選択報酬:高速修復材 x9、新型砲熕兵装資材 x1、補強増設 x1 / 12.7cm 連装砲 A 型改二 x1、61cm 三連装 (酸素) 魚雷 x2、開発資材 x9"
3147
+ },
3148
+ "975": {
3149
+ "code": "By12",
3150
+ "name": "精鋭「第十九駆逐隊」、全力出撃!",
3151
+ "desc": "精鋭第十九駆逐隊「磯波改二」「浦波改二」「綾波改二」「敷波改二」を含む艦隊で、鎮守府近海、南西諸島東部オリョール海、北方キス島沖、南方サブ島沖海域に出撃!敵艦隊を捕捉撃滅せよ!",
3152
+ "memo": "※イヤーリー (5 月) ※出撃:1-5・2-3・3-2・5-3 のボスマスを各 1 回ずつ S 勝利 ※編成:磯波改二 + 浦波改二 + 綾波改二 + 敷波改二 + 自由枠 2 [獲] 二回選択報酬:熟練見張員 x2、改修資材 x4、高速修復材 x9 / 勲章 x2、12.7cm 連装砲 A 型改二 x2、61cm 三連装 (酸素) 魚雷後期型 x1"
3153
+ },
3130
3154
  "1101": {
3131
3155
  "code": "F96",
3132
3156
  "name": "海軍工廠の再整備",
@@ -3198,5 +3222,11 @@
3198
3222
  "name": "「無線誘導弾」装備新型襲撃機の実戦配備",
3199
3223
  "desc": "イ号一型乙誘導弾搭載機の開発:陸軍新鋭襲撃機「キ 102 乙」x1 及び「二式複戦 屠龍 丙型」x1、熟練搭乗員 x2、さらに新型航空兵装資材 x4 を準備せよ!(任務達成後、用意した資材等は消滅します)",
3200
3224
  "memo": "※消費装備のロックを予め解除しておくこと ※もし達成状態一時解除したい場合はどれかを基地に配備すればいい ※いつも通り改修値が消えるので嫌なら別の無改修キ 102 乙を用意すること [獲] キ 102 乙改 + イ号一型乙 誘導弾 x1"
3225
+ },
3226
+ "1114": {
3227
+ "code": "F108",
3228
+ "name": "【工廠任務】新装備開発計画 I",
3229
+ "desc": "「小口径主砲」「中口径主砲」「副砲」各 x3 装備を廃棄、「35.6cm 連装砲」x3、高速建造材 x8、ボーキサイト 800 を準備せよ!(任務達成後、準備した資源・装備・高速建造材は消費します)",
3230
+ "memo": "[獲] 二回選択報酬:新型砲熕兵装資材 x1、新型航空兵装資材 x1、開発資材 x5 / 新型兵装資材 x1、新型噴進装備開発資材 x1、改修資材 x3"
3201
3231
  }
3202
3232
  }
@@ -1475,6 +1475,12 @@
1475
1475
  "desc": "기함에 「쿠로시오 개2」 또는 「오야시오 개2」, 나머지를 2번함으로 하는 연습함대로, 오늘 중에 【S판정】승리를 4회 이상 달성하라!",
1476
1476
  "memo": "※연간 임무 (10월). 쿠로시오 개2와 오야시오 개2를 1, 2번함으로 하는 함대로 하루에 연습전 S승리 4회 / 보상 : 연료 150, 탄약 150, 강재 150, (22호 대수상전탐 개4 ☆+2 or숙련견시원 ☆+2), (급양함 「이라코」×2 or개수자재×5)"
1477
1477
  },
1478
+ "356": {
1479
+ "code": "C65",
1480
+ "name": "정예 「제19구축대」, 전력 출격!",
1481
+ "desc": "정예 구축함 연습 임무 : 정예 제19구축대 「이소나미 개2」 「우라나미 개2」 「아야나미 개2」 「시키나미 개2」 4척을 포함한 연습함대를 편성. 동 함대로 오늘 중에 연습에서 【S판정】 승리 3회 이상을 달성하라!",
1482
+ "memo": "※연간 임무 (5월). 이소나미 개2, 우라나미 개2, 아야나미 개2, 시키나미 개2를 포함한 함대로 하루에 연습전 S승리 3회 / 보상 : 연료 190, 탄약 190, 강재 190, (급양함 「이라코」 or 개발자재×4), (숙련견시원★+4 or 급양함 「마미야」 or 개수자재×3)"
1483
+ },
1478
1484
  "401": {
1479
1485
  "code": "D1",
1480
1486
  "name": "첫 원정",
@@ -3203,6 +3209,24 @@
3203
3209
  "desc": "【9주년 임무 확장작전】기함에 경항모, 수반 구축함 2척 이상의 함대로, 동부 오룔 해, 북방AL해역, 싱가포르 본토 항로, 중부 북해역 피콕 섬 앞바다에 출격! 적 전력을 격멸하라!",
3204
3210
  "memo": "※기함 경항모, 구축함 2척 이상이 포함된 함대로 2-3, 3-5, 6-4, 7-4 각각 S승리 1회 / 보상 : 연료 900, 탄약 900, 보크사이트 900, (가구) 祝 9주년! 봄 장식 창문, (신형항공병장자재×6 or 훈장×3 or 51cm 연장포)"
3205
3211
  },
3212
+ "973": {
3213
+ "code": "By11",
3214
+ "name": "미일영 합동 수상함대, 발묘하라!",
3215
+ "desc": "미영함정 3척 이상을 포함하고 항모를 수반하지 않은 함대로, 북방해역 모레이 해 및 알폰시노 방면, 서방해역 리랑카 섬, 남서해역 페낭 섬 앞바다 심부를 초계, 적 전력을 포착, 이를 격파하라!",
3216
+ "memo": "※연간 임무(5월). 미국, 영국 칸무스 3척 이상 포함, '항공모함이 편성되지 않은 함대'로 3-1, 3-3, 4-3, 7-3-2 각각 S승리 / 보상 : 연료 350, 탄약 450, 강재 350, 보크사이트 550, (개발자재×8 or 숙련탑승원 or 신형항공병장자재), (Swordfish(수상기형)×2 or SOC Seagull or OS2U)"
3217
+ },
3218
+ "974": {
3219
+ "code": "B180",
3220
+ "name": "「이소나미 개2」, 발묘하라!",
3221
+ "desc": "개장 특1형 구축함 「이소나미 개2」를 포함한 유력한 함대로, 진수부해역 남서제도 앞바다, 제유소 지대 연안, 거기에 남방해역 전면에 전개! 각 작전해역의 적 함대를 포착, 이를 격멸하라!",
3222
+ "memo": "※이소나미 개2를 포함한 함대로 1-2, 1-3, 5-1 각각 S승리 / 보상 : 연료 190, 탄약 190, 강재 190, (고속수복재×9 or 신형포공병장자재 or 보강증설), (12.7cm 연장포 A형 개2 or 61cm 3연장(산소)어뢰×2 or 개발자재×9)"
3223
+ },
3224
+ "975": {
3225
+ "code": "By12",
3226
+ "name": "정예 「제19구축대」, 전력 출격!",
3227
+ "desc": "정예 제19구축대 「이소나미 개2」 「우라나미 개2」 「아야나미 개2」 「시키나미 개2」를 포함한 함대로, 진수부 근해, 남서제도 동부 오룔 해, 북방 키스 섬 앞바다, 남방 사부 섬 앞바다 해역에 출격! 적 함대를 포착 격멸하라!",
3228
+ "memo": "※연간 임무(5월). 이소나미 개2, 우라나미 개2, 아야나미 개2, 시키나미 개2를 포함한 함대로 1-5, 2-3, 3-2, 5-3 각각 S승리 / 보상 : 연료 190, 탄약 190, 강재 190, 보크사이트 190, (훈장×2 or 12.7cm 연장포 A형 개2×2 or 61cm 3연장(산소)어뢰 후기형), (숙련견시원x2 or 개수자재x4 or 고속수복재x9)"
3229
+ },
3206
3230
  "1101": {
3207
3231
  "code": "F96",
3208
3232
  "name": "해군 공창의 재정비",
@@ -3274,5 +3298,11 @@
3274
3298
  "name": "「무선 유도탄」 장비 신형 습격기의 실전 배비",
3275
3299
  "desc": "이호 1형乙 유도탄 탑재기의 개발 : 육군 신예 습격기 「키-102을」×1 및 「2식복전 토류 병형」×1, 숙련탑승원×2, 거기에 신형항공병장자재×4를 준비하라! (임무 달성 후, 준비한 자재 등은 소멸합니다.)",
3276
3300
  "memo": "※키-102을, 2식복전 토류 병형 각각 1기, 숙련탑승원 2개, 신형항공병자자재 4개 준비(※ 키-102을이 강화된 상태일 경우, 그 강화치는 임무 달성 후 0으로 줄어듦에 주의) 보상 : 보크사이트 300, 키-102을 개 + 이호 1형乙 유도탄"
3301
+ },
3302
+ "1114": {
3303
+ "code": "F108",
3304
+ "name": "【공창임무】신장비 개발 계획 1",
3305
+ "desc": "「소구경주포」 「중구경주포」 「부포」 각×3 장비를 폐기, 「35.6cm 연장포」×3, 고속건조재×8, 보크사이트 800을 준비하라! (임무 달성 후, 준비한 자원·장비·고속건조재는 소비합니다.)",
3306
+ "memo": "※35.6cm 연장포×3, 고속건조재×8, 보크사이트 800 준비, 소구경주포/중구경주포/부포 계열 장비 각각 3기씩 폐기 / 보상 : 탄약 200, 강재 200, (신형포공병장자재 or 신형항공병장자재 or 개발자재×5), (신형병장자재 or 신형분진장비개발자재 or 개수자재×3)"
3277
3307
  }
3278
3308
  }
@@ -1543,6 +1543,12 @@
1543
1543
  "desc": "旗舰「黑潮改二」或「亲潮改二」,另一只置于 2 号舰,在一日中取得 S 胜利 4 次",
1544
1544
  "memo": "选择奖励:22 号对水上电探改四★2 或 熟练瞭望员★2 选择奖励:伊良湖 * 2 或 改修资材 * 3"
1545
1545
  },
1546
+ "356": {
1547
+ "code": "C65",
1548
+ "name": "精锐「第十九驱逐队」演习!",
1549
+ "desc": "包含「矶波改二」「浦波改二」「绫波改二」「敷波改二」的舰队单日内演习 3 次 S 胜",
1550
+ "memo": "选择奖励:伊良湖 或 开发资材 ×4 选择奖励:熟练瞭望员★4 或 间宫 或 改修资材 ×3"
1551
+ },
1546
1552
  "401": {
1547
1553
  "code": "D1",
1548
1554
  "name": "初次的「远征」",
@@ -3284,6 +3290,24 @@
3284
3290
  "desc": "「九周年任务扩张作战」编成旗舰轻空母,僚舰驱逐舰 2 艘以上的舰队,出击 2-3,3-5,7-4,6-4! 消灭敌方战力并取得 S 胜各 1 次",
3285
3291
  "memo": "选择奖励:新型航空兵装资材 * 6 或 勋章 * 3 或 51cm 连装炮"
3286
3292
  },
3293
+ "973": {
3294
+ "code": "By11",
3295
+ "name": "(年任) 日英美联合水上舰队,起航!",
3296
+ "desc": "包含任意英国和美国舰娘共三艘,加其他任意舰娘(不含空母系)的舰队、出击 3-1,3-3,4-3,7-3P2 各一次 A 胜以上",
3297
+ "memo": "选择奖励:开发资材 ×8 或 熟练搭乘员 或 新型航空兵装资材 选择奖励: Swordfish(水上机型)×2 或 SOC Seagull 或 OS2U"
3298
+ },
3299
+ "974": {
3300
+ "code": "B180",
3301
+ "name": "「矶波改二」,起航!",
3302
+ "desc": "包含「矶波改二」的舰队,出击 1-2、1-3、5-1 并取得 S 胜",
3303
+ "memo": "选择奖励:高速修复材 ×9 或 新型火炮兵装资材 或 补强增设 选择奖励: 12.7cm 连装炮 A 型改二 或 61cm 三连装(酸素)鱼雷 ×2 或 开发资材 ×9"
3304
+ },
3305
+ "975": {
3306
+ "code": "By12",
3307
+ "name": "(年任) 精锐「第十九驱逐队」,全力出击!",
3308
+ "desc": "包含「矶波改二」「浦波改二」「绫波改二」「敷波改二」的舰队、出击 1-5、2-3、3-2、5-3,各一次 S 胜",
3309
+ "memo": "选择奖励:熟练瞭望员 ×2 或 改修资材 ×4 或 高速修复材 ×9 选择奖励:勋章 ×2 或 12.7cm 连装炮 A 型改二 ×2 或 61cm 三连装(酸素)鱼雷后期型"
3310
+ },
3287
3311
  "1101": {
3288
3312
  "code": "F96",
3289
3313
  "name": "再次整备海军工厂",
@@ -3353,5 +3377,11 @@
3353
3377
  "name": "装配「无线飞弹」的新型袭击机编入实战",
3354
3378
  "desc": "开发伊号一型乙飞弹搭载机:准备陆军新型尖端袭击机「キ 102 乙」,「二式复战屠龙丙型」, 熟练搭乘员 * 2 以及新型航空兵装资材 * 4!",
3355
3379
  "memo": "任务完成后,准备的资材会消失"
3380
+ },
3381
+ "1114": {
3382
+ "code": "F108",
3383
+ "name": "【工厂任务】新装备开发计划 I",
3384
+ "desc": "废弃小口径主炮、中口径主炮、副炮各 3 个 准备 35.6cm 连装炮 ×3、高速建造材 ×8、铝 ×800(任务完成后会消耗准备的资源・装备・高速建造材)",
3385
+ "memo": "选择奖励:新型火炮兵装资材 或 新型航空兵装资材 或 开发资材 ×5 选择奖励:新型兵装资材 或 新型喷进装备开发资材 或 改修资材 ×3"
3356
3386
  }
3357
3387
  }
@@ -3264,6 +3264,24 @@
3264
3264
  "desc": "「九周年任務擴張作戰」編成旗艦輕空母,僚艦驅逐艦 2 艘以上的艦隊,出擊 2-3,3-5,7-4,6-4! 消滅敵方戰力並取得 S 勝各 1 次",
3265
3265
  "memo": "選擇獎勵:新型航空兵裝資材 * 6 或 勳章 * 3 或 51cm 連裝炮"
3266
3266
  },
3267
+ "973": {
3268
+ "code": "By11",
3269
+ "name": "(年任) 日英美聯合水上艦隊,起航!",
3270
+ "desc": "包含任意英國和美國艦娘共三艘,加其他任意艦娘(不含空母系)的艦隊、出擊 3-1,3-3,4-3,7-3P2 各一次 A 勝以上",
3271
+ "memo": "選擇獎勵:開發資材 ×8 或 熟練搭乘員 或 新型航空兵裝資材 選擇獎勵: Swordfish(水上機型)×2 或 SOC Seagull 或 OS2U"
3272
+ },
3273
+ "974": {
3274
+ "code": "B180",
3275
+ "name": "「磯波改二」,起航! ",
3276
+ "desc": "以包含「磯波改二」的艦隊,出擊 1-2、1-3、5-1 並取得 S 勝",
3277
+ "memo": "選擇獎勵:高速修復材 ×9 或 新型火砲兵裝資材 或 補強增設 選擇獎勵: 12.7cm 連裝炮 A 型改二 或 61cm 三連裝(酸素)魚雷 ×2 或 開發資材 ×9"
3278
+ },
3279
+ "975": {
3280
+ "code": "By12",
3281
+ "name": "(年任) 精銳「第十九驅逐隊」,全力出擊! ",
3282
+ "desc": "包含「磯波改二」「浦波改二」「綾波改二」「敷波改二」的艦隊、出擊 1-5、2-3、3-2、5-3,各一次 S 勝",
3283
+ "memo": "選擇獎勵:熟練瞭望員 ×2 或 改修資材 ×4 或 高速修復材 ×9 選擇獎勵:勳章 ×2 或 12.7cm 連裝炮 A 型改二 ×2 或 61cm 三連裝(酸素)魚雷後期型"
3284
+ },
3267
3285
  "1101": {
3268
3286
  "code": "F96",
3269
3287
  "name": "再次整備海軍工廠",
@@ -1375,7 +1375,8 @@
1375
1375
  "Bm4"
1376
1376
  ],
1377
1377
  "post": [
1378
- "B49"
1378
+ "B49",
1379
+ "B181"
1379
1380
  ]
1380
1381
  },
1381
1382
  "261": {
@@ -1773,7 +1774,8 @@
1773
1774
  "C2"
1774
1775
  ],
1775
1776
  "post": [
1776
- "F46"
1777
+ "F46",
1778
+ "F109"
1777
1779
  ]
1778
1780
  },
1779
1781
  "306": {
@@ -2025,6 +2027,7 @@
2025
2027
  ],
2026
2028
  "post": [
2027
2029
  "C49",
2030
+ "C66",
2028
2031
  "F91"
2029
2032
  ]
2030
2033
  },
@@ -2073,6 +2076,14 @@
2073
2076
  "By12"
2074
2077
  ]
2075
2078
  },
2079
+ "357": {
2080
+ "pre": [
2081
+ "C46"
2082
+ ],
2083
+ "post": [
2084
+ "B182"
2085
+ ]
2086
+ },
2076
2087
  "401": {
2077
2088
  "pre": [
2078
2089
  "A5"
@@ -3565,7 +3576,8 @@
3565
3576
  "B78"
3566
3577
  ],
3567
3578
  "post": [
3568
- "B86"
3579
+ "B86",
3580
+ "B180"
3569
3581
  ]
3570
3582
  },
3571
3583
  "828": {
@@ -3621,7 +3633,9 @@
3621
3633
  "B79",
3622
3634
  "B85"
3623
3635
  ],
3624
- "post": []
3636
+ "post": [
3637
+ "B179"
3638
+ ]
3625
3639
  },
3626
3640
  "838": {
3627
3641
  "pre": [
@@ -4092,7 +4106,8 @@
4092
4106
  "B140"
4093
4107
  ],
4094
4108
  "post": [
4095
- "Bq13"
4109
+ "Bq13",
4110
+ "By11"
4096
4111
  ]
4097
4112
  },
4098
4113
  "903": {
@@ -4539,6 +4554,12 @@
4539
4554
  ],
4540
4555
  "post": []
4541
4556
  },
4557
+ "970": {
4558
+ "pre": [
4559
+ "B86"
4560
+ ],
4561
+ "post": []
4562
+ },
4542
4563
  "971": {
4543
4564
  "pre": [],
4544
4565
  "post": [
@@ -4551,8 +4572,15 @@
4551
4572
  ],
4552
4573
  "post": []
4553
4574
  },
4575
+ "973": {
4576
+ "pre": [
4577
+ "B141"
4578
+ ],
4579
+ "post": []
4580
+ },
4554
4581
  "974": {
4555
4582
  "pre": [
4583
+ "B79",
4556
4584
  "By1"
4557
4585
  ],
4558
4586
  "post": [
@@ -4565,6 +4593,43 @@
4565
4593
  ],
4566
4594
  "post": []
4567
4595
  },
4596
+ "976": {
4597
+ "pre": [
4598
+ "B32",
4599
+ "F109"
4600
+ ],
4601
+ "post": [
4602
+ "B182"
4603
+ ]
4604
+ },
4605
+ "977": {
4606
+ "pre": [
4607
+ "C66",
4608
+ "B181"
4609
+ ],
4610
+ "post": [
4611
+ "B183"
4612
+ ]
4613
+ },
4614
+ "978": {
4615
+ "pre": [
4616
+ "B182"
4617
+ ],
4618
+ "post": []
4619
+ },
4620
+ "980": {
4621
+ "pre": [],
4622
+ "post": [
4623
+ "B185"
4624
+ ]
4625
+ },
4626
+ "981": {
4627
+ "pre": [
4628
+ "B184",
4629
+ "F110"
4630
+ ],
4631
+ "post": []
4632
+ },
4568
4633
  "1101": {
4569
4634
  "pre": [],
4570
4635
  "post": [
@@ -4607,12 +4672,43 @@
4607
4672
  "pre": [
4608
4673
  "F51"
4609
4674
  ],
4610
- "post": []
4675
+ "post": [
4676
+ "F111"
4677
+ ]
4611
4678
  },
4612
4679
  "1108": {
4613
4680
  "pre": [
4614
4681
  "B173"
4615
4682
  ],
4616
4683
  "post": []
4684
+ },
4685
+ "1114": {
4686
+ "pre": [],
4687
+ "post": [
4688
+ "F109"
4689
+ ]
4690
+ },
4691
+ "1115": {
4692
+ "pre": [
4693
+ "C3",
4694
+ "F108"
4695
+ ],
4696
+ "post": [
4697
+ "B181"
4698
+ ]
4699
+ },
4700
+ "1116": {
4701
+ "pre": [],
4702
+ "post": [
4703
+ "B185",
4704
+ "F111"
4705
+ ]
4706
+ },
4707
+ "1117": {
4708
+ "pre": [
4709
+ "F101",
4710
+ "F110"
4711
+ ],
4712
+ "post": []
4617
4713
  }
4618
4714
  }
@@ -91,6 +91,7 @@
91
91
  353,
92
92
  354,
93
93
  355,
94
+ 357,
94
95
  434,
95
96
  436,
96
97
  437,
@@ -595,6 +596,12 @@
595
596
  971,
596
597
  972,
597
598
  974,
599
+ 976,
600
+ 977,
601
+ 978,
602
+ 979,
603
+ 980,
604
+ 981,
598
605
  1101,
599
606
  1102,
600
607
  1106,
@@ -604,6 +611,9 @@
604
611
  1111,
605
612
  1112,
606
613
  1113,
607
- 1114
614
+ 1114,
615
+ 1115,
616
+ 1116,
617
+ 1117
608
618
  ]
609
619
  }
@@ -215,7 +215,7 @@
215
215
  "C21": 323,
216
216
  "C22": 324,
217
217
  "C23": 325,
218
- "C59": 326,
218
+ "C67": 326,
219
219
  "C25": 327,
220
220
  "C27": 328,
221
221
  "2201LC01": 329,
@@ -245,6 +245,7 @@
245
245
  "C60": 354,
246
246
  "C62": 355,
247
247
  "C65": 356,
248
+ "C66": 357,
248
249
  "D1": 401,
249
250
  "D2": 402,
250
251
  "D3": 403,
@@ -577,6 +578,12 @@
577
578
  "By11": 973,
578
579
  "B180": 974,
579
580
  "By12": 975,
581
+ "B181": 976,
582
+ "B182": 977,
583
+ "B183": 978,
584
+ "2207B1": 979,
585
+ "B184": 980,
586
+ "B185": 981,
580
587
  "F96": 1101,
581
588
  "F97": 1102,
582
589
  "F98": 1103,
@@ -590,5 +597,8 @@
590
597
  "F105": 1111,
591
598
  "F106": 1112,
592
599
  "F107": 1113,
593
- "F108": 1114
600
+ "F108": 1114,
601
+ "F109": 1115,
602
+ "F110": 1116,
603
+ "F111": 1117
594
604
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "poi-plugin-quest-info-2",
3
- "version": "0.8.4",
3
+ "version": "0.8.7",
4
4
  "private": false,
5
5
  "description": "show quest info",
6
6
  "homepage": "https://github.com/lawvs/poi-plugin-quest-2/",
@@ -36,7 +36,8 @@
36
36
  "dependencies": {
37
37
  "moize": "^6.1.1",
38
38
  "react-use": "^17.3.1",
39
- "react-virtualized": "^9.22.3"
39
+ "react-virtualized-auto-sizer": "^1.0.6",
40
+ "react-window": "^1.8.7"
40
41
  },
41
42
  "devDependencies": {
42
43
  "@babel/core": "^7.12.10",
@@ -47,7 +48,8 @@
47
48
  "@storybook/react": "^6.3.4",
48
49
  "@types/jest": "^27.4.1",
49
50
  "@types/pangu": "^3.3.0",
50
- "@types/react-virtualized": "^9.21.11",
51
+ "@types/react-virtualized-auto-sizer": "^1.0.1",
52
+ "@types/react-window": "^1.8.5",
51
53
  "@types/sharp": "^0.27.1",
52
54
  "@types/styled-components": "^5.1.7",
53
55
  "@typescript-eslint/eslint-plugin": "^5.22.0",
package/src/Toolbar.tsx CHANGED
@@ -11,6 +11,7 @@ import { useQuest, useSyncWithGame } from './store'
11
11
  import { useFilterTags, useSyncGameTagEffect } from './store/filterTags'
12
12
  import { useSearchInput } from './store/search'
13
13
  import { CategoryTags, CATEGORY_TAGS, TypeTags, TYPE_TAGS } from './tags'
14
+ import { And, Or } from './utils'
14
15
 
15
16
  const ToolbarWrapper = styled.div`
16
17
  display: flex;
@@ -105,7 +106,7 @@ const useInputStringFilter = () => {
105
106
  }
106
107
  const text = `${quest.docQuest.code} ${quest.docQuest.name} ${
107
108
  quest.docQuest.desc
108
- } ${quest.docQuest.memo ?? ''}`
109
+ } ${quest.docQuest.memo ?? ''} ${quest.docQuest.memo2 ?? ''}`
109
110
  return searchKeywords.some((keyword) =>
110
111
  text.toUpperCase().includes(keyword)
111
112
  )
@@ -115,16 +116,6 @@ const useInputStringFilter = () => {
115
116
  return stringFilter
116
117
  }
117
118
 
118
- const And =
119
- <T extends (...args: any[]) => boolean>(...fnArray: T[]) =>
120
- (...args: Parameters<T>) =>
121
- fnArray.every((fn) => fn(...args))
122
-
123
- const Or =
124
- <T extends (...args: any[]) => boolean>(...fnArray: T[]) =>
125
- (...args: Parameters<T>) =>
126
- fnArray.some((fn) => fn(...args))
127
-
128
119
  const useToolbarFilter = () => {
129
120
  const stringFilter = useInputStringFilter()
130
121
  const { typeTags, categoryTags } = useFilterTags()
@@ -427,6 +427,11 @@ Object {
427
427
  "gameId": 355,
428
428
  "name": "精锐「第十五驱逐队」第一小队演习!",
429
429
  },
430
+ Object {
431
+ "code": "C66",
432
+ "gameId": 357,
433
+ "name": "「大和型战舰」第一舰队演习开始!",
434
+ },
430
435
  Object {
431
436
  "code": "D32",
432
437
  "gameId": 434,
@@ -15,6 +15,7 @@ Object {
15
15
  "1104": true,
16
16
  "1106": true,
17
17
  "111": true,
18
+ "1117": true,
18
19
  "112": true,
19
20
  "113": true,
20
21
  "114": true,
@@ -372,8 +373,13 @@ Object {
372
373
  "967": true,
373
374
  "968": true,
374
375
  "969": true,
376
+ "970": true,
377
+ "973": true,
375
378
  "974": true,
376
379
  "975": true,
380
+ "976": true,
381
+ "977": true,
382
+ "978": true,
377
383
  }
378
384
  `;
379
385
 
@@ -1,7 +1,7 @@
1
1
  import { version, QuestData } from '../../build/kcanotifyGamedata'
2
2
 
3
3
  test('should Kcanotify Game data version correct', () => {
4
- expect(version).toMatchInlineSnapshot(`"2022042601"`)
4
+ expect(version).toMatchInlineSnapshot(`"2022071002"`)
5
5
  })
6
6
 
7
7
  test('should Kcanotify Game data keys correct', () => {
@@ -4,7 +4,7 @@ import newQuestData from '../../build/kcQuestsData/quests-scn-new.json'
4
4
  describe('should version correct', () => {
5
5
  test('should KcwikiQuestData Game data version correct', () => {
6
6
  expect(version).toMatchInlineSnapshot(
7
- `"148476742357a844acd8fd6ca11723711fd4217d"`
7
+ `"9e3d68b81583efb366edf0a296854f08e52ef6e8"`
8
8
  )
9
9
  })
10
10
 
@@ -8,8 +8,8 @@ describe('should questCategory correct', () => {
8
8
  expect(questCategory.weeklyQuest.length).toMatchInlineSnapshot(`17`)
9
9
  expect(questCategory.monthlyQuest.length).toMatchInlineSnapshot(`11`)
10
10
  expect(questCategory.quarterlyQuest.length).toMatchInlineSnapshot(`25`)
11
- expect(questCategory.yearlyQuest.length).toMatchInlineSnapshot(`39`)
12
- expect(questCategory.singleQuest.length).toMatchInlineSnapshot(`480`)
11
+ expect(questCategory.yearlyQuest.length).toMatchInlineSnapshot(`40`)
12
+ expect(questCategory.singleQuest.length).toMatchInlineSnapshot(`489`)
13
13
  })
14
14
 
15
15
  test('snapshot', () => {
@@ -29,7 +29,6 @@ export type QuestCardProps = {
29
29
  tip?: string
30
30
  tip2?: string
31
31
  status?: QUEST_STATUS
32
- preQuest?: string[]
33
32
  }
34
33
 
35
34
  const CardAction = ({ gameId }: { gameId: number }) => {
@@ -1,13 +1,7 @@
1
1
  import React, { useCallback, useEffect, useRef } from 'react'
2
- import type { ListRowProps } from 'react-virtualized'
3
- // See https://github.com/bvaughn/react-virtualized
4
- import {
5
- AutoSizer,
6
- CellMeasurer,
7
- CellMeasurerCache,
8
- List,
9
- ListRowRenderer,
10
- } from 'react-virtualized'
2
+ import AutoSizer from 'react-virtualized-auto-sizer'
3
+ // https://github.com/bvaughn/react-window
4
+ import { ListChildComponentProps, VariableSizeList as List } from 'react-window'
11
5
  import styled from 'styled-components'
12
6
  import { useIsQuestPluginTab } from '../poi/hooks'
13
7
  import type { UnionQuest } from '../questHelper'
@@ -15,91 +9,102 @@ import { QuestCard } from './QuestCard'
15
9
 
16
10
  const QuestListWrapper = styled.div`
17
11
  flex: 1;
12
+ overflow: hidden;
18
13
  `
19
14
 
20
- const MINIMAL_CARD_HEIGHT = 70
21
- // const LARGE_CARD_HEIGHT = 120
22
- const cache = new CellMeasurerCache({
23
- defaultHeight: MINIMAL_CARD_HEIGHT,
24
- fixedWidth: true,
25
- })
15
+ // CSS - Overflow: Scroll; - Always show vertical scroll bar?
16
+ // See https://stackoverflow.com/questions/7492062/css-overflow-scroll-always-show-vertical-scroll-bar
17
+ const ListWrapper = styled(List)`
18
+ overflow
19
+ -webkit-overflow-scrolling: auto;
26
20
 
27
- const useQuestsRowRenderer = (quests: UnionQuest[]) => {
28
- const rowRenderer = useCallback(
29
- ({ key, index, style, parent }: ListRowProps) => {
30
- const quest = quests[index]
31
- const { gameId } = quest
32
- const { code, name, desc, memo, memo2, pre } = quest.docQuest
21
+ ::-webkit-scrollbar {
22
+ -webkit-appearance: none;
23
+ width: 8px;
24
+ }
33
25
 
34
- return (
35
- <CellMeasurer
36
- cache={cache}
37
- columnIndex={0}
38
- key={key}
39
- parent={parent}
40
- rowIndex={index}
41
- >
42
- <div style={style}>
43
- <QuestCard
44
- style={{ margin: '4px' }}
45
- gameId={gameId}
46
- code={code}
47
- name={name}
48
- desc={desc}
49
- tip={memo}
50
- tip2={memo2}
51
- preQuest={pre}
52
- ></QuestCard>
53
- </div>
54
- </CellMeasurer>
55
- )
56
- },
57
- [quests]
58
- )
59
- return rowRenderer
60
- }
26
+ ::-webkit-scrollbar-thumb {
27
+ border-radius: 4px;
28
+ background-color: rgba(1, 1, 1, 0.3);
29
+ }
30
+
31
+ ::-webkit-scrollbar {
32
+ border-radius: 4px;
33
+ background-color: rgba(1, 1, 1, 0.1);
34
+ }
35
+ `
61
36
 
62
37
  export const QuestList = ({ quests }: { quests: UnionQuest[] }) => {
63
38
  const activeTab = useIsQuestPluginTab()
64
39
  const listRef = useRef<List>(null)
65
- const rowRenderer: ListRowRenderer = useQuestsRowRenderer(quests)
40
+ const rowHeights = useRef<Record<number, number>>({})
66
41
 
67
42
  useEffect(() => {
68
- cache.clearAll()
69
- listRef.current?.recomputeRowHeights()
43
+ listRef.current?.resetAfterIndex(0)
70
44
  }, [quests])
71
45
 
72
46
  useEffect(() => {
73
47
  if (activeTab) {
74
- cache.clearAll()
75
- listRef.current?.recomputeRowHeights()
48
+ listRef.current?.resetAfterIndex(0)
76
49
  }
77
50
  }, [activeTab])
78
51
 
79
- const onResize = useCallback(() => {
80
- cache.clearAll()
81
- listRef.current?.recomputeRowHeights()
52
+ const setRowHeight = useCallback((index, size) => {
53
+ if (rowHeights.current[index] === size) {
54
+ return
55
+ }
56
+ rowHeights.current = { ...rowHeights.current, [index]: size }
57
+ listRef.current?.resetAfterIndex(index)
58
+ }, [])
59
+
60
+ const getRowHeight = useCallback((index) => {
61
+ return rowHeights.current[index] + 8 || 200
82
62
  }, [])
83
63
 
84
- if (!quests.length) {
85
- // Prevent Uncaught Error: Requested index 0 is outside of range 0..0
86
- // See https://github.com/bvaughn/react-virtualized/issues/1016
87
- return null
64
+ const Row = ({ index, style }: ListChildComponentProps) => {
65
+ const rowRef = useRef<HTMLDivElement>(null)
66
+
67
+ const quest = quests[index]
68
+ const { gameId } = quest
69
+ const { code, name, desc, memo, memo2 } = quest.docQuest
70
+
71
+ useEffect(() => {
72
+ if (rowRef.current) {
73
+ setRowHeight(index, rowRef.current.clientHeight)
74
+ }
75
+ }, [index])
76
+
77
+ return (
78
+ <div style={style}>
79
+ <div ref={rowRef}>
80
+ <QuestCard
81
+ style={{ margin: '4px' }}
82
+ gameId={gameId}
83
+ code={code}
84
+ name={name}
85
+ desc={desc}
86
+ tip={memo}
87
+ tip2={memo2}
88
+ />
89
+ </div>
90
+ </div>
91
+ )
88
92
  }
89
93
 
90
94
  return (
91
95
  <QuestListWrapper>
92
- <AutoSizer onResize={onResize}>
96
+ <AutoSizer>
93
97
  {({ height, width }) => (
94
- <List
98
+ <ListWrapper
95
99
  ref={listRef}
96
100
  height={height}
97
101
  width={width}
98
- rowCount={quests.length}
99
- rowHeight={cache.rowHeight}
100
- deferredMeasurementCache={cache}
101
- rowRenderer={rowRenderer}
102
- ></List>
102
+ itemCount={quests.length}
103
+ estimatedItemSize={200}
104
+ itemSize={getRowHeight}
105
+ >
106
+ {Row}
107
+ </ListWrapper>
103
108
  )}
104
109
  </AutoSizer>
105
110
  </QuestListWrapper>
@@ -35,8 +35,16 @@ const QuestTooltip = forwardRef<
35
35
  <>
36
36
  <div>{`${quest.code} - ${quest.name}`}</div>
37
37
  <div>{quest.desc}</div>
38
- {quest.memo2 && <b>{quest.memo2}</b>}
39
- {quest.memo && <i>{quest.memo}</i>}
38
+ {quest.memo2 && (
39
+ <div>
40
+ <b>{quest.memo2}</b>
41
+ </div>
42
+ )}
43
+ {quest.memo && (
44
+ <div>
45
+ <i>{quest.memo}</i>
46
+ </div>
47
+ )}
40
48
  </>
41
49
  }
42
50
  placement={'top'}
package/src/poi/hooks.ts CHANGED
@@ -24,10 +24,12 @@ export const usePluginTranslation = () => {
24
24
  return useTranslation(PACKAGE_NAME)
25
25
  }
26
26
 
27
+ const emptyArray = [] as GameQuest[]
27
28
  export const useGameQuest = () => {
28
29
  const [quests, setQuests] = useState<GameQuest[]>([])
29
30
  useEffect(() => {
30
- const listener = (quests: GameQuest[] | null) => setQuests(quests ?? [])
31
+ const listener = (quests: GameQuest[] | null) =>
32
+ setQuests(quests ?? emptyArray)
31
33
  // See reducer.ts
32
34
  return observePluginStore(listener, (i) => i?._?.questList)
33
35
  }, [setQuests])
package/src/poi/store.ts CHANGED
@@ -1,11 +1,9 @@
1
1
  import { name as PACKAGE_NAME } from '../../package.json'
2
2
  import type { PluginState } from '../reducer'
3
- import { IN_POI, importFromPoi } from './env'
3
+ import { id, noop } from '../utils'
4
+ import { importFromPoi, IN_POI } from './env'
4
5
  import type { PoiState, Store } from './types'
5
6
 
6
- const noop = () => {}
7
- const id = <T>(x: T) => x
8
-
9
7
  /**
10
8
  * See https://redux.js.org/api/store#subscribelistener
11
9
  */
@@ -0,0 +1,20 @@
1
+ import React, { createContext, useContext } from 'react'
2
+ import type { ReactNode } from 'react'
3
+ import { GameQuest } from '../poi/types'
4
+ import { useGameQuest } from '../poi/hooks'
5
+
6
+ export const GameQuestContext = createContext<GameQuest[]>([])
7
+
8
+ export const GameQuestProvider = ({ children }: { children?: ReactNode }) => {
9
+ const gameQuest = useGameQuest()
10
+ return (
11
+ <GameQuestContext.Provider value={gameQuest}>
12
+ {children}
13
+ </GameQuestContext.Provider>
14
+ )
15
+ }
16
+
17
+ export const useGlobalGameQuest = () => {
18
+ const gameQuest = useContext(GameQuestContext)
19
+ return gameQuest
20
+ }
@@ -1,5 +1,5 @@
1
1
  import { useCallback } from 'react'
2
- import { useGameQuest, usePluginTranslation } from '../poi/hooks'
2
+ import { usePluginTranslation } from '../poi/hooks'
3
3
  import {
4
4
  DocQuest,
5
5
  getCategory,
@@ -11,6 +11,7 @@ import {
11
11
  QUEST_STATUS,
12
12
  UnionQuest,
13
13
  } from '../questHelper'
14
+ import { useGlobalGameQuest } from './gameQuest'
14
15
  import { checkIsKcwikiSupportedLanguages, useKcwikiData } from './kcwiki'
15
16
  import { useStore, useSyncWithGame } from './store'
16
17
 
@@ -51,7 +52,7 @@ const useQuestMap = (): Record<string, DocQuest> => {
51
52
 
52
53
  export const useQuest = (): UnionQuest[] => {
53
54
  const docQuestMap = useQuestMap()
54
- const gameQuest = useGameQuest()
55
+ const gameQuest = useGlobalGameQuest()
55
56
  const { syncWithGame } = useSyncWithGame()
56
57
 
57
58
  if (syncWithGame && gameQuest.length) {
@@ -101,7 +102,7 @@ export const useQuestByCode = (code: string) => {
101
102
  }
102
103
 
103
104
  export const useQuestStatus = (gameId: number | null) => {
104
- const gameQuest = useGameQuest()
105
+ const gameQuest = useGlobalGameQuest()
105
106
 
106
107
  if (!gameId) {
107
108
  return QUEST_STATUS.UNKNOWN
@@ -4,10 +4,12 @@ import React, {
4
4
  SetStateAction,
5
5
  useCallback,
6
6
  useContext,
7
+ useState,
7
8
  } from 'react'
8
- import { ALL_TYPE_TAG, ALL_CATEGORY_TAG } from '../tags'
9
+ import { useMount, useUpdateEffect } from 'react-use'
9
10
  import { name as PACKAGE_NAME } from '../../package.json'
10
- import { createGlobalState, useMount, useUpdateEffect } from 'react-use'
11
+ import { ALL_CATEGORY_TAG, ALL_TYPE_TAG } from '../tags'
12
+ import { GameQuestProvider } from './gameQuest'
11
13
 
12
14
  export const initialState = {
13
15
  searchInput: '',
@@ -27,28 +29,29 @@ export type State = typeof initialState
27
29
  // Persist state
28
30
  const STORAGE_KEY = PACKAGE_NAME
29
31
 
30
- const useStorage = (
31
- store: State,
32
- setState: (state: State) => void,
33
- merge = true
34
- ) => {
32
+ const useStorage = <T,>(initialValue: T) => {
33
+ const [state, setState] = useState<T>(initialValue)
35
34
  // Load storage at mount
36
35
  useMount(() => {
37
- const stringStore = localStorage.getItem(STORAGE_KEY)
38
- if (stringStore == null) {
39
- return
36
+ try {
37
+ const stringStore = localStorage.getItem(STORAGE_KEY)
38
+ if (stringStore == null) {
39
+ return
40
+ }
41
+ const parsedStorage: T = JSON.parse(stringStore)
42
+ setState(parsedStorage)
43
+ } catch (error) {
44
+ console.error('Failed to load storage', error)
40
45
  }
41
- const parsedStorage: State = JSON.parse(stringStore)
42
- // TODO use deep merge
43
- const storageStore = merge ? { ...store, ...parsedStorage } : parsedStorage
44
- setState(storageStore)
45
46
  })
46
47
 
47
48
  // Save storage when store change
48
49
  useUpdateEffect(() => {
49
- const serializedStore = JSON.stringify(store)
50
+ const serializedStore = JSON.stringify(state)
50
51
  localStorage.setItem(STORAGE_KEY, serializedStore)
51
- }, [store])
52
+ }, [state])
53
+
54
+ return [state, setState] as const
52
55
  }
53
56
 
54
57
  export const getStorage = () => {
@@ -62,15 +65,14 @@ export const getStorage = () => {
62
65
  const StateContext = createContext<State>(initialState)
63
66
  const SetStateContext = createContext<Dispatch<SetStateAction<State>>>(() => {})
64
67
 
65
- const useGlobalState = createGlobalState<State>(initialState)
66
-
67
68
  export const StoreProvider = ({ children }: { children?: React.ReactNode }) => {
68
- const [state, setState] = useGlobalState()
69
- useStorage(state, setState)
69
+ const [state, setState] = useStorage<State>(initialState)
70
70
  return (
71
- <SetStateContext.Provider value={setState}>
72
- <StateContext.Provider value={state}>{children}</StateContext.Provider>
73
- </SetStateContext.Provider>
71
+ <GameQuestProvider>
72
+ <SetStateContext.Provider value={setState}>
73
+ <StateContext.Provider value={state}>{children}</StateContext.Provider>
74
+ </SetStateContext.Provider>
75
+ </GameQuestProvider>
74
76
  )
75
77
  }
76
78
 
package/src/tags.tsx CHANGED
@@ -2,7 +2,7 @@ import { Tag } from '@blueprintjs/core'
2
2
  import React from 'react'
3
3
  import styled from 'styled-components'
4
4
  import { IN_POI } from './poi/env'
5
- import { useGameQuest, useGameTab, usePluginTranslation } from './poi/hooks'
5
+ import { useGameTab, usePluginTranslation } from './poi/hooks'
6
6
  import { GameQuest, QuestTab } from './poi/types'
7
7
  import type { UnionQuest } from './questHelper'
8
8
  import {
@@ -27,8 +27,8 @@ import {
27
27
  } from './questHelper'
28
28
  import { useSyncWithGame } from './store'
29
29
  import { useFilterTags } from './store/filterTags'
30
-
31
- const yes = () => true as const
30
+ import { useGlobalGameQuest } from './store/gameQuest'
31
+ import { yes } from './utils'
32
32
 
33
33
  export const ALL_CATEGORY_TAG = {
34
34
  name: 'All',
@@ -119,7 +119,7 @@ export const TypeTags = () => {
119
119
  const { t } = usePluginTranslation()
120
120
  const gameTab = useGameTab()
121
121
  const { syncWithGame } = useSyncWithGame()
122
- const gameQuests = useGameQuest()
122
+ const gameQuests = useGlobalGameQuest()
123
123
  const inProgressQuest = gameQuests.filter((gameQuest) =>
124
124
  isInProgressQuest(gameQuest)
125
125
  )
package/src/utils.ts ADDED
@@ -0,0 +1,15 @@
1
+ export const noop = () => {}
2
+
3
+ export const id = <T>(x: T) => x
4
+
5
+ export const yes = () => true as const
6
+
7
+ export const And =
8
+ <T extends (...args: any[]) => boolean>(...fnArray: T[]) =>
9
+ (...args: Parameters<T>) =>
10
+ fnArray.every((fn) => fn(...args))
11
+
12
+ export const Or =
13
+ <T extends (...args: any[]) => boolean>(...fnArray: T[]) =>
14
+ (...args: Parameters<T>) =>
15
+ fnArray.some((fn) => fn(...args))