poi-plugin-gimmick-tracker
v0.1.1
Published
Track and confirm KanColle event-map gimmick conditions in poi.
Downloads
252
Readme
poi-plugin-gimmick-tracker
面向 poi 11.1.0 的舰队 Collection“解密·削甲记录”插件。插件平时在后台记录当前出击事实;检测到解密或削甲生效信号时聚焦内嵌页签,展示待确认卡片。插件不使用独立窗口,不联网,也不依赖 poi-plugin-battle-detail 的战斗分组。
能做什么
- 直接监听
window的game.response,记录/api_req_map/start、next、air_raid路线。 - 直接覆盖 sortie / combined battle 的
battle、airbattle、ld_airbattle、night_to_day、sp_midnight、midnight等响应,并由battleresult补充胜利 Rank。 - 观测节点到达、节点胜利、
api_kouku.api_stage1.api_disp_seiku节点制空,以及api_destruction_battle基地防空制空;路线明确标出ld_airbattle舰队空袭和基地防空,并保存时间戳与 API 路径引用。 - 从 FCD
fcd.map["<area>-<map>"].route[api_no][1]解析D、A2等节点标签;数据缺失时显示#<api_no>,不会令监听器崩溃。 - 支持粘贴
D点S胜2次、C2点到达2次、A2点空优1次、守家空优2次,可用中英文逗号、分号、空格混排。 - 按海域显示事实观测数与人工确认状态。
A胜接受 A/S/SS,S胜接受 S/SS;制空条件按“达到或优于”匹配,例如空确也满足空优。 - 待确认卡片左侧显示本次完整路线和触发时间,右侧下拉选择本次完成条件;按海域的清单会保留该图上一次触发出击的路线。
触发与确认语义
主信号是 /kcsapi/api_port/port 的 body.api_event_object.api_m_flag2 === 1。辅助信号包括任意 */battleresult 的 body.api_m2 === 1,以及 start / next / air_raid 中对象或数组形态 api_destruction_battle 元素的 api_m2 === 1。
同一 sortie 只生成一张 review;辅助信号可先创建 pending,回港事件再封存完整快照。确认攻略 condition 只设置 confirmed / confirmedAt,不会把事实观测数再加一次。只有该海域没有攻略 condition 时,确认观测候选才生成自由完成记录。
如果插件在出击中途才加载,可能只收到带 m_flag2 的回港响应。此时仍会生成 pending 并聚焦,但路线为空且明确标记“未捕获到完整出击”,不会静默漏记。
本地数据与生命周期
状态按宿主 store 中的 info.basic.api_member_id 分开保存:
<window.APPDATA_PATH>/gimmick-tracker/<memberId>/state-v1.jsonJSON 含 schemaVersion,写入采用同目录临时文件加 rename。memberId 未知或非法时不会创建目录,JSON 内也不重复保存 memberId。插件只保存地图、节点、Rank、制空、时间戳和用户确认状态,不保存 API token、舰队、装备或其他账号内容,不发起网络请求。
监听器在模块级 controller 中管理:pluginDidLoad 幂等注册一次,pluginWillUnload 对称移除;热重载不会在同一模块实例内重复监听。
自动聚焦优先使用 poi 11.1.0 从 views/env 暴露的 ipc.access('MainWindow').ipcFocusPlugin(id),随后才尝试 deprecated window.ipc。IPC 不可用时按单栏/双栏布局 dispatch 新 shape @@TabSwitch;再失败只调用 window.success。所有路径都被隔离,宿主异常不会中断事件处理。
开发与验收
npm install
npm test
npm run typecheck
npm run build
npm pack --dry-runReact 18、ReactDOM 和 Blueprint 5 都是 peer dependency,并在 CJS 构建中 external;安装进 poi 后复用宿主实例,不打包第二份 React。
