poi-plugin-lbas-bis 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +69 -0
- package/i18n/en-US.json +56 -0
- package/i18n/ja-JP.json +56 -0
- package/i18n/zh-CN.json +56 -0
- package/i18n/zh-TW.json +56 -0
- package/index.js +558 -0
- package/package.json +40 -0
- package/src/air-power.js +183 -0
- package/src/damage.js +54 -0
- package/src/import-plan.js +31 -0
- package/src/optimizer.js +417 -0
- package/src/poi-data.js +154 -0
- package/src/simulator-calc.js +90 -0
- package/src/simulator-state.js +216 -0
- package/src/ui/BaseTable.js +134 -0
- package/src/ui/EnemyPanel.js +56 -0
- package/src/ui/OptimizerPanel.js +149 -0
- package/src/ui/SimulatorPanel.js +95 -0
- package/src/ui/WaveStatusTable.js +41 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 inoryirony
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# 陆航优化
|
|
2
|
+
|
|
3
|
+
Poi 插件:基地航空队制空与配装优化器。
|
|
4
|
+
|
|
5
|
+
当前版本是手动模拟器 + 配装优化的 MVP,不做地图预设。上方模拟器用于手动设置目标半径、敌制空、基地队数、每队 4 格装备和 2/4/6 波目标状态;下方优化区会按模拟器当前条件搜索配装,并可一键导入回模拟器。
|
|
6
|
+
|
|
7
|
+
## 当前能力
|
|
8
|
+
|
|
9
|
+
- 内嵌在 Poi 插件页,不新开独立页面。
|
|
10
|
+
- 插件标题与默认界面为中文,支持 `zh-CN`、`zh-TW`、`en-US`、`ja-JP` 多语言。
|
|
11
|
+
- 上方提供参考站风格的基地航空队模拟器,支持 1-3 个基地航空队;每个 base 按 2 波计算,所以最多显示 6 波目标状态。
|
|
12
|
+
- 每个装备槽位可以锁定;优化和导入时会保留锁定装备。
|
|
13
|
+
- 优化默认只使用 Poi 当前持有装备;可手动切换为“包含未持有理论装备”。
|
|
14
|
+
- 优化结果可以一键导入到模拟器,只覆盖未锁定槽位。
|
|
15
|
+
- 满足制空目标后,优先尽可能多放陆攻,再按陆攻伤害基准排序。
|
|
16
|
+
- 计算出击制空、陆战拦截值、改修加成、熟练度可见加成、陆侦制空系数、侦察机/大艇延程和制空状态。
|
|
17
|
+
- 计算陆攻对普通水上目标的伤害基准;该值是未扣敌装甲的攻击力估算。
|
|
18
|
+
|
|
19
|
+
## 使用方式
|
|
20
|
+
|
|
21
|
+
1. 在 Poi 插件列表启用 `陆航优化`。
|
|
22
|
+
2. 在上方模拟器输入目标半径、敌制空和基地队数。
|
|
23
|
+
3. 手动选择每队 4 格装备;需要固定的装备勾选 `锁定`。
|
|
24
|
+
4. 为每一波选择目标状态:劣势、均势、优势、确保。
|
|
25
|
+
5. 在下方选择 `仅持有装备` 或 `包含未持有理论装备`。
|
|
26
|
+
6. 点击 `计算优化`,确认方案后点击 `导入到模拟器`。
|
|
27
|
+
|
|
28
|
+
结果会显示每个方案的总伤害基准、最小制空余量、6 波状态、缺少装备,以及每队使用的装备。
|
|
29
|
+
|
|
30
|
+
## 暂不包含
|
|
31
|
+
|
|
32
|
+
- 不包含地图/节点预设。
|
|
33
|
+
- 不模拟每波陆航削弱敌机后的连续敌制空变化;当前每波按同一个敌制空值验算。
|
|
34
|
+
- 不计算蓝字、倍卡、舰娘日战/夜战伤害。
|
|
35
|
+
- 陆攻伤害暂不输入敌舰装甲、目标类型、接触、暴击、熟练暴击等条件,因此不是最终扣血值。
|
|
36
|
+
|
|
37
|
+
## 本地安装到 Poi
|
|
38
|
+
|
|
39
|
+
本机开发时可以将仓库作为 file 依赖装入 Poi 插件目录:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
cd "$HOME/Library/Application Support/poi/plugins"
|
|
43
|
+
npm install /Users/tianzema/Documents/kancolle/lbas_bis --save --no-prune
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
安装后应出现:
|
|
47
|
+
|
|
48
|
+
```text
|
|
49
|
+
node_modules/poi-plugin-lbas-bis -> /Users/tianzema/Documents/kancolle/lbas_bis
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Poi 需要重启后重新扫描插件。
|
|
53
|
+
|
|
54
|
+
## 开发
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npm install
|
|
58
|
+
npm test
|
|
59
|
+
npm run typecheck
|
|
60
|
+
npm pack --dry-run
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
核心文件:
|
|
64
|
+
|
|
65
|
+
- `index.js`:Poi 插件入口和界面。
|
|
66
|
+
- `src/poi-data.js`:Poi 装备数据适配和装备类型识别。
|
|
67
|
+
- `src/air-power.js`:制空、熟练度、陆侦、延程和制空状态计算。
|
|
68
|
+
- `src/damage.js`:陆攻伤害基准估算。
|
|
69
|
+
- `src/optimizer.js`:候选池、组合搜索、6 波验算和排序。
|
package/i18n/en-US.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"陆航优化": "LBAS Optimizer",
|
|
3
|
+
"手动输入目标后计算基地航空队配装方案。": "Calculate LBAS loadout plans from manual targets.",
|
|
4
|
+
"title": "LBAS Optimizer",
|
|
5
|
+
"simulatorTitle": "LBAS Simulator",
|
|
6
|
+
"optimizerTitle": "Loadout Optimizer",
|
|
7
|
+
"targetRadius": "Target radius",
|
|
8
|
+
"enemyAir": "Enemy air",
|
|
9
|
+
"baseCount": "Bases",
|
|
10
|
+
"displayWaves": "Waves",
|
|
11
|
+
"targetState": "Target state",
|
|
12
|
+
"waveTarget": "Base {{base}} wave {{wave}}",
|
|
13
|
+
"wave": "Wave {{index}}",
|
|
14
|
+
"optimize": "Optimize",
|
|
15
|
+
"availablePlanes": "Available planes",
|
|
16
|
+
"candidatePlanes": "Candidate planes",
|
|
17
|
+
"theoreticalPlanes": "Theoretical candidates",
|
|
18
|
+
"noResult": "No result yet",
|
|
19
|
+
"noPoiState": "Poi data is not available yet. Retry after game data is loaded.",
|
|
20
|
+
"noCandidateRadius": "No candidate loadout can reach radius {{radius}}.",
|
|
21
|
+
"plan": "Plan",
|
|
22
|
+
"attack": "Attack",
|
|
23
|
+
"damagePower": "Damage power",
|
|
24
|
+
"worstMargin": "Worst margin",
|
|
25
|
+
"minimumProficiency": "Minimum proficiency",
|
|
26
|
+
"missingEquipment": "Missing equipment",
|
|
27
|
+
"missing": "Missing",
|
|
28
|
+
"base": "Base {{index}}",
|
|
29
|
+
"airPower": "Air",
|
|
30
|
+
"radius": "Radius",
|
|
31
|
+
"denial": "Denial",
|
|
32
|
+
"parity": "Parity",
|
|
33
|
+
"superiority": "Superiority",
|
|
34
|
+
"supremacy": "Supremacy",
|
|
35
|
+
"loss": "Loss",
|
|
36
|
+
"role_fighter": "Air",
|
|
37
|
+
"role_attacker": "Attack",
|
|
38
|
+
"role_recon": "Recon/range",
|
|
39
|
+
"role_seaplaneBomber": "Seaplane bomber",
|
|
40
|
+
"role_unknown": "Other",
|
|
41
|
+
"enemyFleet": "Enemy fleet",
|
|
42
|
+
"necessaryLines": "Required lines",
|
|
43
|
+
"clearComposition": "Clear composition",
|
|
44
|
+
"equipment": "Equipment",
|
|
45
|
+
"lock": "Lock",
|
|
46
|
+
"proficiency": "Proficiency",
|
|
47
|
+
"baseSummary": "Base air/radius/damage",
|
|
48
|
+
"baseColumn": "Base",
|
|
49
|
+
"enemyShipName": "Enemy ship",
|
|
50
|
+
"ownedOnly": "Owned only",
|
|
51
|
+
"includeMissing": "Include missing theoretical equipment",
|
|
52
|
+
"importToSimulator": "Import to simulator",
|
|
53
|
+
"sixWaveState": "6-wave state",
|
|
54
|
+
"manualMode": "Manual",
|
|
55
|
+
"none": "None"
|
|
56
|
+
}
|
package/i18n/ja-JP.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"陆航优化": "基地航空隊最適化",
|
|
3
|
+
"手动输入目标后计算基地航空队配装方案。": "手動入力した目標から基地航空隊の配備案を計算します。",
|
|
4
|
+
"title": "基地航空隊最適化",
|
|
5
|
+
"simulatorTitle": "基地航空隊シミュレーター",
|
|
6
|
+
"optimizerTitle": "配備最適化",
|
|
7
|
+
"targetRadius": "目標半径",
|
|
8
|
+
"enemyAir": "敵制空",
|
|
9
|
+
"baseCount": "基地数",
|
|
10
|
+
"displayWaves": "表示波数",
|
|
11
|
+
"targetState": "目標状態",
|
|
12
|
+
"waveTarget": "第 {{base}} 部隊 第 {{wave}} 波",
|
|
13
|
+
"wave": "第 {{index}} 波",
|
|
14
|
+
"optimize": "最適化",
|
|
15
|
+
"availablePlanes": "使用可能機",
|
|
16
|
+
"candidatePlanes": "候補機",
|
|
17
|
+
"noResult": "結果なし",
|
|
18
|
+
"noPoiState": "Poi データをまだ読み取れません。ゲームデータ読み込み後に再試行してください。",
|
|
19
|
+
"noCandidateRadius": "半径 {{radius}} に到達できる候補がありません。",
|
|
20
|
+
"plan": "案",
|
|
21
|
+
"attack": "攻撃",
|
|
22
|
+
"damagePower": "攻撃力目安",
|
|
23
|
+
"worstMargin": "最小余裕",
|
|
24
|
+
"base": "第 {{index}} 部隊",
|
|
25
|
+
"airPower": "制空",
|
|
26
|
+
"radius": "半径",
|
|
27
|
+
"denial": "劣勢",
|
|
28
|
+
"parity": "拮抗",
|
|
29
|
+
"superiority": "優勢",
|
|
30
|
+
"supremacy": "確保",
|
|
31
|
+
"loss": "喪失",
|
|
32
|
+
"role_fighter": "制空",
|
|
33
|
+
"role_attacker": "攻撃",
|
|
34
|
+
"role_recon": "偵察/延長",
|
|
35
|
+
"role_unknown": "その他",
|
|
36
|
+
"theoreticalPlanes": "理論候補",
|
|
37
|
+
"minimumProficiency": "最低熟練度",
|
|
38
|
+
"missingEquipment": "未所持装備",
|
|
39
|
+
"missing": "未所持",
|
|
40
|
+
"role_seaplaneBomber": "水爆",
|
|
41
|
+
"enemyFleet": "敵艦隊",
|
|
42
|
+
"necessaryLines": "必要ライン",
|
|
43
|
+
"clearComposition": "編成クリア",
|
|
44
|
+
"equipment": "装備",
|
|
45
|
+
"lock": "固定",
|
|
46
|
+
"proficiency": "熟練",
|
|
47
|
+
"baseSummary": "部隊制空/半径/攻撃",
|
|
48
|
+
"baseColumn": "基地",
|
|
49
|
+
"enemyShipName": "敵艦名",
|
|
50
|
+
"ownedOnly": "所持装備のみ",
|
|
51
|
+
"includeMissing": "未所持の理論装備を含める",
|
|
52
|
+
"importToSimulator": "シミュレーターへ反映",
|
|
53
|
+
"sixWaveState": "6波状態",
|
|
54
|
+
"manualMode": "手動",
|
|
55
|
+
"none": "なし"
|
|
56
|
+
}
|
package/i18n/zh-CN.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"陆航优化": "陆航优化",
|
|
3
|
+
"手动输入目标后计算基地航空队配装方案。": "手动输入目标后计算基地航空队配装方案。",
|
|
4
|
+
"title": "陆航优化",
|
|
5
|
+
"simulatorTitle": "基地航空队模拟器",
|
|
6
|
+
"optimizerTitle": "配装优化",
|
|
7
|
+
"targetRadius": "目标半径",
|
|
8
|
+
"enemyAir": "敌制空",
|
|
9
|
+
"baseCount": "基地队数",
|
|
10
|
+
"displayWaves": "显示波数",
|
|
11
|
+
"targetState": "目标状态",
|
|
12
|
+
"waveTarget": "第 {{base}} 队第 {{wave}} 波",
|
|
13
|
+
"wave": "第 {{index}} 波",
|
|
14
|
+
"optimize": "计算优化",
|
|
15
|
+
"availablePlanes": "可用飞机",
|
|
16
|
+
"candidatePlanes": "候选飞机",
|
|
17
|
+
"noResult": "暂无结果",
|
|
18
|
+
"noPoiState": "尚未读取到 Poi 数据,请在游戏数据加载后重试。",
|
|
19
|
+
"noCandidateRadius": "没有可达半径 {{radius}} 的候选配装。",
|
|
20
|
+
"plan": "方案",
|
|
21
|
+
"attack": "攻击",
|
|
22
|
+
"damagePower": "伤害基准",
|
|
23
|
+
"worstMargin": "最小余量",
|
|
24
|
+
"base": "第 {{index}} 队",
|
|
25
|
+
"airPower": "制空",
|
|
26
|
+
"radius": "半径",
|
|
27
|
+
"denial": "劣势",
|
|
28
|
+
"parity": "均势",
|
|
29
|
+
"superiority": "优势",
|
|
30
|
+
"supremacy": "确保",
|
|
31
|
+
"loss": "丧失",
|
|
32
|
+
"role_fighter": "制空",
|
|
33
|
+
"role_attacker": "攻击",
|
|
34
|
+
"role_recon": "侦察/延程",
|
|
35
|
+
"role_unknown": "其他",
|
|
36
|
+
"theoreticalPlanes": "理论候选",
|
|
37
|
+
"minimumProficiency": "最低熟练度",
|
|
38
|
+
"missingEquipment": "缺少装备",
|
|
39
|
+
"missing": "未持有",
|
|
40
|
+
"role_seaplaneBomber": "水爆",
|
|
41
|
+
"enemyFleet": "敌舰队",
|
|
42
|
+
"necessaryLines": "必要线",
|
|
43
|
+
"clearComposition": "编成清空",
|
|
44
|
+
"equipment": "装备",
|
|
45
|
+
"lock": "锁定",
|
|
46
|
+
"proficiency": "熟练",
|
|
47
|
+
"baseSummary": "本队制空/半径/伤害",
|
|
48
|
+
"baseColumn": "基地",
|
|
49
|
+
"enemyShipName": "敌舰名",
|
|
50
|
+
"ownedOnly": "仅持有装备",
|
|
51
|
+
"includeMissing": "包含未持有理论装备",
|
|
52
|
+
"importToSimulator": "导入到模拟器",
|
|
53
|
+
"sixWaveState": "6波状态",
|
|
54
|
+
"manualMode": "手动",
|
|
55
|
+
"none": "无"
|
|
56
|
+
}
|
package/i18n/zh-TW.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"陆航优化": "陸航優化",
|
|
3
|
+
"手动输入目标后计算基地航空队配装方案。": "手動輸入目標後計算基地航空隊配裝方案。",
|
|
4
|
+
"title": "陸航優化",
|
|
5
|
+
"simulatorTitle": "基地航空隊模擬器",
|
|
6
|
+
"optimizerTitle": "配裝優化",
|
|
7
|
+
"targetRadius": "目標半徑",
|
|
8
|
+
"enemyAir": "敵制空",
|
|
9
|
+
"baseCount": "基地隊數",
|
|
10
|
+
"displayWaves": "顯示波數",
|
|
11
|
+
"targetState": "目標狀態",
|
|
12
|
+
"waveTarget": "第 {{base}} 隊第 {{wave}} 波",
|
|
13
|
+
"wave": "第 {{index}} 波",
|
|
14
|
+
"optimize": "計算優化",
|
|
15
|
+
"availablePlanes": "可用飛機",
|
|
16
|
+
"candidatePlanes": "候選飛機",
|
|
17
|
+
"noResult": "暫無結果",
|
|
18
|
+
"noPoiState": "尚未讀取到 Poi 資料,請在遊戲資料載入後重試。",
|
|
19
|
+
"noCandidateRadius": "沒有可達半徑 {{radius}} 的候選配裝。",
|
|
20
|
+
"plan": "方案",
|
|
21
|
+
"attack": "攻擊",
|
|
22
|
+
"damagePower": "傷害基準",
|
|
23
|
+
"worstMargin": "最小餘量",
|
|
24
|
+
"base": "第 {{index}} 隊",
|
|
25
|
+
"airPower": "制空",
|
|
26
|
+
"radius": "半徑",
|
|
27
|
+
"denial": "劣勢",
|
|
28
|
+
"parity": "均勢",
|
|
29
|
+
"superiority": "優勢",
|
|
30
|
+
"supremacy": "確保",
|
|
31
|
+
"loss": "喪失",
|
|
32
|
+
"role_fighter": "制空",
|
|
33
|
+
"role_attacker": "攻擊",
|
|
34
|
+
"role_recon": "偵察/延程",
|
|
35
|
+
"role_unknown": "其他",
|
|
36
|
+
"theoreticalPlanes": "理論候選",
|
|
37
|
+
"minimumProficiency": "最低熟練度",
|
|
38
|
+
"missingEquipment": "缺少裝備",
|
|
39
|
+
"missing": "未持有",
|
|
40
|
+
"role_seaplaneBomber": "水爆",
|
|
41
|
+
"enemyFleet": "敵艦隊",
|
|
42
|
+
"necessaryLines": "必要線",
|
|
43
|
+
"clearComposition": "編成清空",
|
|
44
|
+
"equipment": "裝備",
|
|
45
|
+
"lock": "鎖定",
|
|
46
|
+
"proficiency": "熟練",
|
|
47
|
+
"baseSummary": "本隊制空/半徑/傷害",
|
|
48
|
+
"baseColumn": "基地",
|
|
49
|
+
"enemyShipName": "敵艦名",
|
|
50
|
+
"ownedOnly": "僅持有裝備",
|
|
51
|
+
"includeMissing": "包含未持有理論裝備",
|
|
52
|
+
"importToSimulator": "匯入到模擬器",
|
|
53
|
+
"sixWaveState": "6波狀態",
|
|
54
|
+
"manualMode": "手動",
|
|
55
|
+
"none": "無"
|
|
56
|
+
}
|