1 line
309 KiB
JSON
1 line
309 KiB
JSON
{"repo": "aofeili-code/rocom-data", "files": {"README.md": {"d2c0533aad9a0480d39e3fbc5c37507a47958251": {"t": 1785746473.4838197, "n": 18801, "h": "2ee893198aee89c8", "c": "<p align=\"center\">\n <img src=\"assets/logo.png\" alt=\"洛克王国对战模拟器 · Roco Data\" width=\"280\" />\n</p>\n\n<h1 align=\"center\">洛克王国对战模拟器 · Roco Data</h1>\n\n<p align=\"center\">\n <em>v1.3 — 数据爬虫 · 战斗引擎 · MCTS / LLM 对战智能体 · PVP 自动化 · MariaDB 战斗日志 · LLM 复盘</em>\n</p>\n\n---\n\n爬取 BWIKI 精灵图鉴 + 玩家配队,附带终端图鉴查看器、自由组队战斗模拟器,以及基于 **蒙特卡洛树搜索(MCTS)** 的 AI 智能体,支持 YAML 策略配置、LLM 智能体对战、批量训练并发加速。v1.1 新增 **游戏客户端自动化模块** 直接驱动游戏进行 PVP 自动战斗;v1.3 接入 **MariaDB 战斗日志** 与 **LLM 聚合复盘**,可对历史 N 场对战做模式分析与改阵建议。\n\n> ⚠️ **战斗模拟器仅供参考,结果不代表真实游戏表现。**\n> 详见「[模拟器精度说明](#模拟器精度说明)」章节。\n\n> 🚧 **功能完成度提示:**\n> - **PVP 自动挑战(v1.1)** 仍处于 **开发阶段**,实际游戏环境下尚未稳定跑通,目前仅提供模板匹配 + 操作框架,**不保证可用**。\n> - **LLM 辅助功能(智能体 / 组队 / 策略生成 / 聚合复盘)** 属于 **玩具阶段**,输出仅供参考娱乐,**不应作为真实对战决策依据**。模型对洛克王国游戏机制理解有限,分析结论可能与实际相差较大。\n\n---\n\n## 功能一览\n\n| 功能 | 说明 |\n|------|------|\n| 🕷️ 全量爬取 | 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV |\n| 🔄 检查更新 | 对比本地与 wiki 的差异,仅增量爬取新增精灵 |\n| 📚 BWIKI 阵容 | 抓取 BWIKI 玩家配队(PVP/PVE),可一键导入名册 |\n| 📖 图鉴查看器 | 在终端按页浏览每只精灵的完整信息,支持搜索 |\n| ⚔️ 战斗模拟器 | 自由组队 + 队伍名册,完整战斗机制模拟 |\n| 🤖 MCTS AI | 蒙特卡洛树搜索智能体,支持积累对局经验,YAML 策略配置 |\n| 🧠 LLM 智能体 | OpenAI 兼容协议(DeepSeek 等),可代替 MCTS 做决策与组队 |\n| 📋 队伍名册 | 队伍持久化存储,内置预设 + 用户自定义,随时调取并编辑 |\n| 🖼️ 图片导入 | 识别游戏内队伍分享截图,自动解析精灵和技能并存入名册 |\n| 🎮 PVP 自动挑战 🚧 | 驱动游戏客户端自动战斗(v1.1,**开发中,未稳定跑通**) |\n| 🗄️ MariaDB 后端 | 经验库 / 对战记录 / 详细战斗日志可写入 MariaDB(v1.3) |\n| 🔍 LLM 聚合复盘 🧪 | 对一支队伍最近 ≤100 场对战做胜率诊断 + 改阵建议(v1.3,**玩具阶段,仅供参考**) |\n\n---\n\n## 环境要求\n\n- Python 3.10+\n\n```bash\npip install -r requirements.txt\n```\n\n### 依赖说明\n\n| 库 | 用途 | 是否必须 |\n|----|------|----------|\n| `requests` | 爬虫网络请求 | ✅ |\n| `beautifulsoup4` | 爬虫 HTML 解析 | ✅ |\n| `rich` | 图鉴查看器 UI | ✅ |\n| `pyyaml` | YAML 策略配置文件解析 | ✅ |\n| `loguru` | PVP 自动战斗日志 | PVP 功能必须 |\n| `pywin32` | Windows 窗口操作(截图/按键/鼠标) | PVP 功能必须 |\n| `opencv-python` | 模板图像匹配 | PVP 功能必须 |\n| `anthropic` | 图片导入 — API 识别方式 | 可选 |\n| `rapidocr-onnxruntime` | 图片导入 — 本地 OCR(轻量,约 50MB) | 可选 |\n| `easyocr` | 图片导入 — 本地 OCR(高精度,依赖 PyTorch) | 可选 |\n\n图片导入功能至少安装 `anthropic` 或 `rapidocr-onnxruntime` 其中一个。\n\n---\n\n## 快速启动\n\n### 方式一:双击 run.bat(Windows 推荐)\n\n```\n============================================\n Rocom Helper v1.3\n============================================\n 1. Scrape sprites (rocom wiki)\n 2. Check for sprite updates\n 3. Scrape BWIKI lineups (player teams)\n 4. Browse sprites (viewer)\n 5. Battle simulator (teams / import / PVP / LLM review)\n 6. Train MCTS (self-play loop)\n 7. Manage experience DB\n 0. Exit\n============================================\n```\n\n### 方式二:命令行\n\n```bash\npython rocom_scraper.py # 全量爬取(自动跳过已有精灵)\npython rocom_scraper.py --force # 强制重爬所有精灵\npython viewer.py # 图鉴查看器\npython battle.py # 战斗模拟器(含 AI 对战)\npython train.py # 批量训练 MCTS AI\n```\n\n---\n\n## MCTS AI 对战引擎\n\n### AI 是如何工作的\n\n本项目的 AI 对战基于 **蒙特卡洛树搜索(MCTS)**,而非随机操作。每一回合,AI 会:\n\n1. **展开模拟树**:从当前状态克隆多个分支,对每个候选行动运行前瞻模拟(默认 100 次迭代)\n2. **评估得分**:根据双方生命格差值、当前 HP 比例、场上状态估算该分支的\"胜利期望\"\n3. **选择最优行动**:UCB1 公式平衡探索(试新动作)与利用(选已知好动作)\n4. **积累经验**:每局结束后,将胜负结果回溯到历史决策树,更新各状态下动作的胜率权重\n5. **经验持久化**:对局经验保存在 `data/experience/<队伍名>.json`,每次对战自动加载,越打越强\n\n> MCTS 本身不具备\"学习\"权重的神经网络,而是通过**统计每个局面下每种行动的历史胜率**来做出判断。经验越多,决策越稳定。这是一种\"无模型、无神经网络\"的纯树搜索方案,对战效果接近人类中等水平。\n\n### YAML 策略配置\n\n通过编写 YAML 文件,可以向 AI 注入人类的战斗直觉,大幅提升其在特定队伍上的表现。\n\n**文件位置:** `data/strategies/<队伍名>.yaml`(参考模板 `data/strategies/_template.yaml`)\n\n```yaml\n# 示例:为毒队配置策略\nteam: 预设毒队\nstarter: 影狸 # 首发精灵\n\nskill_priority:\n 影狸: [感染病, 毒液渗透, 嘲弄, 恶意逃离] # 优先传毒,再逃脱\n 裘卡: [毒囊, 崩拳, 阻断, 防御]\n\nswitch_rules:\n - when: type_disadvantaged # 属性被克制时\n action: switch\n to: type_counter # 换克制对方的精灵\n\n - when: hp_pct < 25\n action: switch\n to: highest_hp\n\ngeneral:\n prefer_gather_below_energy: 3\n prefer_attack_when_type_advantage: true\n```\n\n策略权重与 MCTS 经验权重相乘,策略推荐的行动权重 ×3.0,排斥的行动权重 ×0.2,AI 会在策略偏好的方向上更积极地探索。\n\n**可用条件(when):**\n\n| 条件 | 说明 |\n|------|------|\n| `hp_pct < N` | 己方当前精灵 HP 低于 N% |\n| `energy < N` | 己方能量低于 N |\n| `type_disadvantaged` | 己方精灵属性被克制 |\n| `type_advantaged` | 己方精灵有属性克制对手 |\n| `enemy_hp_pct < N` | 对手 HP 低于 N% |\n| `always` | 无条件(默认规则) |\n\n---\n\n## LLM 智能体与聚合复盘(v1.3,🧪 玩具阶段)\n\n> ⚠️ **本节所有 LLM 相关功能均为玩具阶段实验性产物。** 模型对洛克王国具体机制(特性触发、印记联动、能量节奏)理解有限,组队建议和复盘结论可能存在事实性错误,**仅供娱乐与参考,不构成真实对战决策建议**。\n\n除 MCTS 之外,本项目还支持 **OpenAI 兼容协议** 的 LLM 智能体,可直接代替 MCTS 做决策、组队和战斗复盘。\n\n### 配置 LLM\n\n复制 `data/llm_config.example.yaml` 为 `data/llm_config.yaml` 并填入:\n\n```yaml\nendpoint: https://api.deepseek.com/v1 # 任意 OpenAI 兼容端点\nmodel: deepseek-chat\napi_key: <your-api-key>\ntemperature: 0.3\ntimeout: 120\n```\n\n支持的端点举例:DeepSeek、Moonshot、本地 vLLM/Ollama 反代等。\n\n### LLM 能做什么\n\n| 入口 | 功能 |\n|------|------|\n| 战斗模拟器 → 1(开始对战) | 选模式 4/5 让 LLM 控制 A 队,对战 MCTS 或人类 |\n| 战斗模拟器 → 7 → 1 | LLM 根据精灵库与历史经验生成新阵容 |\n| 战斗模拟器 → 7 → 2 | LLM 为已有队伍生成 YAML 策略文件 |\n| 战斗模拟器 → 7 → 3 | 查看 LLM 战后写入的经验文档 |\n| 战斗模拟器 → 7 → 4 | **聚合复盘**:分析最近 N 场(≤100),输出胜率诊断 + 改阵建议 |\n\n### 聚合复盘的数据来源:MariaDB\n\n启用数据库后,每场批量训练对战会**实时**把详细日志写入 `battle_log_records` 表,包含:\n\n- 双方完整阵容(精灵 / 特性 / 性格 / 技能威力 · 耗能)\n- 引擎逐回合日志全文\n- 双方最终残局(HP / 能量 / 异常状态 / 剩余生命格)\n\nLLM 复盘会按队伍维度聚合这些记录,统计胜率、对手分布、败局阵亡频次,并抽样若干失败战例的日志摘录交给 LLM 做模式分析,输出:\n\n1. **整体胜率诊断**(哪些对手是大坑、哪些是优势局)\n2. **模式化弱点**(重复出现的失败模式)\n3. **单只精灵评估**(核心 vs 负担)\n4. **改阵建议**(具体到精灵 / 技能 / 特性 / 性格的替换方案)\n\n#### 复盘输出示例\n\n下面是对一支「最新恶魔狼王魔爆木桶队」做聚合复盘的实际输出片段(仅作展示,结论本身仅供参考):\n\n<p align=\"center\">\n <img src=\"assets/llm_review_example.png\" alt=\"LLM 聚合复盘输出示例\" width=\"720\" />\n</p>\n\n> 示例仅展示输出格式与可读性,**LLM 给出的精灵评估、改阵建议未必符合当前游戏环境**,请结合实际经验判断。\n\n### 启用 MariaDB 后端\n\n在项目根目录创建 `.env`:\n\n```bash\nDB_ENABLED=true\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_USER=root\nDB_PASSWORD=your-password\nDB_NAME=rocom_data\n```\n\n首次启动会自动 `CREATE DATABASE` + `CREATE TABLE`,无需手工建表。可用 `python db_manage.py init` 显式初始化,`python db_manage.py migrate` 把已有 JSON 经验迁移到数据库。\n\n数据库共 4 张表:\n\n| 表 | 内容 |\n|----|------|\n| `experience_records` | MCTS(state_key, action_key)→(wins, total)聚合统计 |\n| `battle_records` | 对战元数据(双方队名、胜负、回合、耗时、MCTS 迭代数) |\n| `pokemon_records` | 精灵字典缓存(可选) |\n| `battle_log_records` | 详细战斗日志:阵容 JSON / 引擎日志 / 最终残局 JSON |\n\n不启用 MariaDB 时所有数据回退到 JSON 文件,功能不受影响(仅 LLM 复盘需要数据库)。\n\n---\n\n### 未来目标:AI 辅助决策看板\n\nv2.0 的目标是将自动战斗与 MCTS AI 打通,实现真正的 AI 驱动对战:\n\n- 通过截图识别当前场上精灵、双方 HP/能量等战场信息\n- 将识别状态转换为引擎内战斗状态,由 MCTS AI 给出推荐行动\n- 实现对战全程\"AI 辅助看板\",或直接执行 AI 决策\n\n> v1.1 已完成游戏画面识别基础设施(`game_control/` 模块),PVP 自动战斗为此方向的第一个里程碑。\n\n---\n\n## PVP 自动挑战(v1.1,🚧 开发中)\n\n> ⚠️ **当前为开发阶段功能,尚未实际跑通完整 PVP 流程。** 已实现窗口截图、模板匹配、键鼠模拟等基础设施,但在真实游戏环境下仍存在识别误判、节奏错位、换宠失败等问题,**请勿用于真实排位**。仓库内代码主要作为后续开发的脚手架与参考。\n\n直接驱动游戏客户端,通过 **Windows 后台截图 + OpenCV 模板匹配 + 键盘/鼠标模拟** 实现自动挑战。\n\n### 当前支持脚本:咔咔鸟 + 五随机\n\n| 阶段 | 行为 |\n|------|------|\n| 等待 | 脚本启动后等待进入战斗,检测到技能出现自动开始 |\n| 开局序列 | 按顺序各释放一次:暴风眼 → 追打 → 音波弹 → 聚盐 |\n| 主循环 | 优先音波弹,音波弹变暗改用聚盐,超过 2 秒全黑则按 X 聚能 |\n| 死亡处理 | 检测到换宠面板(左下角心形图标)→ 按 3 换宠 → ESC 逃跑 |\n\n### 技术特性\n\n- **后台截图**:使用 `PrintWindow` API,游戏可在后台运行,不需要前台焦点\n- **窗口相对坐标**:所有坐标相对于游戏窗口,与窗口在屏幕的位置无关\n- **模板自动缩放**:根据当前窗口高度与截图参考高度自动计算缩放比,同一套模板适配不同窗口尺寸\n- **技能识别**:在左半边屏幕中识别技能图标所在槽位后点击,无需固定坐标\n- **全键盘操作**:换宠(3)、聚能(X)、逃跑(ESC)均通过键盘模拟,无位置依赖\n\n### 使用步骤\n\n**1. 安装依赖**\n\n```bash\npip install loguru pywin32 opencv-python\n```\n\n**2. 准备截图模板**(在对应游戏窗口尺寸下截图)\n\n| 文件路径 | 内容 |\n|---------|------|\n| `assets/templates/咔咔鸟.png` | 咔咔鸟战斗头像(左上角头像区域) |\n| `assets/templates/skills/暴风眼.png` | 暴风眼技能卡图标 |\n| `assets/templates/skills/追打.png` | 追打技能卡图标 |\n| `assets/templates/skills/音波弹.png` | 音波弹技能卡图标 |\n| `assets/templates/skills/聚盐.png` | 聚盐技能卡图标 |\n| `assets/templates/pvp/switch_panel_heart.png` | 换宠面板左下角心形图标(不含数字) |\n\n**3. 设置参考高度**\n\n打开任意一张截图,在画图工具中查看图片高度,填入 `pvp/config.py`:\n\n```python\nTEMPLATE_REFERENCE_HEIGHT = 736 # 截图时的游戏窗口高度(像素)\n```\n\n**4. 启动**\n\n```bash\npython battle.py # 选择菜单 6:PVP 自动战斗\n```\n\n启动后脚本进入等待状态,在游戏内手动点击「开始挑战」,脚本检测到技能出现后自动接管。\n\n### 添加新脚本\n\n新增其他战斗脚本只需:\n\n1. 在 `pvp/config.py` 中修改 `OPEN_SEQUENCE`、`MAIN_SKILLS` 和对应模板路径\n2. 截取新技能图标放入 `assets/templates/skills/`\n\n---\n\n## 模拟器精度说明\n\n**本模拟器力求对五支预设队伍实现接近 100% 的原游戏战斗还原度。** \n对于自定义队伍,精度取决于所用精灵的特性是否已实现。\n\n| 项目 | 实现情况 | 说明 |\n|------|----------|------|\n| 六维属性 | ✅ 已实现 | 种族值 + 个体值规则 + 性格修正公式计算 |\n| 双属性精灵 | ✅ 已实现 | 221 只双属精灵全覆盖;双弱=300%(非400%),双抗=25% |\n| 属性克制表 | ✅ 已对齐 | 采用 roco-world 官方数据,无免疫(最低0.5x),18 种属性 |\n| 性格系统 | ✅ 已实现 | 25 种命名性格(胆小/开朗等),±10%,仅作用于 5 个战斗属性 |\n| 胜利条件 | ✅ 已实现 | 4 格生命制:己方精灵倒下 -1 格,归0判负 |\n| 技能数据 | ✅ 已对齐 | 488 个技能,与 roco-world 一致;耗能/威力 0 差异 |\n| 技能效果 | ⚠️ 部分实现 | 通过正则解析技能描述,常见效果已覆盖;少数复杂技能效果退化 |\n| 异常状态 | ✅ 已实现 | 烧伤 / 中毒 / 冻结 / 寄生,规则见下方机制表 |\n| 应对机制 | ✅ 已实现 | 攻击/防御/状态三类应对的减伤、反弹、威力倍率 |\n| 天气系统 | ✅ 已实现 | 雪天 / 沙暴 / 雨天,持续 8 回合 |\n| **印记系统** | ✅ **已实现** | 12 种正负印记,详见「[印记系统](#印记系统)」章节 |\n| **特性系统** | ✅ **部分实现** | 已实现 39 种特性(覆盖五支预设队伍 + 多支社区常用阵容);详见「[特性系统](#特性系统)」|\n| 血脉系统 | ❌ 未实现 | 详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 首领化 | ❌ 未实现 | 详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 愿力冲击 | ❌ 未实现 | 详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 个性(被动) | ❌ 未实现 | 仅实现性格(Nature);详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 对战策略 | ✅ MCTS AI | 蒙特卡洛树搜索,支持经验积累和 YAML 策略配置 |\n\n---\n\n## 印记系统\n\n印记是队伍级别的持续效果,换人不消失。每支队伍同时最多存在 **1 种正面印记 + 1 种负面印记**。\n\n- **相同类别的新印记直接顶替旧印记**(异种覆盖)\n- **相同种类的印记则叠加层数**\n- 只有清除类技能或被顶替才会消失\n\n### 正面印记(POSITIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 湿润印记 | 全技能能耗 -1 |\n| 龙噬印记 | 使用 3 能耗技能时,自身双攻 +30% |\n| 蓄势印记 | 攻击技能威力 +30%,能耗 +1 |\n| 风起印记 | 本回合先手时,技能威力 +20% |\n| 蓄电印记 | 攻击技能威力平坦 +10 |\n| 光合印记 | 回合结束获得 1 能量 |\n| 攻击印记 | 全技能威力 +10% |\n\n### 负面印记(NEGATIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 减速印记 | 速度 -10 |\n| 降灵印记 | 入场时失去 1 能量 |\n| 星陨印记 | 受到非幻系攻击时,消耗全部层数造成等量幻系反击伤害 |\n| 中毒印记 | 回合结束扣 3% HP |\n| 棘刺印记 | 入场时失去 6% HP |\n\n---\n\n## 特性系统\n\n当前已实现 **39 种特性**,覆盖五支预设队伍(毒队、翼王队、狼王队、平衡狼王队、沙暴武队)以及多支社区常用阵容。下表仅列出特性名称与代表持有精灵,**具体效果实现请参见 `sim/ability_engine.py` 源码**。\n\n| 特性 | 代表持有精灵 |\n|------|------------|\n| 溶解扩散 | 千棘盔 |\n| 蚀刻 | 裘卡 |\n| 扩散侵蚀 | 琉璃水母 |\n| 下黑手 | 影狸 |\n| 向心力 | 声波缇塔 |\n| 壮胆 | 巨噬针鼹 |\n| 翼轴 | 帕帕斯卡 |\n| 悲悯 | 恶魔狼 |\n| 渗透 | 棋绮后 |\n| 身经百练 | 海豹船长 |\n| 洁癖 | 翠顶夫人 |\n| 飓风 | 圣羽翼王 |\n| 煤渣草 | 燃薪虫 |\n| 变形活画 | 画间沉铁兽 |\n| 目空 | 白金独角兽 |\n| 绝对秩序 | 秩序鱿墨 |\n| 暴食 | 翼龙 |\n| 虚假宝箱 | 迷迷箱怪 |\n| 专注力 | 音速犬 |\n| 魔法增效 | 黑猫巫师 |\n| 诈死 | 卡瓦重 |\n| 嫁祸 | 朔夜伊芙 |\n| 特殊清洁场景 | 食尘短绒 |\n| 星地善良 | 小皮球 |\n| 慢热型 | 瞌睡王 |\n| 不朽 | 寂灭骨龙 |\n| 野性感官 | 针叶巡林 |\n| 冰钻 | 冰钻布鲁斯 |\n| 助燃 | 火神 |\n| 灵魂灼伤 | 尖嘴狐仙 |\n| 氧循环 | 叶绿魔力猫 |\n| 浸润 | 水灵 |\n| 月牙雪糕 | 月牙雪熊 |\n| 哨兵 | 绒光优优 |\n| 陨落 | 落陨星兔 |\n| 捉迷藏 | 雪影娃娃 |\n| 泛音列 | 圆号鱼 |\n| 对流 | 利灯鱼 |\n| 吸积盘 | 怖哭菇 |\n\n> **注意:** 上述特性的实现细节大多来自对游戏视频/截图的观察分析,作者本人不擅长 PVP,部分触发时机、数值精度可能与实际游戏存在出入。如有发现偏差欢迎在 Issues 中指出。\n\n---\n\n## 未实现的游戏机制\n\n下列游戏机制目前**尚未实现**,是后续优先补完的方向。带有这些机制的精灵在模拟器内仅按基础规则参战,不会触发对应被动效果。\n\n| 机制 | 状态 | 说明 |\n|------|------|------|\n| 个性(被动) | ❌ 未实现 | 当前仅实现「性格(Nature)」(25 种 ±10% 属性修正)。游戏内影响战斗的「个性」被动(特性之外的第二层被动)尚缺失。 |\n| 血脉系统 | ❌ 未实现 | 部分精灵的血脉强化 / 血脉觉醒效果未接入战斗流程,模拟器按未觉醒状态计算。 |\n| 首领化 | ❌ 未实现 | 首领化精灵的属性放大、专属机制未实现。 |\n| 愿力冲击 | ❌ 未实现 | 愿力冲击的机制未实现。 |\n\n### 🙋 诚邀有 PVP 经验的玩家参与贡献\n\n如果你熟悉上述任意机制的具体效果,欢迎通过 Issues 或 PR 提供以下信息:\n\n- 机制 / 个性 / 血脉名称 + 持有精灵名\n- 触发条件(什么时候触发)\n- 效果描述(具体数值)\n- 参考依据(对战截图 / 视频时间戳)\n\n作者本人对 PVP 了解有限,很多机制都是通过观看视频脑测分析,难以保证准确性。社区贡献将极大地提升模拟器还原度。\n\n---\n\n## 爬虫\n\n### 可选参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔下限(秒),实际为 `delay ~ delay+1.5` 随机值 | 1.5 |\n| `--output path` | 输出 JSON 的路径 | `data/sprites.json` |\n| `--force` | 强制重爬所有精灵,并重新下载所有图片(忽略已有缓存) | — |\n\n默认情况下,爬虫会自动跳过本地 `sprites.json` 中已存在的精灵,只爬取新增内容。使用 `--force` 可强制全量重爬。\n\n### 输出文件\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整精灵数据,嵌套 JSON(含技能等级、特性) |\n| `data/sprites.csv` | 扁平化 CSV,可用 Excel / pandas 打开 |\n| `data/skills.csv` | 全技能去重列表(列名同 `skills_all.csv`) |\n| `data/urls.csv` | 爬取到的图片 URL 及本地路径,边爬边更新 |\n| `data/images/` | 下载的图片,按类型分子目录(sprites/skills/attributes/abilities/matchup) |\n| `data/sprites.backup.json` | 每次爬取前自动备份的上一版 |\n\n### 爬虫数据与战斗模拟器的同步关系\n\n| 数据文件 | 爬虫是否更新 | 说明 |\n|----------|-------------|------|\n| `data/sprites.json` | ✅ 每次爬取自动更新 | 精灵属性、可学技能列表 |\n| `data/skills_all.csv` | ❌ 静态文件,爬虫不触碰 | 技能的威力 / 能耗;来自 NRC_SIM 手工维护 |\n\n**当前数据状态:**\n- `skills_all.csv` 共收录 **488 个技能**,覆盖 roco-world 全部 487 个已知技能\n- 耗能、威力数值与 roco-world 完全一致,0 个差异\n\n---\n\n## 图鉴查看器\n\n```bash\npython viewer.py\n```\n\n终端显示类手机图鉴界面,支持翻页(`←` / `→`)、搜索(`/`)、退出(`q`)。\n\n---\n\n## 战斗模拟器\n\n```bash\npython battle.py\n```\n\n### 主菜单\n\n```\n========================================================\n 洛克王国战斗模拟器\n========================================================\n 当前队伍列表(N 支):\n 1. [预设] 预设毒队\n 2. [预设] 预设翼王队\n ...\n========================================================\n 1. 开始对战 (AI/AI、人/AI、人对人、LLM/AI 等模式)\n 2. 新建队伍 (交互组队并保存)\n 3. 管理队伍 (查看 / 删除 / 重命名 / 编辑)\n 4. 批量模拟 (选两支队伍跑 N 场,支持并发加速)\n 5. 导入队伍 (图片识别 / BWIKI 玩家配队)\n 6. PVP 自动挑战 (咔咔鸟脚本,控制游戏客户端)\n 7. LLM 辅助 (AI 组队 / 生成策略 / 经验文档 / 战斗复盘)\n 0. 返回\n========================================================\n```\n\n> **LLM 战斗复盘**位于菜单 7→4:选择一支队伍后输入 N(≤100),LLM 会基于\n> MariaDB 中的 `battle_log_records` 表对该队最近 N 场做胜率诊断、模式弱点\n> 识别和改阵建议,输出 4 节结构化报告。\n\n### 开始对战\n\n从名册选 A、B 两队,MCTS AI 操控并实时输出日志:\n\n```\n────────────────────────────────────────── 回合 3\n 预设毒队: 裘卡 [##########] 302/302 能量: 8\n 翼王队: 声波缇塔 [####......] 149/334 能量: 7 毒2\n[A] 裘卡 使用 崩拳(物攻 武系 威力60)\n → 对 声波缇塔 造成 185 点伤害 [克制!] (HP: 334→149/334)\n```\n\n### 批量模拟\n\n```\n 批量模拟结果(100 场)\n 预设毒队 胜: 83 场 (83.0%)\n 预设翼王队 胜: 15 场 (15.0%)\n 平局: 2 场 ( 2.0%)\n 平均回合数: 97.6\n 总耗时: 0.31s (3.1ms/场)\n```\n\n### 从图片导入队伍\n\n识别游戏内标准组队分享截图,自动提取精灵名和技能,存入名册。\n\n将截图放入 `import_images/` 目录后,选择识别方式:\n\n| 方式 | 精度 | 安装 |\n|------|------|------|\n| Claude Vision API | ★★★★★ | `pip install anthropic` + 配置 `ANTHROPIC_API_KEY` |\n| rapidocr(本地) | ★★★☆☆ | `pip install rapidocr-onnxruntime` |\n| easyocr(本地) | ★★★★☆ | `pip install easyocr`(需 PyTorch) |\n\n---\n\n## 战斗引擎实现机制\n\n| 机制 | 规则 |\n|------|------|\n| **伤害公式** | `(攻/防) × 0.9 × 技能威力 × 能力等级 × 本系加成(×1.5) × 克制倍率 × 天气加成` |\n| **能力等级** | `(1 + 攻击提升 + 敌方防御降低) / (1 + 攻击降低 + 敌方防御提升)` |\n| **属性克制** | 单弱/单抗=2x/0.5x;双弱=3x(非400%);双抗=0.25x;无免疫 |\n| **性格修正** | 25 种命名性格,±10%,仅作用于物攻/物防/魔攻/魔防/速度(HP不受影响)|\n| **胜利条件** | 4 格生命制:击倒对方精灵 -1格,一方生命格归0则判负 |\n| **烧伤** | 每回合 `-2% × 层数` HP,层数减半衰减,归零消失 |\n| **中毒** | 每回合 `-3% × 层数` HP,层数不衰减 |\n| **冻结** | 回合结束时若 HP < `maxHP × 层数/12` 则死亡 |\n| **寄生** | 被寄生者每回合 -8% HP,寄生者在场时回复等量 |\n| **应对** | 攻击 vs 防御/状态、防御 vs 状态 各触发对应额外效果 |\n| **天气** | 雪天:全场 +2 冻结/回合;沙暴:地系技能能耗减半;雨天:水系威力 +50% |\n| **换人** | 主动换人 / 精灵倒下后自动切换到首位存活精灵 |\n| **能量** | 汇合聚能 +5,技能各有消耗,不足时强制聚能 |\n| **印记** | 队伍级正/负印记各 1 槽,换人不消失;12 种印记各有回合效果或触发效果 |\n| **先手** | `有效速度 = 基础速度 × (1 + 先手修正) - 减速印记惩罚` |\n\n---\n\n## 项目结构\n\n```\nrocom-data/\n├── rocom_scraper.py 爬虫主程序\n├── lineup_scraper.py BWIKI 玩家配队抓取\n├── viewer.py 终端图鉴查看器\n├── battle.py 战斗模拟器主入口\n├── train.py MCTS AI 批量训练\n├── db_manage.py 数据库管理 CLI\n├── run.bat Windows 一键启动菜单\n├── requirements.txt 依赖清单\n│\n├── assets/\n│ ├── logo.png 项目 Logo\n│ └── templates/ PVP 模板图片(技能 / 头像 / 面板)\n│\n├── data/\n│ ├── sprites.json 精灵完整数据(爬虫输出)\n│ ├── sprites.csv 精灵扁平化数据\n│ ├── skills_all.csv 技能库(含威力数值)\n│ ├── teams.json 队伍名册(自动生成)\n│ ├── lineups.json BWIKI 玩家配队\n│ ├── llm_config.yaml LLM 端点/模型/API key 配置\n│ ├── llm_experience/ LLM 战后经验文档(每队一份)\n│ ├── experience/ MCTS 经验数据库(每队一个 JSON)\n│ └── strategies/ YAML 策略配置文件目录\n│ └── _template.yaml 策略文件模板\n│\n├── import_images/ 队伍分享截图放置目录\n│\n├── tests/ pytest 单元测试\n│\n└── sim/ 战斗引擎与智能体\n ├── battle_engine.py 回合主循环\n ├── battle_state.py 战斗状态容器(含印记槽)\n ├── damage_calc.py 伤害公式\n ├── counter_system.py 应对系统\n ├── ability_engine.py 特性系统(已实现 39 种特性)\n ├── mark_system.py 印记系统(12 种印记)\n ├── mcts.py 蒙特卡洛树搜索核心\n ├── mcts_agent.py MCTS 智能体封装\n ├── llm_agent.py LLM 智能体(OpenAI 兼容协议)\n ├── llm_team_generator.py LLM 组队 / 策略生成\n ├── llm_review.py LLM 聚合复盘(≤100 场)\n ├── experience_db.py 经验数据库(双后端:JSON / MariaDB)\n ├── data_store.py MariaDB 数据访问层(4 张表)\n ├── battle_log_capture.py 战斗日志捕获(阵容 / 残局序列化)\n ├── batch_concurrent.py 多进程批量训练(实时落库)\n ├── lineups_loader.py BWIKI 配队加载与转换\n ├── strategy.py YAML 策略解析与权重应用\n ├── pokemon.py 精灵模型(含双属性、性格)\n ├── skill.py 技能数据模型\n ├── types.py 属性枚举 + 克制表\n ├── pokemon_db.py 精灵数据库\n ├── skill_db.py 技能数据库\n ├── team_builder.py 精灵构建\n ├── team_builder_interactive.py 交互式组队\n ├── team_roster.py 队伍名册持久化\n ├── team_image_parser.py 图片识别(Claude Vision API)\n └── team_image_parser_ocr.py 图片识别(本地 OCR)\n```\n\n---\n\n## 免责声明\n\n- 本项目仅供个人学习使用,请勿高频请求 BWIKI,以免对服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- **战斗模拟结果仅供参考**,与游戏内真实对局存在差异,请以游戏内实际表现为准\n- 使用本项目产生的一切后果由使用者自行承担\n\n---\n\n## 贡献\n\n欢迎提 PR 或 Issue:\n- 修复战斗机制偏差\n- 补充精灵个性效果\n- 完善技能描述解析\n- 参与 v2.0 游戏画面识别功能开发\n\n---\n\n## 致谢\n\n本项目由 [AofeiLi-code](https://github.com/AofeiLi-code) 负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n\n战斗引擎(`sim/` 目录)基于 [NRC_SIM](https://github.com/AofeiLi-code/NRC_SIM),遵循 MIT License。\n\n闪耀大赛自动挑战功能(`pvp/` 目录)基于[roco-kingdom-world-sript](https://github.com/JhonTitor6/roco-kingdom-world-script.git), 遵循 MIT License.\n\n### 社区贡献者 \n \n特别感谢以下贡献者提交的 PR,他们的工作是 v1.x 多个核心功能能够落地的基础: \n \n| 贡献者 | PR | 内容 | \n|--------|----|------| \n| [@bupt-lxc](https://github.com/bupt-lxc) | [#1](https://github.com/AofeiLi-code/rocom-data/pull/1) | 进化链爬取(`evolution_chain` 字段) |\n| [@bupt-lxc](https://github.com/bupt-lxc) | [#4](https://github.com/AofeiLi-code/rocom-data/pull/4) | 技能等级数据、特性图片爬取、`skills.csv` / `urls.csv`、`--force` 全量重爬 | \n| [@cy6909](https://github.com/cy6909) | [#5](https://github.com/AofeiLi-code/rocom-data/pull/5) | 互动对战(人机对战)、AI 辅助优化、**MariaDB 可配置数据存储层**(v1.3 数据库后端的基石) | \n| [@bupt-lxc](https://github.com/bupt-lxc) | [#6](https://github.com/AofeiLi-code/rocom-data/pull/6) | BWIKI 玩家配队抓取、精灵头像爬取(战斗模拟器导入功能的数据来源) | \n \n如果你希望加入贡献者名单,欢迎通过 PR / Issue 参与! \n \n --- \n"}, "4812719f94ad64aa0691481ba6a5f5e2d41de8a1": {"t": 1785764673.3907363, "n": 16769, "h": "f5bc33936efc9777", "c": "<p align=\"center\">\n <img src=\"assets/logo.png\" alt=\"洛克王国对战模拟器 · Roco Data\" width=\"280\" />\n</p>\n\n<h1 align=\"center\">洛克王国对战模拟器 · Roco Data</h1>\n\n<p align=\"center\">\n <em>v1.3 — 数据爬虫 · 战斗引擎 · MCTS / LLM 对战智能体 · PVP 自动化 · MariaDB 战斗日志 · LLM 复盘</em>\n</p>\n\n---\n\n爬取 BWIKI 精灵图鉴 + 玩家配队,附带终端图鉴查看器、自由组队战斗模拟器,以及基于 **蒙特卡洛树搜索(MCTS)** 的 AI 智能体,支持 YAML 策略配置、LLM 智能体对战、批量训练并发加速。v1.1 新增 **游戏客户端自动化模块** 直接驱动游戏进行 PVP 自动战斗;v1.3 接入 **MariaDB 战斗日志** 与 **LLM 聚合复盘**,可对历史 N 场对战做模式分析与改阵建议。\n\n> ⚠️ **战斗模拟器仅供参考,结果不代表真实游戏表现。**\n> 详见「[模拟器精度说明](#模拟器精度说明)」章节。\n\n> 🚧 **功能完成度提示:**\n> - **PVP 自动挑战(v1.1)** 仍处于 **开发阶段**,实际游戏环境下尚未稳定跑通,目前仅提供模板匹配 + 操作框架,**不保证可用**。\n> - **LLM 辅助功能(智能体 / 组队 / 策略生成 / 聚合复盘)** 属于 **玩具阶段**,输出仅供参考娱乐,**不应作为真实对战决策依据**。模型对洛克王国游戏机制理解有限,分析结论可能与实际相差较大。\n\n---\n\n## 功能一览\n\n| 功能 | 说明 |\n|------|------|\n| 🕷️ 全量爬取 | 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV |\n| 🔄 检查更新 | 对比本地与 wiki 的差异,仅增量爬取新增精灵 |\n| 📚 BWIKI 阵容 | 抓取 BWIKI 玩家配队(PVP/PVE),可一键导入名册 |\n| 📖 图鉴查看器 | 在终端按页浏览每只精灵的完整信息,支持搜索 |\n| ⚔️ 战斗模拟器 | 自由组队 + 队伍名册,完整战斗机制模拟 |\n| 🤖 MCTS AI | 蒙特卡洛树搜索智能体,支持积累对局经验,YAML 策略配置 |\n| 🧠 LLM 智能体 | OpenAI 兼容协议(DeepSeek 等),可代替 MCTS 做决策与组队 |\n| 📋 队伍名册 | 队伍持久化存储,内置预设 + 用户自定义,随时调取并编辑 |\n| 🖼️ 图片导入 | 识别游戏内队伍分享截图,自动解析精灵和技能并存入名册 |\n| 🎮 PVP 自动挑战 🚧 | 驱动游戏客户端自动战斗(v1.1,**开发中,未稳定跑通**) |\n| 🗄️ MariaDB 后端 | 经验库 / 对战记录 / 详细战斗日志可写入 MariaDB(v1.3) |\n| 🔍 LLM 聚合复盘 🧪 | 对一支队伍最近 ≤100 场对战做胜率诊断 + 改阵建议(v1.3,**玩具阶段,仅供参考**) |\n\n---\n\n## 环境要求\n\n- Python 3.10+\n\n```bash\npip install -r requirements.txt\n```\n\n### 依赖说明\n\n| 库 | 用途 | 是否必须 |\n|----|------|----------|\n| `requests` | 爬虫网络请求 | ✅ |\n| `beautifulsoup4` | 爬虫 HTML 解析 | ✅ |\n| `rich` | 图鉴查看器 UI | ✅ |\n| `pyyaml` | YAML 策略配置文件解析 | ✅ |\n| `loguru` | PVP 自动战斗日志 | PVP 功能必须 |\n| `pywin32` | Windows 窗口操作(截图/按键/鼠标) | PVP 功能必须 |\n| `opencv-python` | 模板图像匹配 | PVP 功能必须 |\n| `anthropic` | 图片导入 — API 识别方式 | 可选 |\n| `rapidocr-onnxruntime` | 图片导入 — 本地 OCR(轻量,约 50MB) | 可选 |\n| `easyocr` | 图片导入 — 本地 OCR(高精度,依赖 PyTorch) | 可选 |\n\n图片导入功能至少安装 `anthropic` 或 `rapidocr-onnxruntime` 其中一个。\n\n---\n\n## 快速启动\n\n### 方式一:双击 run.bat(Windows 推荐)\n\n```\n============================================\n Rocom Helper v1.3\n============================================\n 1. Scrape sprites (rocom wiki)\n 2. Check for sprite updates\n 3. Scrape BWIKI lineups (player teams)\n 4. Browse sprites (viewer)\n 5. Battle simulator (teams / import / PVP / LLM review)\n 6. Train MCTS (self-play loop)\n 7. Manage experience DB\n 0. Exit\n============================================\n```\n\n### 方式二:命令行\n\n```bash\npython rocom_scraper.py # 全量爬取(自动跳过已有精灵)\npython rocom_scraper.py --force # 强制重爬所有精灵\npython viewer.py # 图鉴查看器\npython battle.py # 战斗模拟器(含 AI 对战)\npython train.py # 批量训练 MCTS AI\n```\n\n---\n\n## MCTS AI 对战引擎\n\n### AI 是如何工作的\n\n本项目的 AI 对战基于 **蒙特卡洛树搜索(MCTS)**,而非随机操作。每一回合,AI 会:\n\n1. **展开模拟树**:从当前状态克隆多个分支,对每个候选行动运行前瞻模拟(默认 100 次迭代)\n2. **评估得分**:根据双方生命格差值、当前 HP 比例、场上状态估算该分支的\"胜利期望\"\n3. **选择最优行动**:UCB1 公式平衡探索(试新动作)与利用(选已知好动作)\n4. **积累经验**:每局结束后,将胜负结果回溯到历史决策树,更新各状态下动作的胜率权重\n5. **经验持久化**:对局经验保存在 `data/experience/<队伍名>.json`,每次对战自动加载,越打越强\n\n> MCTS 本身不具备\"学习\"权重的神经网络,而是通过**统计每个局面下每种行动的历史胜率**来做出判断。经验越多,决策越稳定。这是一种\"无模型、无神经网络\"的纯树搜索方案,对战效果接近人类中等水平。\n\n### YAML 策略配置\n\n通过编写 YAML 文件,可以向 AI 注入人类的战斗直觉,大幅提升其在特定队伍上的表现。\n\n**文件位置:** `data/strategies/<队伍名>.yaml`(参考模板 `data/strategies/_template.yaml`)\n\n```yaml\n# 示例:为毒队配置策略\nteam: 预设毒队\nstarter: 影狸 # 首发精灵\n\nskill_priority:\n 影狸: [感染病, 毒液渗透, 嘲弄, 恶意逃离] # 优先传毒,再逃脱\n 裘卡: [毒囊, 崩拳, 阻断, 防御]\n\nswitch_rules:\n - when: type_disadvantaged # 属性被克制时\n action: switch\n to: type_counter # 换克制对方的精灵\n\n - when: hp_pct < 25\n action: switch\n to: highest_hp\n\ngeneral:\n prefer_gather_below_energy: 3\n prefer_attack_when_type_advantage: true\n```\n\n策略权重与 MCTS 经验权重相乘,策略推荐的行动权重 ×3.0,排斥的行动权重 ×0.2,AI 会在策略偏好的方向上更积极地探索。\n\n**可用条件(when):**\n\n| 条件 | 说明 |\n|------|------|\n| `hp_pct < N` | 己方当前精灵 HP 低于 N% |\n| `energy < N` | 己方能量低于 N |\n| `type_disadvantaged` | 己方精灵属性被克制 |\n| `type_advantaged` | 己方精灵有属性克制对手 |\n| `enemy_hp_pct < N` | 对手 HP 低于 N% |\n| `always` | 无条件(默认规则) |\n\n---\n\n## LLM 智能体与聚合复盘(v1.3,🧪 玩具阶段)\n\n> ⚠️ **本节所有 LLM 相关功能均为玩具阶段实验性产物。** 模型对洛克王国具体机制(特性触发、印记联动、能量节奏)理解有限,组队建议和复盘结论可能存在事实性错误,**仅供娱乐与参考,不构成真实对战决策建议**。\n\n除 MCTS 之外,本项目还支持 **OpenAI 兼容协议** 的 LLM 智能体,可直接代替 MCTS 做决策、组队和战斗复盘。\n\n### 配置 LLM\n\n复制 `data/llm_config.example.yaml` 为 `data/llm_config.yaml` 并填入:\n\n```yaml\nendpoint: https://api.deepseek.com/v1 # 任意 OpenAI 兼容端点\nmodel: deepseek-chat\napi_key: <your-api-key>\ntemperature: 0.3\ntimeout: 120\n```\n\n支持的端点举例:DeepSeek、Moonshot、本地 vLLM/Ollama 反代等。\n\n### LLM 能做什么\n\n| 入口 | 功能 |\n|------|------|\n| 战斗模拟器 → 1(开始对战) | 选模式 4/5 让 LLM 控制 A 队,对战 MCTS 或人类 |\n| 战斗模拟器 → 7 → 1 | LLM 根据精灵库与历史经验生成新阵容 |\n| 战斗模拟器 → 7 → 2 | LLM 为已有队伍生成 YAML 策略文件 |\n| 战斗模拟器 → 7 → 3 | 查看 LLM 战后写入的经验文档 |\n| 战斗模拟器 → 7 → 4 | **聚合复盘**:分析最近 N 场(≤100),输出胜率诊断 + 改阵建议 |\n\n### 聚合复盘的数据来源:MariaDB\n\n启用数据库后,每场批量训练对战会**实时**把详细日志写入 `battle_log_records` 表,包含:\n\n- 双方完整阵容(精灵 / 特性 / 性格 / 技能威力 · 耗能)\n- 引擎逐回合日志全文\n- 双方最终残局(HP / 能量 / 异常状态 / 剩余生命格)\n\nLLM 复盘会按队伍维度聚合这些记录,统计胜率、对手分布、败局阵亡频次,并抽样若干失败战例的日志摘录交给 LLM 做模式分析,输出:\n\n1. **整体胜率诊断**(哪些对手是大坑、哪些是优势局)\n2. **模式化弱点**(重复出现的失败模式)\n3. **单只精灵评估**(核心 vs 负担)\n4. **改阵建议**(具体到精灵 / 技能 / 特性 / 性格的替换方案)\n\n#### 复盘输出示例\n\n下面是对一支「最新恶魔狼王魔爆木桶队」做聚合复盘的实际输出片段(仅作展示,结论本身仅供参考):\n\n<p align=\"center\">\n <img src=\"assets/llm_review_example.png\" alt=\"LLM 聚合复盘输出示例\" width=\"720\" />\n</p>\n\n> 示例仅展示输出格式与可读性,**LLM 给出的精灵评估、改阵建议未必符合当前游戏环境**,请结合实际经验判断。\n\n### 启用 MariaDB 后端\n\n在项目根目录创建 `.env`:\n\n```bash\nDB_ENABLED=true\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_USER=root\nDB_PASSWORD=your-password\nDB_NAME=rocom_data\n```\n\n首次启动会自动 `CREATE DATABASE` + `CREATE TABLE`,无需手工建表。可用 `python db_manage.py init` 显式初始化,`python db_manage.py migrate` 把已有 JSON 经验迁移到数据库。\n\n数据库共 4 张表:\n\n| 表 | 内容 |\n|----|------|\n| `experience_records` | MCTS(state_key, action_key)→(wins, total)聚合统计 |\n| `battle_records` | 对战元数据(双方队名、胜负、回合、耗时、MCTS 迭代数) |\n| `pokemon_records` | 精灵字典缓存(可选) |\n| `battle_log_records` | 详细战斗日志:阵容 JSON / 引擎日志 / 最终残局 JSON |\n\n不启用 MariaDB 时所有数据回退到 JSON 文件,功能不受影响(仅 LLM 复盘需要数据库)。\n\n---\n\n### 未来目标:AI 辅助决策看板\n\nv2.0 的目标是将自动战斗与 MCTS AI 打通,实现真正的 AI 驱动对战:\n\n- 通过截图识别当前场上精灵、双方 HP/能量等战场信息\n- 将识别状态转换为引擎内战斗状态,由 MCTS AI 给出推荐行动\n- 实现对战全程\"AI 辅助看板\",或直接执行 AI 决策\n\n> v1.1 已完成游戏画面识别基础设施(`game_control/` 模块),PVP 自动战斗为此方向的第一个里程碑。\n\n---\n\n## PVP 自动挑战(v1.1,🚧 开发中)\n\n> ⚠️ **当前为开发阶段功能,尚未实际跑通完整 PVP 流程。** 已实现窗口截图、模板匹配、键鼠模拟等基础设施,但在真实游戏环境下仍存在识别误判、节奏错位、换宠失败等问题,**请勿用于真实排位**。仓库内代码主要作为后续开发的脚手架与参考。\n\n直接驱动游戏客户端,通过 **Windows 后台截图 + OpenCV 模板匹配 + 键盘/鼠标模拟** 实现自动挑战。\n\n### 当前支持脚本:咔咔鸟 + 五随机\n\n| 阶段 | 行为 |\n|------|------|\n| 等待 | 脚本启动后等待进入战斗,检测到技能出现自动开始 |\n| 开局序列 | 按顺序各释放一次:暴风眼 → 追打 → 音波弹 → 聚盐 |\n| 主循环 | 优先音波弹,音波弹变暗改用聚盐,超过 2 秒全黑则按 X 聚能 |\n| 死亡处理 | 检测到换宠面板(左下角心形图标)→ 按 3 换宠 → ESC 逃跑 |\n\n### 技术特性\n\n- **后台截图**:使用 `PrintWindow` API,游戏可在后台运行,不需要前台焦点\n- **窗口相对坐标**:所有坐标相对于游戏窗口,与窗口在屏幕的位置无关\n- **模板自动缩放**:根据当前窗口高度与截图参考高度自动计算缩放比,同一套模板适配不同窗口尺寸\n- **技能识别**:在左半边屏幕中识别技能图标所在槽位后点击,无需固定坐标\n- **全键盘操作**:换宠(3)、聚能(X)、逃跑(ESC)均通过键盘模拟,无位置依赖\n\n### 使用步骤\n\n**1. 安装依赖**\n\n```bash\npip install loguru pywin32 opencv-python\n```\n\n**2. 准备截图模板**(在对应游戏窗口尺寸下截图)\n\n| 文件路径 | 内容 |\n|---------|------|\n| `assets/templates/咔咔鸟.png` | 咔咔鸟战斗头像(左上角头像区域) |\n| `assets/templates/skills/暴风眼.png` | 暴风眼技能卡图标 |\n| `assets/templates/skills/追打.png` | 追打技能卡图标 |\n| `assets/templates/skills/音波弹.png` | 音波弹技能卡图标 |\n| `assets/templates/skills/聚盐.png` | 聚盐技能卡图标 |\n| `assets/templates/pvp/switch_panel_heart.png` | 换宠面板左下角心形图标(不含数字) |\n\n**3. 设置参考高度**\n\n打开任意一张截图,在画图工具中查看图片高度,填入 `pvp/config.py`:\n\n```python\nTEMPLATE_REFERENCE_HEIGHT = 736 # 截图时的游戏窗口高度(像素)\n```\n\n**4. 启动**\n\n```bash\npython battle.py # 选择菜单 6:PVP 自动战斗\n```\n\n启动后脚本进入等待状态,在游戏内手动点击「开始挑战」,脚本检测到技能出现后自动接管。\n\n### 添加新脚本\n\n新增其他战斗脚本只需:\n\n1. 在 `pvp/config.py` 中修改 `OPEN_SEQUENCE`、`MAIN_SKILLS` 和对应模板路径\n2. 截取新技能图标放入 `assets/templates/skills/`\n\n---\n\n## 模拟器精度说明\n\n**本模拟器力求对五支预设队伍实现接近 100% 的原游戏战斗还原度。** \n对于自定义队伍,精度取决于所用精灵的特性是否已实现。\n\n| 项目 | 实现情况 | 说明 |\n|------|----------|------|\n| 六维属性 | ✅ 已实现 | 种族值 + 个体值规则 + 性格修正公式计算 |\n| 双属性精灵 | ✅ 已实现 | 221 只双属精灵全覆盖;双弱=300%(非400%),双抗=25% |\n| 属性克制表 | ✅ 已对齐 | 采用 roco-world 官方数据,无免疫(最低0.5x),18 种属性 |\n| 性格系统 | ✅ 已实现 | 25 种命名性格(胆小/开朗等),±10%,仅作用于 5 个战斗属性 |\n| 胜利条件 | ✅ 已实现 | 4 格生命制:己方精灵倒下 -1 格,归0判负 |\n| 技能数据 | ✅ 已对齐 | 488 个技能,与 roco-world 一致;耗能/威力 0 差异 |\n| 技能效果 | ⚠️ 部分实现 | 通过正则解析技能描述,常见效果已覆盖;少数复杂技能效果退化 |\n| 异常状态 | ✅ 已实现 | 烧伤 / 中毒 / 冻结 / 寄生,规则见下方机制表 |\n| 应对机制 | ✅ 已实现 | 攻击/防御/状态三类应对的减伤、反弹、威力倍率 |\n| 天气系统 | ✅ 已实现 | 雪天 / 沙暴 / 雨天,持续 8 回合 |\n| **印记系统** | ✅ **已实现** | 12 种正负印记,详见「[印记系统](#印记系统)」章节 |\n| **特性系统** | ✅ **部分实现** | 已实现 39 种特性(覆盖五支预设队伍 + 多支社区常用阵容);详见「[特性系统](#特性系统)」|\n| 血脉系统 | ❌ 未实现 | 详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 首领化 | ❌ 未实现 | 详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 愿力冲击 | ❌ 未实现 | 详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 个性(被动) | ❌ 未实现 | 仅实现性格(Nature);详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 对战策略 | ✅ MCTS AI | 蒙特卡洛树搜索,支持经验积累和 YAML 策略配置 |\n\n---\n\n## 印记系统\n\n印记是队伍级别的持续效果,换人不消失。每支队伍同时最多存在 **1 种正面印记 + 1 种负面印记**。\n\n- **相同类别的新印记直接顶替旧印记**(异种覆盖)\n- **相同种类的印记则叠加层数**\n- 只有清除类技能或被顶替才会消失\n\n### 正面印记(POSITIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 湿润印记 | 全技能能耗 -1 |\n| 龙噬印记 | 使用 3 能耗技能时,自身双攻 +30% |\n| 蓄势印记 | 攻击技能威力 +30%,能耗 +1 |\n| 风起印记 | 本回合先手时,技能威力 +20% |\n| 蓄电印记 | 攻击技能威力平坦 +10 |\n| 光合印记 | 回合结束获得 1 能量 |\n| 攻击印记 | 全技能威力 +10% |\n\n### 负面印记(NEGATIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 减速印记 | 速度 -10 |\n| 降灵印记 | 入场时失去 1 能量 |\n| 星陨印记 | 受到非幻系攻击时,消耗全部层数造成等量幻系反击伤害 |\n| 中毒印记 | 回合结束扣 3% HP |\n| 棘刺印记 | 入场时失去 6% HP |\n\n---\n\n## 特性系统\n\n当前已实现 **39 种特性**,覆盖五支预设队伍(毒队、翼王队、狼王队、平衡狼王队、沙暴武队)以及多支社区常用阵容。下表仅列出特性名称与代表持有精灵,**具体效果实现请参见 `sim/ability_engine.py` 源码**。\n\n| 特性 | 代表持有精灵 |\n|------|------------|\n| 溶解扩散 | 千棘盔 |\n| 蚀刻 | 裘卡 |\n| 扩散侵蚀 | 琉璃水母 |\n| 下黑手 | 影狸 |\n| 向心力 | 声波缇塔 |\n| 壮胆 | 巨噬针鼹 |\n| 翼轴 | 帕帕斯卡 |\n| 悲悯 | 恶魔狼 |\n| 渗透 | 棋绮后 |\n| 身经百练 | 海豹船长 |\n| 洁癖 | 翠顶夫人 |\n| 飓风 | 圣羽翼王 |\n| 煤渣草 | 燃薪虫 |\n| 变形活画 | 画间沉铁兽 |\n| 目空 | 白金独角兽 |\n| 绝对秩序 | 秩序鱿墨 |\n| 暴食 | 翼龙 |\n| 虚假宝箱 | 迷迷箱怪 |\n| 专注力 | 音速犬 |\n| 魔法增效 | 黑猫巫师 |\n| 诈死 | 卡瓦重 |\n| 嫁祸 | 朔夜伊芙 |\n| 特殊清洁场景 | 食尘短绒 |\n| 星地善良 | 小皮球 |\n| 慢热型 | 瞌睡王 |\n| 不朽 | 寂灭骨龙 |\n| 野性感官 | 针叶巡林 |\n| 冰钻 | 冰钻布鲁斯 |\n| 助燃 | 火神 |\n| 灵魂灼伤 | 尖嘴狐仙 |\n| 氧循环 | 叶绿魔力猫 |\n| 浸润 | 水灵 |\n| 月牙雪糕 | 月牙雪熊 |\n| 哨兵 | 绒光优优 |\n| 陨落 | 落陨星兔 |\n| 捉迷藏 | 雪影娃娃 |\n| 泛音列 | 圆号鱼 |\n| 对流 | 利灯鱼 |\n| 吸积盘 | 怖哭菇 |\n\n> **注意:** 上述特性的实现细节大多来自对游戏视频/截图的观察分析,作者本人不擅长 PVP,部分触发时机、数值精度可能与实际游戏存在出入。如有发现偏差欢迎在 Issues 中指出。\n\n---\n\n## 未实现的游戏机制\n\n下列游戏机制目前**尚未实现**,是后续优先补完的方向。带有这些机制的精灵在模拟器内仅按基础规则参战,不会触发对应被动效果。\n\n| 机制 | 状态 | 说明 |\n|------|------|------|\n| 个性(被动) | ❌ 未实现 | 当前仅实现「性格(Nature)」(25 种 ±10% 属性修正)。游戏内影响战斗的「个性」被动(特性之外的第二层被动)尚缺失。 |\n| 血脉系统 | ❌ 未实现 | 部分精灵的血脉强化 / 血脉觉醒效果未接入战斗流程,模拟器按未觉醒状态计算。 |\n| 首领化 | ❌ 未实现 | 首领化精灵的属性放大、专属机制未实现。 |\n| 愿力冲击 | ❌ 未实现 | 愿力冲击的机制未实现。 |\n\n### 🙋 诚邀有 PVP 经验的玩家参与贡献\n\n如果你熟悉上述任意机制的具体效果,欢迎通过 Issues 或 PR 提供以下信息:\n\n- 机制 / 个性 / 血脉名称 + 持有精灵名\n- 触发条件(什么时候触发)\n- 效果描述(具体数值)\n- 参考依据(对战截图 / 视频时间戳)\n\n作者本人对 PVP 了解有限,很多机制都是通过观看视频脑测分析,难以保证准确性。社区贡献将极大地提升模拟器还原度。\n\n---\n\n## 爬虫\n\n### 可选参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔下限(秒),实际为 `delay ~ delay+1.5` 随机值 | 1.5 |\n| `--output path` | 输出 JSON 的路径 | `data/sprites.json` |\n| `--force` | 强制重爬所有精灵,并重新下载所有图片(忽略已有缓存) | — |\n\n默认情况下,爬虫会自动跳过本地 `sprites.json` 中已存在的精灵,只爬取新增内容。使用 `--force` 可强制全量重爬。\n\n### 输出文件\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整精灵数据,嵌套 JSON(含技能等级、特性) |\n| `data/sprites.csv` | 扁平化 CSV,可用 Excel / pandas 打开 |\n| `data/skills.csv` | 全技能去重列表(列名同 `skills_all.csv`) |\n| `data/urls.csv` | 爬取到的图片 URL 及本地路径,边爬边更新 |\n| `data/images/` | 下载的图片,按类型分子目录(sprites/skills/attributes/abilities/matchup) |\n| `data/sprites.backup.json` | 每次爬取前自动备份的上一版 |\n\n### 爬虫数据与战斗模拟器的同步关系\n\n| 数据文件 | 爬虫是否更新 | 说明 |\n|----------|-------------|------|\n| `data/sprites.json` | ✅ 每次爬取自动更新 | 精灵属性、可学技能列表 |\n| `data/skills_all.csv` | ❌ 静态文件,爬虫不触碰 | 技能的威力 / 能耗;来自 NRC_SIM 手工维护 |\n\n**当前数据状态:**\n- `skills_all.csv` 共收录 **488 个技能**,覆盖 roco-world 全部 487 个已知技能\n- 耗能、威力数值与 roco-world 完全一致,0 个差异\n\n---\n\n## 图鉴查看器\n\n```bash\npython viewer.py\n```\n\n终端显示类手机图鉴界面,支持翻页(`←` / `→`)、搜索(`/`)、退出(`q`)。\n\n---\n\n## 战斗模拟器\n\n```bash\npython battle.py\n```\n\n### 主菜单\n\n```\n========================================================\n 洛克王国战斗模拟器\n========================================================\n 当前队伍列表(N 支):\n 1. [预设] 预设毒队\n 2. [预设] 预设翼王队\n ...\n========================================================\n 1. 开始对战 (AI/AI、人/AI、人对人、LLM/AI 等模式)\n 2. 新建队伍 (交互组队并保存)\n 3. 管理队伍 (查看 / 删除 / 重命名 / 编辑)\n 4. 批量模拟 (选两支队伍跑 N 场,支持并发加速)\n 5. 导入队伍 (图片识别 / BWIKI 玩家配队)\n 6. PVP 自动挑战 (咔咔鸟脚本,控制游戏客户端)\n 7. LLM 辅助 (AI 组队 / 生成策略 / 经验文档 / 战斗复盘)\n 0. 返回\n========================================================\n```\n\n> **LLM 战斗复盘**位于菜单 7→4:选择一支队伍后输入 N(≤100),LLM 会基于\n> MariaDB 中的 `battle_log_records` 表对该队最近 N 场做胜率诊断、模式弱点\n> 识别和改阵建议,输出 4 节结构化报告。\n\n### 开始对战\n\n从名册选 A、B 两队,MCTS AI 操控并实时输出日志:\n\n```\n────────────────────────────────────────── 回合 3\n 预设毒队: 裘卡 [##########] 302/302 能量: 8\n 翼王队: 声波缇塔 [####......] 149/334 能量: 7 毒2\n[A] 裘卡 使用 崩拳(物攻 武系 威力60)\n → 对 声波缇塔 造成 185 点伤害 [克制!] (HP: 334→149/334)\n```\n\n### 批量模拟\n\n```\n 批量模拟结果(100 场)\n 预设毒队 胜: 83 场 (83.0%)\n 预设翼王队 胜: 15 场 (15.0%)\n 平局: 2 场 ( 2.0%)\n 平均回合数: 97.6\n 总耗时: 0.31s (3.1ms/场)\n```\n\n### 从图片导入队伍\n\n识别游戏内标准组队分享截图,自动提取精灵名和技能,存入名册。\n\n将截图放入 `import_images/` 目录后,选择识别方式:\n\n| 方式 | 精度 | 安装 |\n|------|------|------|\n| Claude Vision API | ★★★★★ | `pip install anthropic` + 配置 `ANTHROPIC_API_KEY` |\n| rapidocr(本地) | ★★★☆☆ | `pip install rapidocr-onnxruntime` |\n| easyocr(本地) | ★★★★☆ | `pip install easyocr`(需 PyTorch) |\n\n---\n\n## 战斗引擎实现机制\n\n| 机制 | 规则 |\n|------|------|\n| **伤害公式** | `(攻/防) × 0.9 × 技能威力 × 能力等级 × 本系加成(×1.5) × 克制倍率 × 天气加成` |\n| **能力等级** | `(1 + 攻击提升 + 敌方防御降低) / (1 + 攻击降低 + 敌方防御提升)` |\n| **属性克制** | 单弱/单抗=2x/0.5x;双弱=3x(非400%);双抗=0.25x;无免疫 |\n| **性格修正** | 25 种命名性格,±10%,仅作用于物攻/物防/魔攻/魔防/速度(HP不受影响)|\n| **胜利条件** | 4 格生命制:击倒对方精灵 -1格,一方生命格归0则判负 |\n| **烧伤** | 每回合 `-2% × 层数` HP,层数减半衰减,归零消失 |\n| **中毒** | 每回合 `-3% × 层数` HP,层数不衰减 |\n| **冻结** | 回合结束时若 HP < `maxHP × 层数/12` 则死亡 |\n| **寄生** | 被寄生者每回合 -8% HP,寄生者在场时回复等量 |\n| **应对** | 攻击 vs 防御/状态、防御 vs 状态 各触发对应额外效果 |\n| **天气** | 雪天:全场 +2 冻结/回合;沙暴:地系技能能耗减半;雨天:水系威力 +50% |\n| **换人** | 主动换人 / 精灵倒下后自动切换到首位存活精灵 |\n| **能量** | 汇合聚能 +5,技能各有消耗,不足时强制聚能 |\n| **印记** | 队伍级正/负印记各 1 槽,换人不消失;12 种印记各有回合效果或触发效果 |\n| **先手** | `有效速度 = 基础速度 × (1 + 先手修正) - 减速印记惩罚` |\n\n---\n\n## 项目结构\n\n```\nrocom-data/\n├── rocom_scraper.py 爬虫主程序\n├── lineup_scraper.py BWIKI 玩家配队抓取\n├── viewer.py 终端图鉴查看器\n├── battle.py 战斗模拟器主入口\n├── train.py MCTS AI 批量训练\n├── db_manage.py 数据库管理 CLI\n├── run.bat Windows 一键启动菜单\n├── requirements.txt 依赖清单\n│\n├── assets/\n│ ├── logo.png 项目 Logo\n│ └── templates/ PVP 模板图片(技能 / 头像 / 面板)\n│\n├── data/\n│ ├── sprites.json 精灵完整数据(爬虫输出)\n│ ├── sprites.csv 精灵扁平化数据\n│ ├── skills_all.csv 技能库(含威力数值)\n│ ├── teams.json 队伍名册(自动生成)\n│ ├── lineups.json BWIKI 玩家配队\n│ ├── llm_config.yaml LLM 端点/模型/API key 配置\n│ ├── llm_experience/ LLM 战后经验文档(每队一份)\n│ ├── experience/ MCTS 经验数据库(每队一个 JSON)\n│ └── strategies/ YAML 策略配置文件目录\n│ └── _template.yaml 策略文件模板\n│\n├── import_images/ 队伍分享截图放置目录\n│\n├── tests/ pytest 单元测试\n│\n└── sim/ 战斗引擎与智能体\n ├── battle_engine.py 回合主循环\n ├── battle_state.py 战斗状态容器(含印记槽)\n ├── damage_calc.py 伤害公式\n ├── counter_system.py 应对系统\n ├── ability_engine.py 特性系统(已实现 39 种特性)\n ├── mark_system.py 印记系统(12 种印记)\n ├── mcts.py 蒙特卡洛树搜索核心\n ├── mcts_agent.py MCTS 智能体封装\n ├── llm_agent.py LLM 智能体(OpenAI 兼容协议)\n ├── llm_team_generator.py LLM 组队 / 策略生成\n ├── llm_review.py LLM 聚合复盘(≤100 场)\n ├── experience_db.py 经验数据库(双后端:JSON / MariaDB)\n ├── data_store.py MariaDB 数据访问层(4 张表)\n ├── battle_log_capture.py 战斗日志捕获(阵容 / 残局序列化)\n ├── batch_concurrent.py 多进程批量训练(实时落库)\n ├── lineups_loader.py BWIKI 配队加载与转换\n ├── strategy.py YAML 策略解析与权重应用\n ├── pokemon.py 精灵模型(含双属性、性格)\n ├── skill.py 技能数据模型\n ├── types.py 属性枚举 + 克制表\n ├── pokemon_db.py 精灵数据库\n ├── skill_db.py 技能数据库\n ├── team_builder.py 精灵构建\n ├── team_builder_interactive.py 交互式组队\n ├── team_roster.py 队伍名册持久化\n ├── team_image_parser.py 图片识别(Claude Vision API)\n └── team_image_parser_ocr.py 图片识别(本地 OCR)\n```\n\n---\n\n## 免责声明\n\n- 本项目仅供个人学习使用,请勿高频请求 BWIKI,以免对服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- **战斗模拟结果仅供参考**,与游戏内真实对局存在差异,请以游戏内实际表现为准\n- 使用本项目产生的一切后果由使用者自行承担\n\n---\n\n## 贡献\n\n欢迎提 PR 或 Issue:\n- 修复战斗机制偏差\n- 补充精灵个性效果\n- 完善技能描述解析\n- 参与 v2.0 游戏画面识别功能开发\n\n---\n\n## 致谢\n\n本项目由 [AofeiLi-code](https://github.com/AofeiLi-code) 负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n\n战斗引擎(`sim/` 目录)基于 [NRC_SIM](https://github.com/AofeiLi-code/NRC_SIM),遵循 MIT License。\n\n闪耀大赛自动挑战功能(`pvp/` 目录)基于[roco-kingdom-world-sript](https://github.com/JhonTitor6/roco-kingdom-world-script.git), 遵循 MIT License.\n"}, "dbd3941777725b67152bd912d2403b2b51374d1f": {"t": 1785764674.946313, "n": 16755, "h": "95eb8324018bea69", "c": "<p align=\"center\">\n <img src=\"assets/logo.png\" alt=\"洛克王国对战模拟器 · Roco Data\" width=\"280\" />\n</p>\n\n<h1 align=\"center\">洛克王国对战模拟器 · Roco Data</h1>\n\n<p align=\"center\">\n <em>v1.3 — 数据爬虫 · 战斗引擎 · MCTS / LLM 对战智能体 · PVP 自动化 · MariaDB 战斗日志 · LLM 复盘</em>\n</p>\n\n---\n\n爬取 BWIKI 精灵图鉴 + 玩家配队,附带终端图鉴查看器、自由组队战斗模拟器,以及基于 **蒙特卡洛树搜索(MCTS)** 的 AI 智能体,支持 YAML 策略配置、LLM 智能体对战、批量训练并发加速。v1.1 新增 **游戏客户端自动化模块** 直接驱动游戏进行 PVP 自动战斗;v1.3 接入 **MariaDB 战斗日志** 与 **LLM 聚合复盘**,可对历史 N 场对战做模式分析与改阵建议。\n\n> ⚠️ **战斗模拟器仅供参考,结果不代表真实游戏表现。**\n> 详见「[模拟器精度说明](#模拟器精度说明)」章节。\n\n> 🚧 **功能完成度提示:**\n> - **PVP 自动挑战(v1.1)** 仍处于 **开发阶段**,实际游戏环境下尚未稳定跑通,目前仅提供模板匹配 + 操作框架,**不保证可用**。\n> - **LLM 辅助功能(智能体 / 组队 / 策略生成 / 聚合复盘)** 属于 **玩具阶段**,输出仅供参考娱乐,**不应作为真实对战决策依据**。模型对洛克王国游戏机制理解有限,分析结论可能与实际相差较大。\n\n---\n\n## 功能一览\n\n| 功能 | 说明 |\n|------|------|\n| 🕷️ 全量爬取 | 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV |\n| 🔄 检查更新 | 对比本地与 wiki 的差异,仅增量爬取新增精灵 |\n| 📚 BWIKI 阵容 | 抓取 BWIKI 玩家配队(PVP/PVE),可一键导入名册 |\n| 📖 图鉴查看器 | 在终端按页浏览每只精灵的完整信息,支持搜索 |\n| ⚔️ 战斗模拟器 | 自由组队 + 队伍名册,完整战斗机制模拟 |\n| 🤖 MCTS AI | 蒙特卡洛树搜索智能体,支持积累对局经验,YAML 策略配置 |\n| 🧠 LLM 智能体 | OpenAI 兼容协议(DeepSeek 等),可代替 MCTS 做决策与组队 |\n| 📋 队伍名册 | 队伍持久化存储,内置预设 + 用户自定义,随时调取并编辑 |\n| 🖼️ 图片导入 | 识别游戏内队伍分享截图,自动解析精灵和技能并存入名册 |\n| 🎮 PVP 自动挑战 🚧 | 驱动游戏客户端自动战斗(v1.1,**开发中,未稳定跑通**) |\n| 🗄️ MariaDB 后端 | 经验库 / 对战记录 / 详细战斗日志可写入 MariaDB(v1.3) |\n| 🔍 LLM 聚合复盘 🧪 | 对一支队伍最近 ≤100 场对战做胜率诊断 + 改阵建议(v1.3,**玩具阶段,仅供参考**) |\n\n---\n\n## 环境要求\n\n- Python 3.10+\n\n```bash\npip install -r requirements.txt\n```\n\n### 依赖说明\n\n| 库 | 用途 | 是否必须 |\n|----|------|----------|\n| `requests` | 爬虫网络请求 | ✅ |\n| `beautifulsoup4` | 爬虫 HTML 解析 | ✅ |\n| `rich` | 图鉴查看器 UI | ✅ |\n| `pyyaml` | YAML 策略配置文件解析 | ✅ |\n| `loguru` | PVP 自动战斗日志 | PVP 功能必须 |\n| `pywin32` | Windows 窗口操作(截图/按键/鼠标) | PVP 功能必须 |\n| `opencv-python` | 模板图像匹配 | PVP 功能必须 |\n| `anthropic` | 图片导入 — API 识别方式 | 可选 |\n| `rapidocr-onnxruntime` | 图片导入 — 本地 OCR(轻量,约 50MB) | 可选 |\n| `easyocr` | 图片导入 — 本地 OCR(高精度,依赖 PyTorch) | 可选 |\n\n图片导入功能至少安装 `anthropic` 或 `rapidocr-onnxruntime` 其中一个。\n\n---\n\n## 快速启动\n\n### 方式一:双击 run.bat(Windows 推荐)\n\n```\n============================================\n Rocom Helper v1.3\n============================================\n 1. Scrape sprites (rocom wiki)\n 2. Check for sprite updates\n 3. Scrape BWIKI lineups (player teams)\n 4. Browse sprites (viewer)\n 5. Battle simulator (teams / import / PVP / LLM review)\n 6. Train MCTS (self-play loop)\n 7. Manage experience DB\n 0. Exit\n============================================\n```\n\n### 方式二:命令行\n\n```bash\npython rocom_scraper.py # 全量爬取(自动跳过已有精灵)\npython rocom_scraper.py --force # 强制重爬所有精灵\npython viewer.py # 图鉴查看器\npython battle.py # 战斗模拟器(含 AI 对战)\npython train.py # 批量训练 MCTS AI\n```\n\n---\n\n## MCTS AI 对战引擎\n\n### AI 是如何工作的\n\n本项目的 AI 对战基于 **蒙特卡洛树搜索(MCTS)**,而非随机操作。每一回合,AI 会:\n\n1. **展开模拟树**:从当前状态克隆多个分支,对每个候选行动运行前瞻模拟(默认 100 次迭代)\n2. **评估得分**:根据双方生命格差值、当前 HP 比例、场上状态估算该分支的\"胜利期望\"\n3. **选择最优行动**:UCB1 公式平衡探索(试新动作)与利用(选已知好动作)\n4. **积累经验**:每局结束后,将胜负结果回溯到历史决策树,更新各状态下动作的胜率权重\n5. **经验持久化**:对局经验保存在 `data/experience/<队伍名>.json`,每次对战自动加载,越打越强\n\n> MCTS 本身不具备\"学习\"权重的神经网络,而是通过**统计每个局面下每种行动的历史胜率**来做出判断。经验越多,决策越稳定。这是一种\"无模型、无神经网络\"的纯树搜索方案,对战效果接近人类中等水平。\n\n### YAML 策略配置\n\n通过编写 YAML 文件,可以向 AI 注入人类的战斗直觉,大幅提升其在特定队伍上的表现。\n\n**文件位置:** `data/strategies/<队伍名>.yaml`(参考模板 `data/strategies/_template.yaml`)\n\n```yaml\n# 示例:为毒队配置策略\nteam: 预设毒队\nstarter: 影狸 # 首发精灵\n\nskill_priority:\n 影狸: [感染病, 毒液渗透, 嘲弄, 恶意逃离] # 优先传毒,再逃脱\n 裘卡: [毒囊, 崩拳, 阻断, 防御]\n\nswitch_rules:\n - when: type_disadvantaged # 属性被克制时\n action: switch\n to: type_counter # 换克制对方的精灵\n\n - when: hp_pct < 25\n action: switch\n to: highest_hp\n\ngeneral:\n prefer_gather_below_energy: 3\n prefer_attack_when_type_advantage: true\n```\n\n策略权重与 MCTS 经验权重相乘,策略推荐的行动权重 ×3.0,排斥的行动权重 ×0.2,AI 会在策略偏好的方向上更积极地探索。\n\n**可用条件(when):**\n\n| 条件 | 说明 |\n|------|------|\n| `hp_pct < N` | 己方当前精灵 HP 低于 N% |\n| `energy < N` | 己方能量低于 N |\n| `type_disadvantaged` | 己方精灵属性被克制 |\n| `type_advantaged` | 己方精灵有属性克制对手 |\n| `enemy_hp_pct < N` | 对手 HP 低于 N% |\n| `always` | 无条件(默认规则) |\n\n---\n\n## LLM 智能体与聚合复盘(v1.3,🧪 玩具阶段)\n\n> ⚠️ **本节所有 LLM 相关功能均为玩具阶段实验性产物。** 模型对洛克王国具体机制(特性触发、印记联动、能量节奏)理解有限,组队建议和复盘结论可能存在事实性错误,**仅供娱乐与参考,不构成真实对战决策建议**。\n\n除 MCTS 之外,本项目还支持 **OpenAI 兼容协议** 的 LLM 智能体,可直接代替 MCTS 做决策、组队和战斗复盘。\n\n### 配置 LLM\n\n复制 `data/llm_config.example.yaml` 为 `data/llm_config.yaml` 并填入:\n\n```yaml\nendpoint: https://api.deepseek.com/v1 # 任意 OpenAI 兼容端点\nmodel: deepseek-chat\napi_key: <your-api-key>\ntemperature: 0.3\ntimeout: 120\n```\n\n支持的端点举例:DeepSeek、Moonshot、本地 vLLM/Ollama 反代等。\n\n### LLM 能做什么\n\n| 入口 | 功能 |\n|------|------|\n| 战斗模拟器 → 1(开始对战) | 选模式 4/5 让 LLM 控制 A 队,对战 MCTS 或人类 |\n| 战斗模拟器 → 7 → 1 | LLM 根据精灵库与历史经验生成新阵容 |\n| 战斗模拟器 → 7 → 2 | LLM 为已有队伍生成 YAML 策略文件 |\n| 战斗模拟器 → 7 → 3 | 查看 LLM 战后写入的经验文档 |\n| 战斗模拟器 → 7 → 4 | **聚合复盘**:分析最近 N 场(≤100),输出胜率诊断 + 改阵建议 |\n\n### 聚合复盘的数据来源:MariaDB\n\n启用数据库后,每场批量训练对战会**实时**把详细日志写入 `battle_log_records` 表,包含:\n\n- 双方完整阵容(精灵 / 特性 / 性格 / 技能威力 · 耗能)\n- 引擎逐回合日志全文\n- 双方最终残局(HP / 能量 / 异常状态 / 剩余生命格)\n\nLLM 复盘会按队伍维度聚合这些记录,统计胜率、对手分布、败局阵亡频次,并抽样若干失败战例的日志摘录交给 LLM 做模式分析,输出:\n\n1. **整体胜率诊断**(哪些对手是大坑、哪些是优势局)\n2. **模式化弱点**(重复出现的失败模式)\n3. **单只精灵评估**(核心 vs 负担)\n4. **改阵建议**(具体到精灵 / 技能 / 特性 / 性格的替换方案)\n\n#### 复盘输出示例\n\n下面是对一支「最新恶魔狼王魔爆木桶队」做聚合复盘的实际输出片段(仅作展示,结论本身仅供参考):\n\n<p align=\"center\">\n <img src=\"assets/llm_review_example.png\" alt=\"LLM 聚合复盘输出示例\" width=\"720\" />\n</p>\n\n> 示例仅展示输出格式与可读性,**LLM 给出的精灵评估、改阵建议未必符合当前游戏环境**,请结合实际经验判断。\n\n### 启用 MariaDB 后端\n\n在项目根目录创建 `.env`:\n\n```bash\nDB_ENABLED=true\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_USER=root\nDB_PASSWORD=your-password\nDB_NAME=rocom_data\n```\n\n首次启动会自动 `CREATE DATABASE` + `CREATE TABLE`,无需手工建表。可用 `python db_manage.py init` 显式初始化,`python db_manage.py migrate` 把已有 JSON 经验迁移到数据库。\n\n数据库共 4 张表:\n\n| 表 | 内容 |\n|----|------|\n| `experience_records` | MCTS(state_key, action_key)→(wins, total)聚合统计 |\n| `battle_records` | 对战元数据(双方队名、胜负、回合、耗时、MCTS 迭代数) |\n| `pokemon_records` | 精灵字典缓存(可选) |\n| `battle_log_records` | 详细战斗日志:阵容 JSON / 引擎日志 / 最终残局 JSON |\n\n不启用 MariaDB 时所有数据回退到 JSON 文件,功能不受影响(仅 LLM 复盘需要数据库)。\n\n---\n\n### 未来目标:AI 辅助决策看板\n\nv2.0 的目标是将自动战斗与 MCTS AI 打通,实现真正的 AI 驱动对战:\n\n- 通过截图识别当前场上精灵、双方 HP/能量等战场信息\n- 将识别状态转换为引擎内战斗状态,由 MCTS AI 给出推荐行动\n- 实现对战全程\"AI 辅助看板\",或直接执行 AI 决策\n\n> v1.1 已完成游戏画面识别基础设施(`game_control/` 模块),PVP 自动战斗为此方向的第一个里程碑。\n\n---\n\n## PVP 自动挑战(v1.1,🚧 开发中)\n\n> ⚠️ **当前为开发阶段功能,尚未实际跑通完整 PVP 流程。** 已实现窗口截图、模板匹配、键鼠模拟等基础设施,但在真实游戏环境下仍存在识别误判、节奏错位、换宠失败等问题,**请勿用于真实排位**。仓库内代码主要作为后续开发的脚手架与参考。\n\n直接驱动游戏客户端,通过 **Windows 后台截图 + OpenCV 模板匹配 + 键盘/鼠标模拟** 实现自动挑战。\n\n### 当前支持脚本:咔咔鸟 + 五随机\n\n| 阶段 | 行为 |\n|------|------|\n| 等待 | 脚本启动后等待进入战斗,检测到技能出现自动开始 |\n| 开局序列 | 按顺序各释放一次:暴风眼 → 追打 → 音波弹 → 聚盐 |\n| 主循环 | 优先音波弹,音波弹变暗改用聚盐,超过 2 秒全黑则按 X 聚能 |\n| 死亡处理 | 检测到换宠面板(左下角心形图标)→ 按 3 换宠 → ESC 逃跑 |\n\n### 技术特性\n\n- **后台截图**:使用 `PrintWindow` API,游戏可在后台运行,不需要前台焦点\n- **窗口相对坐标**:所有坐标相对于游戏窗口,与窗口在屏幕的位置无关\n- **模板自动缩放**:根据当前窗口高度与截图参考高度自动计算缩放比,同一套模板适配不同窗口尺寸\n- **技能识别**:在左半边屏幕中识别技能图标所在槽位后点击,无需固定坐标\n- **全键盘操作**:换宠(3)、聚能(X)、逃跑(ESC)均通过键盘模拟,无位置依赖\n\n### 使用步骤\n\n**1. 安装依赖**\n\n```bash\npip install loguru pywin32 opencv-python\n```\n\n**2. 准备截图模板**(在对应游戏窗口尺寸下截图)\n\n| 文件路径 | 内容 |\n|---------|------|\n| `assets/templates/咔咔鸟.png` | 咔咔鸟战斗头像(左上角头像区域) |\n| `assets/templates/skills/暴风眼.png` | 暴风眼技能卡图标 |\n| `assets/templates/skills/追打.png` | 追打技能卡图标 |\n| `assets/templates/skills/音波弹.png` | 音波弹技能卡图标 |\n| `assets/templates/skills/聚盐.png` | 聚盐技能卡图标 |\n| `assets/templates/pvp/switch_panel_heart.png` | 换宠面板左下角心形图标(不含数字) |\n\n**3. 设置参考高度**\n\n打开任意一张截图,在画图工具中查看图片高度,填入 `pvp/config.py`:\n\n```python\nTEMPLATE_REFERENCE_HEIGHT = 736 # 截图时的游戏窗口高度(像素)\n```\n\n**4. 启动**\n\n```bash\npython battle.py # 选择菜单 6:PVP 自动战斗\n```\n\n启动后脚本进入等待状态,在游戏内手动点击「开始挑战」,脚本检测到技能出现后自动接管。\n\n### 添加新脚本\n\n新增其他战斗脚本只需:\n\n1. 在 `pvp/config.py` 中修改 `OPEN_SEQUENCE`、`MAIN_SKILLS` 和对应模板路径\n2. 截取新技能图标放入 `assets/templates/skills/`\n\n---\n\n## 模拟器精度说明\n\n**本模拟器力求对五支预设队伍实现接近 100% 的原游戏战斗还原度。** \n对于自定义队伍,精度取决于所用精灵的特性是否已实现。\n\n| 项目 | 实现情况 | 说明 |\n|------|----------|------|\n| 六维属性 | ✅ 已实现 | 种族值 + 个体值规则 + 性格修正公式计算 |\n| 双属性精灵 | ✅ 已实现 | 221 只双属精灵全覆盖;双弱=300%(非400%),双抗=25% |\n| 属性克制表 | ✅ 已对齐 | 采用 roco-world 官方数据,无免疫(最低0.5x),18 种属性 |\n| 性格系统 | ✅ 已实现 | 25 种命名性格(胆小/开朗等),±10%,仅作用于 5 个战斗属性 |\n| 胜利条件 | ✅ 已实现 | 4 格生命制:己方精灵倒下 -1 格,归0判负 |\n| 技能数据 | ✅ 已对齐 | 488 个技能,与 roco-world 一致;耗能/威力 0 差异 |\n| 技能效果 | ⚠️ 部分实现 | 通过正则解析技能描述,常见效果已覆盖;少数复杂技能效果退化 |\n| 异常状态 | ✅ 已实现 | 烧伤 / 中毒 / 冻结 / 寄生,规则见下方机制表 |\n| 应对机制 | ✅ 已实现 | 攻击/防御/状态三类应对的减伤、反弹、威力倍率 |\n| 天气系统 | ✅ 已实现 | 雪天 / 沙暴 / 雨天,持续 8 回合 |\n| **印记系统** | ✅ **已实现** | 12 种正负印记,详见「[印记系统](#印记系统)」章节 |\n| **特性系统** | ✅ **部分实现** | 已实现 39 种特性(覆盖五支预设队伍 + 多支社区常用阵容);详见「[特性系统](#特性系统)」|\n| 血脉系统 | ❌ 未实现 | 详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 首领化 | ❌ 未实现 | 详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 愿力冲击 | ❌ 未实现 | 详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 个性(被动) | ❌ 未实现 | 仅实现性格(Nature);详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 对战策略 | ✅ MCTS AI | 蒙特卡洛树搜索,支持经验积累和 YAML 策略配置 |\n\n---\n\n## 印记系统\n\n印记是队伍级别的持续效果,换人不消失。每支队伍同时最多存在 **1 种正面印记 + 1 种负面印记**。\n\n- **相同类别的新印记直接顶替旧印记**(异种覆盖)\n- **相同种类的印记则叠加层数**\n- 只有清除类技能或被顶替才会消失\n\n### 正面印记(POSITIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 湿润印记 | 全技能能耗 -1 |\n| 龙噬印记 | 使用 3 能耗技能时,自身双攻 +30% |\n| 蓄势印记 | 攻击技能威力 +30%,能耗 +1 |\n| 风起印记 | 本回合先手时,技能威力 +20% |\n| 蓄电印记 | 攻击技能威力平坦 +10 |\n| 光合印记 | 回合结束获得 1 能量 |\n| 攻击印记 | 全技能威力 +10% |\n\n### 负面印记(NEGATIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 减速印记 | 速度 -10 |\n| 降灵印记 | 入场时失去 1 能量 |\n| 星陨印记 | 受到非幻系攻击时,消耗全部层数造成等量幻系反击伤害 |\n| 中毒印记 | 回合结束扣 3% HP |\n| 棘刺印记 | 入场时失去 6% HP |\n\n---\n\n## 特性系统\n\n当前已实现 **39 种特性**,覆盖五支预设队伍(毒队、翼王队、狼王队、平衡狼王队、沙暴武队)以及多支社区常用阵容。下表仅列出特性名称与代表持有精灵,**具体效果实现请参见 `sim/ability_engine.py` 源码**。\n\n| 特性 | 代表持有精灵 |\n|------|------------|\n| 溶解扩散 | 千棘盔 |\n| 蚀刻 | 裘卡 |\n| 扩散侵蚀 | 琉璃水母 |\n| 下黑手 | 影狸 |\n| 向心力 | 声波缇塔 |\n| 壮胆 | 巨噬针鼹 |\n| 翼轴 | 帕帕斯卡 |\n| 悲悯 | 恶魔狼 |\n| 渗透 | 棋绮后 |\n| 身经百练 | 海豹船长 |\n| 洁癖 | 翠顶夫人 |\n| 飓风 | 圣羽翼王 |\n| 煤渣草 | 燃薪虫 |\n| 变形活画 | 画间沉铁兽 |\n| 目空 | 白金独角兽 |\n| 绝对秩序 | 秩序鱿墨 |\n| 暴食 | 翼龙 |\n| 虚假宝箱 | 迷迷箱怪 |\n| 专注力 | 音速犬 |\n| 魔法增效 | 黑猫巫师 |\n| 诈死 | 卡瓦重 |\n| 嫁祸 | 朔夜伊芙 |\n| 特殊清洁场景 | 食尘短绒 |\n| 星地善良 | 小皮球 |\n| 慢热型 | 瞌睡王 |\n| 不朽 | 寂灭骨龙 |\n| 野性感官 | 针叶巡林 |\n| 冰钻 | 冰钻布鲁斯 |\n| 助燃 | 火神 |\n| 灵魂灼伤 | 尖嘴狐仙 |\n| 氧循环 | 叶绿魔力猫 |\n| 浸润 | 水灵 |\n| 月牙雪糕 | 月牙雪熊 |\n| 哨兵 | 绒光优优 |\n| 陨落 | 落陨星兔 |\n| 捉迷藏 | 雪影娃娃 |\n| 泛音列 | 圆号鱼 |\n| 对流 | 利灯鱼 |\n| 吸积盘 | 怖哭菇 |\n\n> **注意:** 上述特性的实现细节大多来自对游戏视频/截图的观察分析,作者本人不擅长 PVP,部分触发时机、数值精度可能与实际游戏存在出入。如有发现偏差欢迎在 Issues 中指出。\n\n---\n\n## 未实现的游戏机制\n\n下列游戏机制目前**尚未实现**,是后续优先补完的方向。带有这些机制的精灵在模拟器内仅按基础规则参战,不会触发对应被动效果。\n\n| 机制 | 状态 | 说明 |\n|------|------|------|\n| 个性(被动) | ❌ 未实现 | 当前仅实现「性格(Nature)」(25 种 ±10% 属性修正)。游戏内影响战斗的「个性」被动(特性之外的第二层被动)尚缺失。 |\n| 血脉系统 | ❌ 未实现 | 部分精灵的血脉强化 / 血脉觉醒效果未接入战斗流程,模拟器按未觉醒状态计算。 |\n| 首领化 | ❌ 未实现 | 首领化精灵的属性放大、专属机制未实现。 |\n| 愿力冲击 | ❌ 未实现 | 愿力冲击的机制未实现。 |\n\n### 🙋 诚邀有 PVP 经验的玩家参与贡献\n\n如果你熟悉上述任意机制的具体效果,欢迎通过 Issues 或 PR 提供以下信息:\n\n- 机制 / 个性 / 血脉名称 + 持有精灵名\n- 触发条件(什么时候触发)\n- 效果描述(具体数值)\n- 参考依据(对战截图 / 视频时间戳)\n\n作者本人对 PVP 了解有限,很多机制都是通过观看视频脑测分析,难以保证准确性。社区贡献将极大地提升模拟器还原度。\n\n---\n\n## 爬虫\n\n### 可选参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔下限(秒),实际为 `delay ~ delay+1.5` 随机值 | 1.5 |\n| `--output path` | 输出 JSON 的路径 | `data/sprites.json` |\n| `--force` | 强制重爬所有精灵,并重新下载所有图片(忽略已有缓存) | — |\n\n默认情况下,爬虫会自动跳过本地 `sprites.json` 中已存在的精灵,只爬取新增内容。使用 `--force` 可强制全量重爬。\n\n### 输出文件\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整精灵数据,嵌套 JSON(含技能等级、特性) |\n| `data/sprites.csv` | 扁平化 CSV,可用 Excel / pandas 打开 |\n| `data/skills.csv` | 全技能去重列表(列名同 `skills_all.csv`) |\n| `data/urls.csv` | 爬取到的图片 URL 及本地路径,边爬边更新 |\n| `data/images/` | 下载的图片,按类型分子目录(sprites/skills/attributes/abilities/matchup) |\n| `data/sprites.backup.json` | 每次爬取前自动备份的上一版 |\n\n### 爬虫数据与战斗模拟器的同步关系\n\n| 数据文件 | 爬虫是否更新 | 说明 |\n|----------|-------------|------|\n| `data/sprites.json` | ✅ 每次爬取自动更新 | 精灵属性、可学技能列表 |\n| `data/skills_all.csv` | ❌ 静态文件,爬虫不触碰 | 技能的威力 / 能耗;来自 NRC_SIM 手工维护 |\n\n**当前数据状态:**\n- `skills_all.csv` 共收录 **488 个技能**,覆盖 roco-world 全部 487 个已知技能\n- 耗能、威力数值与 roco-world 完全一致,0 个差异\n\n---\n\n## 图鉴查看器\n\n```bash\npython viewer.py\n```\n\n终端显示类手机图鉴界面,支持翻页(`←` / `→`)、搜索(`/`)、退出(`q`)。\n\n---\n\n## 战斗模拟器\n\n```bash\npython battle.py\n```\n\n### 主菜单\n\n```\n========================================================\n 洛克王国战斗模拟器\n========================================================\n 当前队伍列表(N 支):\n 1. [预设] 预设毒队\n 2. [预设] 预设翼王队\n ...\n========================================================\n 1. 开始对战 (AI/AI、人/AI、人对人、LLM/AI 等模式)\n 2. 新建队伍 (交互组队并保存)\n 3. 管理队伍 (查看 / 删除 / 重命名 / 编辑)\n 4. 批量模拟 (选两支队伍跑 N 场,支持并发加速)\n 5. 导入队伍 (图片识别 / BWIKI 玩家配队)\n 6. PVP 自动挑战 (咔咔鸟脚本,控制游戏客户端)\n 7. LLM 辅助 (AI 组队 / 生成策略 / 经验文档 / 战斗复盘)\n 0. 返回\n========================================================\n```\n\n> **LLM 战斗复盘**位于菜单 7→4:选择一支队伍后输入 N(≤100),LLM 会基于\n> MariaDB 中的 `battle_log_records` 表对该队最近 N 场做胜率诊断、模式弱点\n> 识别和改阵建议,输出 4 节结构化报告。\n\n### 开始对战\n\n从名册选 A、B 两队,MCTS AI 操控并实时输出日志:\n\n```\n────────────────────────────────────────── 回合 3\n 预设毒队: 裘卡 [##########] 302/302 能量: 8\n 翼王队: 声波缇塔 [####......] 149/334 能量: 7 毒2\n[A] 裘卡 使用 崩拳(物攻 武系 威力60)\n → 对 声波缇塔 造成 185 点伤害 [克制!] (HP: 334→149/334)\n```\n\n### 批量模拟\n\n```\n 批量模拟结果(100 场)\n 预设毒队 胜: 83 场 (83.0%)\n 预设翼王队 胜: 15 场 (15.0%)\n 平局: 2 场 ( 2.0%)\n 平均回合数: 97.6\n 总耗时: 0.31s (3.1ms/场)\n```\n\n### 从图片导入队伍\n\n识别游戏内标准组队分享截图,自动提取精灵名和技能,存入名册。\n\n将截图放入 `import_images/` 目录后,选择识别方式:\n\n| 方式 | 精度 | 安装 |\n|------|------|------|\n| Claude Vision API | ★★★★★ | `pip install anthropic` + 配置 `ANTHROPIC_API_KEY` |\n| rapidocr(本地) | ★★★☆☆ | `pip install rapidocr-onnxruntime` |\n| easyocr(本地) | ★★★★☆ | `pip install easyocr`(需 PyTorch) |\n\n---\n\n## 战斗引擎实现机制\n\n| 机制 | 规则 |\n|------|------|\n| **伤害公式** | `(攻/防) × 0.9 × 技能威力 × 能力等级 × 本系加成(×1.5) × 克制倍率 × 天气加成` |\n| **能力等级** | `(1 + 攻击提升 + 敌方防御降低) / (1 + 攻击降低 + 敌方防御提升)` |\n| **属性克制** | 单弱/单抗=2x/0.5x;双弱=3x(非400%);双抗=0.25x;无免疫 |\n| **性格修正** | 25 种命名性格,±10%,仅作用于物攻/物防/魔攻/魔防/速度(HP不受影响)|\n| **胜利条件** | 4 格生命制:击倒对方精灵 -1格,一方生命格归0则判负 |\n| **烧伤** | 每回合 `-2% × 层数` HP,层数减半衰减,归零消失 |\n| **中毒** | 每回合 `-3% × 层数` HP,层数不衰减 |\n| **冻结** | 回合结束时若 HP < `maxHP × 层数/12` 则死亡 |\n| **寄生** | 被寄生者每回合 -8% HP,寄生者在场时回复等量 |\n| **应对** | 攻击 vs 防御/状态、防御 vs 状态 各触发对应额外效果 |\n| **天气** | 雪天:全场 +2 冻结/回合;沙暴:地系技能能耗减半;雨天:水系威力 +50% |\n| **换人** | 主动换人 / 精灵倒下后自动切换到首位存活精灵 |\n| **能量** | 汇合聚能 +5,技能各有消耗,不足时强制聚能 |\n| **印记** | 队伍级正/负印记各 1 槽,换人不消失;12 种印记各有回合效果或触发效果 |\n| **先手** | `有效速度 = 基础速度 × (1 + 先手修正) - 减速印记惩罚` |\n\n---\n\n## 项目结构\n\n```\nrocom-data/\n├── rocom_scraper.py 爬虫主程序\n├── lineup_scraper.py BWIKI 玩家配队抓取\n├── viewer.py 终端图鉴查看器\n├── battle.py 战斗模拟器主入口\n├── train.py MCTS AI 批量训练\n├── db_manage.py 数据库管理 CLI\n├── run.bat Windows 一键启动菜单\n├── requirements.txt 依赖清单\n│\n├── assets/\n│ ├── logo.png 项目 Logo\n│ └── templates/ PVP 模板图片(技能 / 头像 / 面板)\n│\n├── data/\n│ ├── sprites.json 精灵完整数据(爬虫输出)\n│ ├── sprites.csv 精灵扁平化数据\n│ ├── skills_all.csv 技能库(含威力数值)\n│ ├── teams.json 队伍名册(自动生成)\n│ ├── lineups.json BWIKI 玩家配队\n│ ├── llm_config.yaml LLM 端点/模型/API key 配置\n│ ├── llm_experience/ LLM 战后经验文档(每队一份)\n│ ├── experience/ MCTS 经验数据库(每队一个 JSON)\n│ └── strategies/ YAML 策略配置文件目录\n│ └── _template.yaml 策略文件模板\n│\n├── import_images/ 队伍分享截图放置目录\n│\n├── tests/ pytest 单元测试\n│\n└── sim/ 战斗引擎与智能体\n ├── battle_engine.py 回合主循环\n ├── battle_state.py 战斗状态容器(含印记槽)\n ├── damage_calc.py 伤害公式\n ├── counter_system.py 应对系统\n ├── ability_engine.py 特性系统(已实现 39 种特性)\n ├── mark_system.py 印记系统(12 种印记)\n ├── mcts.py 蒙特卡洛树搜索核心\n ├── mcts_agent.py MCTS 智能体封装\n ├── llm_agent.py LLM 智能体(OpenAI 兼容协议)\n ├── llm_team_generator.py LLM 组队 / 策略生成\n ├── llm_review.py LLM 聚合复盘(≤100 场)\n ├── experience_db.py 经验数据库(双后端:JSON / MariaDB)\n ├── data_store.py MariaDB 数据访问层(4 张表)\n ├── battle_log_capture.py 战斗日志捕获(阵容 / 残局序列化)\n ├── batch_concurrent.py 多进程批量训练(实时落库)\n ├── lineups_loader.py BWIKI 配队加载与转换\n ├── strategy.py YAML 策略解析与权重应用\n ├── pokemon.py 精灵模型(含双属性、性格)\n ├── skill.py 技能数据模型\n ├── types.py 属性枚举 + 克制表\n ├── pokemon_db.py 精灵数据库\n ├── skill_db.py 技能数据库\n ├── team_builder.py 精灵构建\n ├── team_builder_interactive.py 交互式组队\n ├── team_roster.py 队伍名册持久化\n ├── team_image_parser.py 图片识别(Claude Vision API)\n └── team_image_parser_ocr.py 图片识别(本地 OCR)\n```\n\n---\n\n## 免责声明\n\n- 本项目仅供个人学习使用,请勿高频请求 BWIKI,以免对服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- **战斗模拟结果仅供参考**,与游戏内真实对局存在差异,请以游戏内实际表现为准\n- 使用本项目产生的一切后果由使用者自行承担\n\n---\n\n## 贡献\n\n欢迎提 PR 或 Issue:\n- 修复战斗机制偏差\n- 补充精灵个性效果\n- 完善技能描述解析\n- 参与 v2.0 游戏画面识别功能开发\n\n---\n\n## 致谢\n\n本项目由 [AofeiLi-code](https://github.com/AofeiLi-code) 负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n\n战斗引擎(`sim/` 目录)基于 [NRC_SIM](https://github.com/AofeiLi-code/NRC_SIM),遵循 MIT License。\n\n闪耀大赛自动挑战就与[roco-kingdom-world-sript](https://github.com/JhonTitor6/roco-kingdom-world-script.git), 遵循MIT License.\n"}, "300b45dd045e86b461598765f003ffe3550cacea": {"t": 1785764676.5583923, "n": 16640, "h": "87d942288e2cb2e9", "c": "<p align=\"center\">\n <img src=\"assets/logo.png\" alt=\"洛克王国对战模拟器 · Roco Data\" width=\"280\" />\n</p>\n\n<h1 align=\"center\">洛克王国对战模拟器 · Roco Data</h1>\n\n<p align=\"center\">\n <em>v1.3 — 数据爬虫 · 战斗引擎 · MCTS / LLM 对战智能体 · PVP 自动化 · MariaDB 战斗日志 · LLM 复盘</em>\n</p>\n\n---\n\n爬取 BWIKI 精灵图鉴 + 玩家配队,附带终端图鉴查看器、自由组队战斗模拟器,以及基于 **蒙特卡洛树搜索(MCTS)** 的 AI 智能体,支持 YAML 策略配置、LLM 智能体对战、批量训练并发加速。v1.1 新增 **游戏客户端自动化模块** 直接驱动游戏进行 PVP 自动战斗;v1.3 接入 **MariaDB 战斗日志** 与 **LLM 聚合复盘**,可对历史 N 场对战做模式分析与改阵建议。\n\n> ⚠️ **战斗模拟器仅供参考,结果不代表真实游戏表现。**\n> 详见「[模拟器精度说明](#模拟器精度说明)」章节。\n\n> 🚧 **功能完成度提示:**\n> - **PVP 自动挑战(v1.1)** 仍处于 **开发阶段**,实际游戏环境下尚未稳定跑通,目前仅提供模板匹配 + 操作框架,**不保证可用**。\n> - **LLM 辅助功能(智能体 / 组队 / 策略生成 / 聚合复盘)** 属于 **玩具阶段**,输出仅供参考娱乐,**不应作为真实对战决策依据**。模型对洛克王国游戏机制理解有限,分析结论可能与实际相差较大。\n\n---\n\n## 功能一览\n\n| 功能 | 说明 |\n|------|------|\n| 🕷️ 全量爬取 | 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV |\n| 🔄 检查更新 | 对比本地与 wiki 的差异,仅增量爬取新增精灵 |\n| 📚 BWIKI 阵容 | 抓取 BWIKI 玩家配队(PVP/PVE),可一键导入名册 |\n| 📖 图鉴查看器 | 在终端按页浏览每只精灵的完整信息,支持搜索 |\n| ⚔️ 战斗模拟器 | 自由组队 + 队伍名册,完整战斗机制模拟 |\n| 🤖 MCTS AI | 蒙特卡洛树搜索智能体,支持积累对局经验,YAML 策略配置 |\n| 🧠 LLM 智能体 | OpenAI 兼容协议(DeepSeek 等),可代替 MCTS 做决策与组队 |\n| 📋 队伍名册 | 队伍持久化存储,内置预设 + 用户自定义,随时调取并编辑 |\n| 🖼️ 图片导入 | 识别游戏内队伍分享截图,自动解析精灵和技能并存入名册 |\n| 🎮 PVP 自动挑战 🚧 | 驱动游戏客户端自动战斗(v1.1,**开发中,未稳定跑通**) |\n| 🗄️ MariaDB 后端 | 经验库 / 对战记录 / 详细战斗日志可写入 MariaDB(v1.3) |\n| 🔍 LLM 聚合复盘 🧪 | 对一支队伍最近 ≤100 场对战做胜率诊断 + 改阵建议(v1.3,**玩具阶段,仅供参考**) |\n\n---\n\n## 环境要求\n\n- Python 3.10+\n\n```bash\npip install -r requirements.txt\n```\n\n### 依赖说明\n\n| 库 | 用途 | 是否必须 |\n|----|------|----------|\n| `requests` | 爬虫网络请求 | ✅ |\n| `beautifulsoup4` | 爬虫 HTML 解析 | ✅ |\n| `rich` | 图鉴查看器 UI | ✅ |\n| `pyyaml` | YAML 策略配置文件解析 | ✅ |\n| `loguru` | PVP 自动战斗日志 | PVP 功能必须 |\n| `pywin32` | Windows 窗口操作(截图/按键/鼠标) | PVP 功能必须 |\n| `opencv-python` | 模板图像匹配 | PVP 功能必须 |\n| `anthropic` | 图片导入 — API 识别方式 | 可选 |\n| `rapidocr-onnxruntime` | 图片导入 — 本地 OCR(轻量,约 50MB) | 可选 |\n| `easyocr` | 图片导入 — 本地 OCR(高精度,依赖 PyTorch) | 可选 |\n\n图片导入功能至少安装 `anthropic` 或 `rapidocr-onnxruntime` 其中一个。\n\n---\n\n## 快速启动\n\n### 方式一:双击 run.bat(Windows 推荐)\n\n```\n============================================\n Rocom Helper v1.3\n============================================\n 1. Scrape sprites (rocom wiki)\n 2. Check for sprite updates\n 3. Scrape BWIKI lineups (player teams)\n 4. Browse sprites (viewer)\n 5. Battle simulator (teams / import / PVP / LLM review)\n 6. Train MCTS (self-play loop)\n 7. Manage experience DB\n 0. Exit\n============================================\n```\n\n### 方式二:命令行\n\n```bash\npython rocom_scraper.py # 全量爬取(自动跳过已有精灵)\npython rocom_scraper.py --force # 强制重爬所有精灵\npython viewer.py # 图鉴查看器\npython battle.py # 战斗模拟器(含 AI 对战)\npython train.py # 批量训练 MCTS AI\n```\n\n---\n\n## MCTS AI 对战引擎\n\n### AI 是如何工作的\n\n本项目的 AI 对战基于 **蒙特卡洛树搜索(MCTS)**,而非随机操作。每一回合,AI 会:\n\n1. **展开模拟树**:从当前状态克隆多个分支,对每个候选行动运行前瞻模拟(默认 100 次迭代)\n2. **评估得分**:根据双方生命格差值、当前 HP 比例、场上状态估算该分支的\"胜利期望\"\n3. **选择最优行动**:UCB1 公式平衡探索(试新动作)与利用(选已知好动作)\n4. **积累经验**:每局结束后,将胜负结果回溯到历史决策树,更新各状态下动作的胜率权重\n5. **经验持久化**:对局经验保存在 `data/experience/<队伍名>.json`,每次对战自动加载,越打越强\n\n> MCTS 本身不具备\"学习\"权重的神经网络,而是通过**统计每个局面下每种行动的历史胜率**来做出判断。经验越多,决策越稳定。这是一种\"无模型、无神经网络\"的纯树搜索方案,对战效果接近人类中等水平。\n\n### YAML 策略配置\n\n通过编写 YAML 文件,可以向 AI 注入人类的战斗直觉,大幅提升其在特定队伍上的表现。\n\n**文件位置:** `data/strategies/<队伍名>.yaml`(参考模板 `data/strategies/_template.yaml`)\n\n```yaml\n# 示例:为毒队配置策略\nteam: 预设毒队\nstarter: 影狸 # 首发精灵\n\nskill_priority:\n 影狸: [感染病, 毒液渗透, 嘲弄, 恶意逃离] # 优先传毒,再逃脱\n 裘卡: [毒囊, 崩拳, 阻断, 防御]\n\nswitch_rules:\n - when: type_disadvantaged # 属性被克制时\n action: switch\n to: type_counter # 换克制对方的精灵\n\n - when: hp_pct < 25\n action: switch\n to: highest_hp\n\ngeneral:\n prefer_gather_below_energy: 3\n prefer_attack_when_type_advantage: true\n```\n\n策略权重与 MCTS 经验权重相乘,策略推荐的行动权重 ×3.0,排斥的行动权重 ×0.2,AI 会在策略偏好的方向上更积极地探索。\n\n**可用条件(when):**\n\n| 条件 | 说明 |\n|------|------|\n| `hp_pct < N` | 己方当前精灵 HP 低于 N% |\n| `energy < N` | 己方能量低于 N |\n| `type_disadvantaged` | 己方精灵属性被克制 |\n| `type_advantaged` | 己方精灵有属性克制对手 |\n| `enemy_hp_pct < N` | 对手 HP 低于 N% |\n| `always` | 无条件(默认规则) |\n\n---\n\n## LLM 智能体与聚合复盘(v1.3,🧪 玩具阶段)\n\n> ⚠️ **本节所有 LLM 相关功能均为玩具阶段实验性产物。** 模型对洛克王国具体机制(特性触发、印记联动、能量节奏)理解有限,组队建议和复盘结论可能存在事实性错误,**仅供娱乐与参考,不构成真实对战决策建议**。\n\n除 MCTS 之外,本项目还支持 **OpenAI 兼容协议** 的 LLM 智能体,可直接代替 MCTS 做决策、组队和战斗复盘。\n\n### 配置 LLM\n\n复制 `data/llm_config.example.yaml` 为 `data/llm_config.yaml` 并填入:\n\n```yaml\nendpoint: https://api.deepseek.com/v1 # 任意 OpenAI 兼容端点\nmodel: deepseek-chat\napi_key: <your-api-key>\ntemperature: 0.3\ntimeout: 120\n```\n\n支持的端点举例:DeepSeek、Moonshot、本地 vLLM/Ollama 反代等。\n\n### LLM 能做什么\n\n| 入口 | 功能 |\n|------|------|\n| 战斗模拟器 → 1(开始对战) | 选模式 4/5 让 LLM 控制 A 队,对战 MCTS 或人类 |\n| 战斗模拟器 → 7 → 1 | LLM 根据精灵库与历史经验生成新阵容 |\n| 战斗模拟器 → 7 → 2 | LLM 为已有队伍生成 YAML 策略文件 |\n| 战斗模拟器 → 7 → 3 | 查看 LLM 战后写入的经验文档 |\n| 战斗模拟器 → 7 → 4 | **聚合复盘**:分析最近 N 场(≤100),输出胜率诊断 + 改阵建议 |\n\n### 聚合复盘的数据来源:MariaDB\n\n启用数据库后,每场批量训练对战会**实时**把详细日志写入 `battle_log_records` 表,包含:\n\n- 双方完整阵容(精灵 / 特性 / 性格 / 技能威力 · 耗能)\n- 引擎逐回合日志全文\n- 双方最终残局(HP / 能量 / 异常状态 / 剩余生命格)\n\nLLM 复盘会按队伍维度聚合这些记录,统计胜率、对手分布、败局阵亡频次,并抽样若干失败战例的日志摘录交给 LLM 做模式分析,输出:\n\n1. **整体胜率诊断**(哪些对手是大坑、哪些是优势局)\n2. **模式化弱点**(重复出现的失败模式)\n3. **单只精灵评估**(核心 vs 负担)\n4. **改阵建议**(具体到精灵 / 技能 / 特性 / 性格的替换方案)\n\n#### 复盘输出示例\n\n下面是对一支「最新恶魔狼王魔爆木桶队」做聚合复盘的实际输出片段(仅作展示,结论本身仅供参考):\n\n<p align=\"center\">\n <img src=\"assets/llm_review_example.png\" alt=\"LLM 聚合复盘输出示例\" width=\"720\" />\n</p>\n\n> 示例仅展示输出格式与可读性,**LLM 给出的精灵评估、改阵建议未必符合当前游戏环境**,请结合实际经验判断。\n\n### 启用 MariaDB 后端\n\n在项目根目录创建 `.env`:\n\n```bash\nDB_ENABLED=true\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_USER=root\nDB_PASSWORD=your-password\nDB_NAME=rocom_data\n```\n\n首次启动会自动 `CREATE DATABASE` + `CREATE TABLE`,无需手工建表。可用 `python db_manage.py init` 显式初始化,`python db_manage.py migrate` 把已有 JSON 经验迁移到数据库。\n\n数据库共 4 张表:\n\n| 表 | 内容 |\n|----|------|\n| `experience_records` | MCTS(state_key, action_key)→(wins, total)聚合统计 |\n| `battle_records` | 对战元数据(双方队名、胜负、回合、耗时、MCTS 迭代数) |\n| `pokemon_records` | 精灵字典缓存(可选) |\n| `battle_log_records` | 详细战斗日志:阵容 JSON / 引擎日志 / 最终残局 JSON |\n\n不启用 MariaDB 时所有数据回退到 JSON 文件,功能不受影响(仅 LLM 复盘需要数据库)。\n\n---\n\n### 未来目标:AI 辅助决策看板\n\nv2.0 的目标是将自动战斗与 MCTS AI 打通,实现真正的 AI 驱动对战:\n\n- 通过截图识别当前场上精灵、双方 HP/能量等战场信息\n- 将识别状态转换为引擎内战斗状态,由 MCTS AI 给出推荐行动\n- 实现对战全程\"AI 辅助看板\",或直接执行 AI 决策\n\n> v1.1 已完成游戏画面识别基础设施(`game_control/` 模块),PVP 自动战斗为此方向的第一个里程碑。\n\n---\n\n## PVP 自动挑战(v1.1,🚧 开发中)\n\n> ⚠️ **当前为开发阶段功能,尚未实际跑通完整 PVP 流程。** 已实现窗口截图、模板匹配、键鼠模拟等基础设施,但在真实游戏环境下仍存在识别误判、节奏错位、换宠失败等问题,**请勿用于真实排位**。仓库内代码主要作为后续开发的脚手架与参考。\n\n直接驱动游戏客户端,通过 **Windows 后台截图 + OpenCV 模板匹配 + 键盘/鼠标模拟** 实现自动挑战。\n\n### 当前支持脚本:咔咔鸟 + 五随机\n\n| 阶段 | 行为 |\n|------|------|\n| 等待 | 脚本启动后等待进入战斗,检测到技能出现自动开始 |\n| 开局序列 | 按顺序各释放一次:暴风眼 → 追打 → 音波弹 → 聚盐 |\n| 主循环 | 优先音波弹,音波弹变暗改用聚盐,超过 2 秒全黑则按 X 聚能 |\n| 死亡处理 | 检测到换宠面板(左下角心形图标)→ 按 3 换宠 → ESC 逃跑 |\n\n### 技术特性\n\n- **后台截图**:使用 `PrintWindow` API,游戏可在后台运行,不需要前台焦点\n- **窗口相对坐标**:所有坐标相对于游戏窗口,与窗口在屏幕的位置无关\n- **模板自动缩放**:根据当前窗口高度与截图参考高度自动计算缩放比,同一套模板适配不同窗口尺寸\n- **技能识别**:在左半边屏幕中识别技能图标所在槽位后点击,无需固定坐标\n- **全键盘操作**:换宠(3)、聚能(X)、逃跑(ESC)均通过键盘模拟,无位置依赖\n\n### 使用步骤\n\n**1. 安装依赖**\n\n```bash\npip install loguru pywin32 opencv-python\n```\n\n**2. 准备截图模板**(在对应游戏窗口尺寸下截图)\n\n| 文件路径 | 内容 |\n|---------|------|\n| `assets/templates/咔咔鸟.png` | 咔咔鸟战斗头像(左上角头像区域) |\n| `assets/templates/skills/暴风眼.png` | 暴风眼技能卡图标 |\n| `assets/templates/skills/追打.png` | 追打技能卡图标 |\n| `assets/templates/skills/音波弹.png` | 音波弹技能卡图标 |\n| `assets/templates/skills/聚盐.png` | 聚盐技能卡图标 |\n| `assets/templates/pvp/switch_panel_heart.png` | 换宠面板左下角心形图标(不含数字) |\n\n**3. 设置参考高度**\n\n打开任意一张截图,在画图工具中查看图片高度,填入 `pvp/config.py`:\n\n```python\nTEMPLATE_REFERENCE_HEIGHT = 736 # 截图时的游戏窗口高度(像素)\n```\n\n**4. 启动**\n\n```bash\npython battle.py # 选择菜单 6:PVP 自动战斗\n```\n\n启动后脚本进入等待状态,在游戏内手动点击「开始挑战」,脚本检测到技能出现后自动接管。\n\n### 添加新脚本\n\n新增其他战斗脚本只需:\n\n1. 在 `pvp/config.py` 中修改 `OPEN_SEQUENCE`、`MAIN_SKILLS` 和对应模板路径\n2. 截取新技能图标放入 `assets/templates/skills/`\n\n---\n\n## 模拟器精度说明\n\n**本模拟器力求对五支预设队伍实现接近 100% 的原游戏战斗还原度。** \n对于自定义队伍,精度取决于所用精灵的特性是否已实现。\n\n| 项目 | 实现情况 | 说明 |\n|------|----------|------|\n| 六维属性 | ✅ 已实现 | 种族值 + 个体值规则 + 性格修正公式计算 |\n| 双属性精灵 | ✅ 已实现 | 221 只双属精灵全覆盖;双弱=300%(非400%),双抗=25% |\n| 属性克制表 | ✅ 已对齐 | 采用 roco-world 官方数据,无免疫(最低0.5x),18 种属性 |\n| 性格系统 | ✅ 已实现 | 25 种命名性格(胆小/开朗等),±10%,仅作用于 5 个战斗属性 |\n| 胜利条件 | ✅ 已实现 | 4 格生命制:己方精灵倒下 -1 格,归0判负 |\n| 技能数据 | ✅ 已对齐 | 488 个技能,与 roco-world 一致;耗能/威力 0 差异 |\n| 技能效果 | ⚠️ 部分实现 | 通过正则解析技能描述,常见效果已覆盖;少数复杂技能效果退化 |\n| 异常状态 | ✅ 已实现 | 烧伤 / 中毒 / 冻结 / 寄生,规则见下方机制表 |\n| 应对机制 | ✅ 已实现 | 攻击/防御/状态三类应对的减伤、反弹、威力倍率 |\n| 天气系统 | ✅ 已实现 | 雪天 / 沙暴 / 雨天,持续 8 回合 |\n| **印记系统** | ✅ **已实现** | 12 种正负印记,详见「[印记系统](#印记系统)」章节 |\n| **特性系统** | ✅ **部分实现** | 已实现 39 种特性(覆盖五支预设队伍 + 多支社区常用阵容);详见「[特性系统](#特性系统)」|\n| 血脉系统 | ❌ 未实现 | 详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 首领化 | ❌ 未实现 | 详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 愿力冲击 | ❌ 未实现 | 详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 个性(被动) | ❌ 未实现 | 仅实现性格(Nature);详见「[未实现的游戏机制](#未实现的游戏机制)」 |\n| 对战策略 | ✅ MCTS AI | 蒙特卡洛树搜索,支持经验积累和 YAML 策略配置 |\n\n---\n\n## 印记系统\n\n印记是队伍级别的持续效果,换人不消失。每支队伍同时最多存在 **1 种正面印记 + 1 种负面印记**。\n\n- **相同类别的新印记直接顶替旧印记**(异种覆盖)\n- **相同种类的印记则叠加层数**\n- 只有清除类技能或被顶替才会消失\n\n### 正面印记(POSITIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 湿润印记 | 全技能能耗 -1 |\n| 龙噬印记 | 使用 3 能耗技能时,自身双攻 +30% |\n| 蓄势印记 | 攻击技能威力 +30%,能耗 +1 |\n| 风起印记 | 本回合先手时,技能威力 +20% |\n| 蓄电印记 | 攻击技能威力平坦 +10 |\n| 光合印记 | 回合结束获得 1 能量 |\n| 攻击印记 | 全技能威力 +10% |\n\n### 负面印记(NEGATIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 减速印记 | 速度 -10 |\n| 降灵印记 | 入场时失去 1 能量 |\n| 星陨印记 | 受到非幻系攻击时,消耗全部层数造成等量幻系反击伤害 |\n| 中毒印记 | 回合结束扣 3% HP |\n| 棘刺印记 | 入场时失去 6% HP |\n\n---\n\n## 特性系统\n\n当前已实现 **39 种特性**,覆盖五支预设队伍(毒队、翼王队、狼王队、平衡狼王队、沙暴武队)以及多支社区常用阵容。下表仅列出特性名称与代表持有精灵,**具体效果实现请参见 `sim/ability_engine.py` 源码**。\n\n| 特性 | 代表持有精灵 |\n|------|------------|\n| 溶解扩散 | 千棘盔 |\n| 蚀刻 | 裘卡 |\n| 扩散侵蚀 | 琉璃水母 |\n| 下黑手 | 影狸 |\n| 向心力 | 声波缇塔 |\n| 壮胆 | 巨噬针鼹 |\n| 翼轴 | 帕帕斯卡 |\n| 悲悯 | 恶魔狼 |\n| 渗透 | 棋绮后 |\n| 身经百练 | 海豹船长 |\n| 洁癖 | 翠顶夫人 |\n| 飓风 | 圣羽翼王 |\n| 煤渣草 | 燃薪虫 |\n| 变形活画 | 画间沉铁兽 |\n| 目空 | 白金独角兽 |\n| 绝对秩序 | 秩序鱿墨 |\n| 暴食 | 翼龙 |\n| 虚假宝箱 | 迷迷箱怪 |\n| 专注力 | 音速犬 |\n| 魔法增效 | 黑猫巫师 |\n| 诈死 | 卡瓦重 |\n| 嫁祸 | 朔夜伊芙 |\n| 特殊清洁场景 | 食尘短绒 |\n| 星地善良 | 小皮球 |\n| 慢热型 | 瞌睡王 |\n| 不朽 | 寂灭骨龙 |\n| 野性感官 | 针叶巡林 |\n| 冰钻 | 冰钻布鲁斯 |\n| 助燃 | 火神 |\n| 灵魂灼伤 | 尖嘴狐仙 |\n| 氧循环 | 叶绿魔力猫 |\n| 浸润 | 水灵 |\n| 月牙雪糕 | 月牙雪熊 |\n| 哨兵 | 绒光优优 |\n| 陨落 | 落陨星兔 |\n| 捉迷藏 | 雪影娃娃 |\n| 泛音列 | 圆号鱼 |\n| 对流 | 利灯鱼 |\n| 吸积盘 | 怖哭菇 |\n\n> **注意:** 上述特性的实现细节大多来自对游戏视频/截图的观察分析,作者本人不擅长 PVP,部分触发时机、数值精度可能与实际游戏存在出入。如有发现偏差欢迎在 Issues 中指出。\n\n---\n\n## 未实现的游戏机制\n\n下列游戏机制目前**尚未实现**,是后续优先补完的方向。带有这些机制的精灵在模拟器内仅按基础规则参战,不会触发对应被动效果。\n\n| 机制 | 状态 | 说明 |\n|------|------|------|\n| 个性(被动) | ❌ 未实现 | 当前仅实现「性格(Nature)」(25 种 ±10% 属性修正)。游戏内影响战斗的「个性」被动(特性之外的第二层被动)尚缺失。 |\n| 血脉系统 | ❌ 未实现 | 部分精灵的血脉强化 / 血脉觉醒效果未接入战斗流程,模拟器按未觉醒状态计算。 |\n| 首领化 | ❌ 未实现 | 首领化精灵的属性放大、专属机制未实现。 |\n| 愿力冲击 | ❌ 未实现 | 愿力冲击的机制未实现。 |\n\n### 🙋 诚邀有 PVP 经验的玩家参与贡献\n\n如果你熟悉上述任意机制的具体效果,欢迎通过 Issues 或 PR 提供以下信息:\n\n- 机制 / 个性 / 血脉名称 + 持有精灵名\n- 触发条件(什么时候触发)\n- 效果描述(具体数值)\n- 参考依据(对战截图 / 视频时间戳)\n\n作者本人对 PVP 了解有限,很多机制都是通过观看视频脑测分析,难以保证准确性。社区贡献将极大地提升模拟器还原度。\n\n---\n\n## 爬虫\n\n### 可选参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔下限(秒),实际为 `delay ~ delay+1.5` 随机值 | 1.5 |\n| `--output path` | 输出 JSON 的路径 | `data/sprites.json` |\n| `--force` | 强制重爬所有精灵,并重新下载所有图片(忽略已有缓存) | — |\n\n默认情况下,爬虫会自动跳过本地 `sprites.json` 中已存在的精灵,只爬取新增内容。使用 `--force` 可强制全量重爬。\n\n### 输出文件\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整精灵数据,嵌套 JSON(含技能等级、特性) |\n| `data/sprites.csv` | 扁平化 CSV,可用 Excel / pandas 打开 |\n| `data/skills.csv` | 全技能去重列表(列名同 `skills_all.csv`) |\n| `data/urls.csv` | 爬取到的图片 URL 及本地路径,边爬边更新 |\n| `data/images/` | 下载的图片,按类型分子目录(sprites/skills/attributes/abilities/matchup) |\n| `data/sprites.backup.json` | 每次爬取前自动备份的上一版 |\n\n### 爬虫数据与战斗模拟器的同步关系\n\n| 数据文件 | 爬虫是否更新 | 说明 |\n|----------|-------------|------|\n| `data/sprites.json` | ✅ 每次爬取自动更新 | 精灵属性、可学技能列表 |\n| `data/skills_all.csv` | ❌ 静态文件,爬虫不触碰 | 技能的威力 / 能耗;来自 NRC_SIM 手工维护 |\n\n**当前数据状态:**\n- `skills_all.csv` 共收录 **488 个技能**,覆盖 roco-world 全部 487 个已知技能\n- 耗能、威力数值与 roco-world 完全一致,0 个差异\n\n---\n\n## 图鉴查看器\n\n```bash\npython viewer.py\n```\n\n终端显示类手机图鉴界面,支持翻页(`←` / `→`)、搜索(`/`)、退出(`q`)。\n\n---\n\n## 战斗模拟器\n\n```bash\npython battle.py\n```\n\n### 主菜单\n\n```\n========================================================\n 洛克王国战斗模拟器\n========================================================\n 当前队伍列表(N 支):\n 1. [预设] 预设毒队\n 2. [预设] 预设翼王队\n ...\n========================================================\n 1. 开始对战 (AI/AI、人/AI、人对人、LLM/AI 等模式)\n 2. 新建队伍 (交互组队并保存)\n 3. 管理队伍 (查看 / 删除 / 重命名 / 编辑)\n 4. 批量模拟 (选两支队伍跑 N 场,支持并发加速)\n 5. 导入队伍 (图片识别 / BWIKI 玩家配队)\n 6. PVP 自动挑战 (咔咔鸟脚本,控制游戏客户端)\n 7. LLM 辅助 (AI 组队 / 生成策略 / 经验文档 / 战斗复盘)\n 0. 返回\n========================================================\n```\n\n> **LLM 战斗复盘**位于菜单 7→4:选择一支队伍后输入 N(≤100),LLM 会基于\n> MariaDB 中的 `battle_log_records` 表对该队最近 N 场做胜率诊断、模式弱点\n> 识别和改阵建议,输出 4 节结构化报告。\n\n### 开始对战\n\n从名册选 A、B 两队,MCTS AI 操控并实时输出日志:\n\n```\n────────────────────────────────────────── 回合 3\n 预设毒队: 裘卡 [##########] 302/302 能量: 8\n 翼王队: 声波缇塔 [####......] 149/334 能量: 7 毒2\n[A] 裘卡 使用 崩拳(物攻 武系 威力60)\n → 对 声波缇塔 造成 185 点伤害 [克制!] (HP: 334→149/334)\n```\n\n### 批量模拟\n\n```\n 批量模拟结果(100 场)\n 预设毒队 胜: 83 场 (83.0%)\n 预设翼王队 胜: 15 场 (15.0%)\n 平局: 2 场 ( 2.0%)\n 平均回合数: 97.6\n 总耗时: 0.31s (3.1ms/场)\n```\n\n### 从图片导入队伍\n\n识别游戏内标准组队分享截图,自动提取精灵名和技能,存入名册。\n\n将截图放入 `import_images/` 目录后,选择识别方式:\n\n| 方式 | 精度 | 安装 |\n|------|------|------|\n| Claude Vision API | ★★★★★ | `pip install anthropic` + 配置 `ANTHROPIC_API_KEY` |\n| rapidocr(本地) | ★★★☆☆ | `pip install rapidocr-onnxruntime` |\n| easyocr(本地) | ★★★★☆ | `pip install easyocr`(需 PyTorch) |\n\n---\n\n## 战斗引擎实现机制\n\n| 机制 | 规则 |\n|------|------|\n| **伤害公式** | `(攻/防) × 0.9 × 技能威力 × 能力等级 × 本系加成(×1.5) × 克制倍率 × 天气加成` |\n| **能力等级** | `(1 + 攻击提升 + 敌方防御降低) / (1 + 攻击降低 + 敌方防御提升)` |\n| **属性克制** | 单弱/单抗=2x/0.5x;双弱=3x(非400%);双抗=0.25x;无免疫 |\n| **性格修正** | 25 种命名性格,±10%,仅作用于物攻/物防/魔攻/魔防/速度(HP不受影响)|\n| **胜利条件** | 4 格生命制:击倒对方精灵 -1格,一方生命格归0则判负 |\n| **烧伤** | 每回合 `-2% × 层数` HP,层数减半衰减,归零消失 |\n| **中毒** | 每回合 `-3% × 层数` HP,层数不衰减 |\n| **冻结** | 回合结束时若 HP < `maxHP × 层数/12` 则死亡 |\n| **寄生** | 被寄生者每回合 -8% HP,寄生者在场时回复等量 |\n| **应对** | 攻击 vs 防御/状态、防御 vs 状态 各触发对应额外效果 |\n| **天气** | 雪天:全场 +2 冻结/回合;沙暴:地系技能能耗减半;雨天:水系威力 +50% |\n| **换人** | 主动换人 / 精灵倒下后自动切换到首位存活精灵 |\n| **能量** | 汇合聚能 +5,技能各有消耗,不足时强制聚能 |\n| **印记** | 队伍级正/负印记各 1 槽,换人不消失;12 种印记各有回合效果或触发效果 |\n| **先手** | `有效速度 = 基础速度 × (1 + 先手修正) - 减速印记惩罚` |\n\n---\n\n## 项目结构\n\n```\nrocom-data/\n├── rocom_scraper.py 爬虫主程序\n├── lineup_scraper.py BWIKI 玩家配队抓取\n├── viewer.py 终端图鉴查看器\n├── battle.py 战斗模拟器主入口\n├── train.py MCTS AI 批量训练\n├── db_manage.py 数据库管理 CLI\n├── run.bat Windows 一键启动菜单\n├── requirements.txt 依赖清单\n│\n├── assets/\n│ ├── logo.png 项目 Logo\n│ └── templates/ PVP 模板图片(技能 / 头像 / 面板)\n│\n├── data/\n│ ├── sprites.json 精灵完整数据(爬虫输出)\n│ ├── sprites.csv 精灵扁平化数据\n│ ├── skills_all.csv 技能库(含威力数值)\n│ ├── teams.json 队伍名册(自动生成)\n│ ├── lineups.json BWIKI 玩家配队\n│ ├── llm_config.yaml LLM 端点/模型/API key 配置\n│ ├── llm_experience/ LLM 战后经验文档(每队一份)\n│ ├── experience/ MCTS 经验数据库(每队一个 JSON)\n│ └── strategies/ YAML 策略配置文件目录\n│ └── _template.yaml 策略文件模板\n│\n├── import_images/ 队伍分享截图放置目录\n│\n├── tests/ pytest 单元测试\n│\n└── sim/ 战斗引擎与智能体\n ├── battle_engine.py 回合主循环\n ├── battle_state.py 战斗状态容器(含印记槽)\n ├── damage_calc.py 伤害公式\n ├── counter_system.py 应对系统\n ├── ability_engine.py 特性系统(已实现 39 种特性)\n ├── mark_system.py 印记系统(12 种印记)\n ├── mcts.py 蒙特卡洛树搜索核心\n ├── mcts_agent.py MCTS 智能体封装\n ├── llm_agent.py LLM 智能体(OpenAI 兼容协议)\n ├── llm_team_generator.py LLM 组队 / 策略生成\n ├── llm_review.py LLM 聚合复盘(≤100 场)\n ├── experience_db.py 经验数据库(双后端:JSON / MariaDB)\n ├── data_store.py MariaDB 数据访问层(4 张表)\n ├── battle_log_capture.py 战斗日志捕获(阵容 / 残局序列化)\n ├── batch_concurrent.py 多进程批量训练(实时落库)\n ├── lineups_loader.py BWIKI 配队加载与转换\n ├── strategy.py YAML 策略解析与权重应用\n ├── pokemon.py 精灵模型(含双属性、性格)\n ├── skill.py 技能数据模型\n ├── types.py 属性枚举 + 克制表\n ├── pokemon_db.py 精灵数据库\n ├── skill_db.py 技能数据库\n ├── team_builder.py 精灵构建\n ├── team_builder_interactive.py 交互式组队\n ├── team_roster.py 队伍名册持久化\n ├── team_image_parser.py 图片识别(Claude Vision API)\n └── team_image_parser_ocr.py 图片识别(本地 OCR)\n```\n\n---\n\n## 免责声明\n\n- 本项目仅供个人学习使用,请勿高频请求 BWIKI,以免对服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- **战斗模拟结果仅供参考**,与游戏内真实对局存在差异,请以游戏内实际表现为准\n- 使用本项目产生的一切后果由使用者自行承担\n\n---\n\n## 贡献\n\n欢迎提 PR 或 Issue:\n- 修复战斗机制偏差\n- 补充精灵个性效果\n- 完善技能描述解析\n- 参与 v2.0 游戏画面识别功能开发\n\n---\n\n## 致谢\n\n本项目由 [AofeiLi-code](https://github.com/AofeiLi-code) 负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n\n战斗引擎(`sim/` 目录)基于 [NRC_SIM](https://github.com/AofeiLi-code/NRC_SIM),遵循 MIT License。\n"}, "75bdd260e970559f4a1d293c84ad168da51c4bd8": {"t": 1785764678.0509999, "n": 12624, "h": "01c1f73243ea8841", "c": "# rocom-data · v1.1\n\n洛克王国世界完整数据爬虫 + 战斗模拟器 + MCTS AI 对战引擎 + **PVP 自动战斗脚本**。\n\n爬取 BWIKI 精灵图鉴,附带终端图鉴查看器、自由组队战斗模拟器,以及基于 **蒙特卡洛树搜索(MCTS)** 的 AI 智能体,支持通过 YAML 配置文件指导 AI 作战风格。v1.1 新增 **游戏客户端自动化模块**,可直接驱动游戏进行 PVP 自动战斗。\n\n> ⚠️ **战斗模拟器仅供参考,结果不代表真实游戏表现。**\n> 详见「[模拟器精度说明](#模拟器精度说明)」章节。\n\n---\n\n## 功能一览\n\n| 功能 | 说明 |\n|------|------|\n| 🕷️ 全量爬取 | 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV |\n| 🔄 检查更新 | 对比本地与 wiki 的差异,仅增量爬取新增精灵 |\n| 📖 图鉴查看器 | 在终端按页浏览每只精灵的完整信息,支持搜索 |\n| ⚔️ 战斗模拟器 | 自由组队 + 队伍名册,完整战斗机制模拟 |\n| 🤖 MCTS AI | 蒙特卡洛树搜索智能体,支持积累对局经验,YAML 策略配置 |\n| 📋 队伍名册 | 队伍持久化存储,内置预设 + 用户自定义,随时调取并编辑 |\n| 🖼️ 图片导入 | 识别游戏内队伍分享截图,自动解析精灵和技能并存入名册 |\n| 🎮 PVP 自动挑战 | 直接驱动游戏客户端,自动执行技能、检测死亡、换宠逃跑(v1.1) |\n\n---\n\n## 环境要求\n\n- Python 3.10+\n\n```bash\npip install -r requirements.txt\n```\n\n### 依赖说明\n\n| 库 | 用途 | 是否必须 |\n|----|------|----------|\n| `requests` | 爬虫网络请求 | ✅ |\n| `beautifulsoup4` | 爬虫 HTML 解析 | ✅ |\n| `rich` | 图鉴查看器 UI | ✅ |\n| `pyyaml` | YAML 策略配置文件解析 | ✅ |\n| `loguru` | PVP 自动战斗日志 | PVP 功能必须 |\n| `pywin32` | Windows 窗口操作(截图/按键/鼠标) | PVP 功能必须 |\n| `opencv-python` | 模板图像匹配 | PVP 功能必须 |\n| `anthropic` | 图片导入 — API 识别方式 | 可选 |\n| `rapidocr-onnxruntime` | 图片导入 — 本地 OCR(轻量,约 50MB) | 可选 |\n| `easyocr` | 图片导入 — 本地 OCR(高精度,依赖 PyTorch) | 可选 |\n\n图片导入功能至少安装 `anthropic` 或 `rapidocr-onnxruntime` 其中一个。\n\n---\n\n## 快速启动\n\n### 方式一:双击 run.bat(Windows 推荐)\n\n```\n================================\n Rocom Sprite Data Tool\n================================\n 1. Full scrape (all sprites) ← 全量爬取\n 2. Check for updates ← 检查更新\n 3. Browse sprites (viewer) ← 图鉴查看器\n 4. Battle simulator ← 战斗模拟器\n 5. Exit\n================================\n```\n\n### 方式二:命令行\n\n```bash\npython rocom_scraper.py # 全量爬取(自动跳过已有精灵)\npython rocom_scraper.py --force # 强制重爬所有精灵\npython viewer.py # 图鉴查看器\npython battle.py # 战斗模拟器(含 AI 对战)\npython train.py # 批量训练 MCTS AI\n```\n\n---\n\n## MCTS AI 对战引擎\n\n### AI 是如何工作的\n\n本项目的 AI 对战基于 **蒙特卡洛树搜索(MCTS)**,而非随机操作。每一回合,AI 会:\n\n1. **展开模拟树**:从当前状态克隆多个分支,对每个候选行动运行前瞻模拟(默认 100 次迭代)\n2. **评估得分**:根据双方生命格差值、当前 HP 比例、场上状态估算该分支的\"胜利期望\"\n3. **选择最优行动**:UCB1 公式平衡探索(试新动作)与利用(选已知好动作)\n4. **积累经验**:每局结束后,将胜负结果回溯到历史决策树,更新各状态下动作的胜率权重\n5. **经验持久化**:对局经验保存在 `data/experience/<队伍名>.json`,每次对战自动加载,越打越强\n\n> MCTS 本身不具备\"学习\"权重的神经网络,而是通过**统计每个局面下每种行动的历史胜率**来做出判断。经验越多,决策越稳定。这是一种\"无模型、无神经网络\"的纯树搜索方案,对战效果接近人类中等水平。\n\n### YAML 策略配置\n\n通过编写 YAML 文件,可以向 AI 注入人类的战斗直觉,大幅提升其在特定队伍上的表现。\n\n**文件位置:** `data/strategies/<队伍名>.yaml`(参考模板 `data/strategies/_template.yaml`)\n\n```yaml\n# 示例:为毒队配置策略\nteam: 预设毒队\nstarter: 影狸 # 首发精灵\n\nskill_priority:\n 影狸: [感染病, 毒液渗透, 嘲弄, 恶意逃离] # 优先传毒,再逃脱\n 裘卡: [毒囊, 崩拳, 阻断, 防御]\n\nswitch_rules:\n - when: type_disadvantaged # 属性被克制时\n action: switch\n to: type_counter # 换克制对方的精灵\n\n - when: hp_pct < 25\n action: switch\n to: highest_hp\n\ngeneral:\n prefer_gather_below_energy: 3\n prefer_attack_when_type_advantage: true\n```\n\n策略权重与 MCTS 经验权重相乘,策略推荐的行动权重 ×3.0,排斥的行动权重 ×0.2,AI 会在策略偏好的方向上更积极地探索。\n\n**可用条件(when):**\n\n| 条件 | 说明 |\n|------|------|\n| `hp_pct < N` | 己方当前精灵 HP 低于 N% |\n| `energy < N` | 己方能量低于 N |\n| `type_disadvantaged` | 己方精灵属性被克制 |\n| `type_advantaged` | 己方精灵有属性克制对手 |\n| `enemy_hp_pct < N` | 对手 HP 低于 N% |\n| `always` | 无条件(默认规则) |\n\n### 未来目标:AI 辅助决策看板\n\nv2.0 的目标是将自动战斗与 MCTS AI 打通,实现真正的 AI 驱动对战:\n\n- 通过截图识别当前场上精灵、双方 HP/能量等战场信息\n- 将识别状态转换为引擎内战斗状态,由 MCTS AI 给出推荐行动\n- 实现对战全程\"AI 辅助看板\",或直接执行 AI 决策\n\n> v1.1 已完成游戏画面识别基础设施(`game_control/` 模块),PVP 自动战斗为此方向的第一个里程碑。\n\n---\n\n## PVP 自动挑战(v1.1)\n\n直接驱动游戏客户端,通过 **Windows 后台截图 + OpenCV 模板匹配 + 键盘/鼠标模拟** 实现自动挑战。\n\n### 当前支持脚本:咔咔鸟 + 五随机\n\n| 阶段 | 行为 |\n|------|------|\n| 等待 | 脚本启动后等待进入战斗,检测到技能出现自动开始 |\n| 开局序列 | 按顺序各释放一次:暴风眼 → 追打 → 音波弹 → 聚盐 |\n| 主循环 | 优先音波弹,音波弹变暗改用聚盐,超过 2 秒全黑则按 X 聚能 |\n| 死亡处理 | 检测到换宠面板(左下角心形图标)→ 按 3 换宠 → ESC 逃跑 |\n\n### 技术特性\n\n- **后台截图**:使用 `PrintWindow` API,游戏可在后台运行,不需要前台焦点\n- **窗口相对坐标**:所有坐标相对于游戏窗口,与窗口在屏幕的位置无关\n- **模板自动缩放**:根据当前窗口高度与截图参考高度自动计算缩放比,同一套模板适配不同窗口尺寸\n- **技能识别**:在左半边屏幕中识别技能图标所在槽位后点击,无需固定坐标\n- **全键盘操作**:换宠(3)、聚能(X)、逃跑(ESC)均通过键盘模拟,无位置依赖\n\n### 使用步骤\n\n**1. 安装依赖**\n\n```bash\npip install loguru pywin32 opencv-python\n```\n\n**2. 准备截图模板**(在对应游戏窗口尺寸下截图)\n\n| 文件路径 | 内容 |\n|---------|------|\n| `assets/templates/咔咔鸟.png` | 咔咔鸟战斗头像(左上角头像区域) |\n| `assets/templates/skills/暴风眼.png` | 暴风眼技能卡图标 |\n| `assets/templates/skills/追打.png` | 追打技能卡图标 |\n| `assets/templates/skills/音波弹.png` | 音波弹技能卡图标 |\n| `assets/templates/skills/聚盐.png` | 聚盐技能卡图标 |\n| `assets/templates/pvp/switch_panel_heart.png` | 换宠面板左下角心形图标(不含数字) |\n\n**3. 设置参考高度**\n\n打开任意一张截图,在画图工具中查看图片高度,填入 `pvp/config.py`:\n\n```python\nTEMPLATE_REFERENCE_HEIGHT = 736 # 截图时的游戏窗口高度(像素)\n```\n\n**4. 启动**\n\n```bash\npython battle.py # 选择菜单 6:PVP 自动战斗\n```\n\n启动后脚本进入等待状态,在游戏内手动点击「开始挑战」,脚本检测到技能出现后自动接管。\n\n### 添加新脚本\n\n新增其他战斗脚本只需:\n\n1. 在 `pvp/config.py` 中修改 `OPEN_SEQUENCE`、`MAIN_SKILLS` 和对应模板路径\n2. 截取新技能图标放入 `assets/templates/skills/`\n\n---\n\n## 模拟器精度说明\n\n**本模拟器力求对五支预设队伍实现接近 100% 的原游戏战斗还原度。** \n对于自定义队伍,精度取决于所用精灵的特性是否已实现。\n\n| 项目 | 实现情况 | 说明 |\n|------|----------|------|\n| 六维属性 | ✅ 已实现 | 种族值 + 个体值规则 + 性格修正公式计算 |\n| 双属性精灵 | ✅ 已实现 | 221 只双属精灵全覆盖;双弱=300%(非400%),双抗=25% |\n| 属性克制表 | ✅ 已对齐 | 采用 roco-world 官方数据,无免疫(最低0.5x),18 种属性 |\n| 性格系统 | ✅ 已实现 | 25 种命名性格(胆小/开朗等),±10%,仅作用于 5 个战斗属性 |\n| 胜利条件 | ✅ 已实现 | 4 格生命制:己方精灵倒下 -1 格,归0判负 |\n| 技能数据 | ✅ 已对齐 | 488 个技能,与 roco-world 一致;耗能/威力 0 差异 |\n| 技能效果 | ⚠️ 部分实现 | 通过正则解析技能描述,常见效果已覆盖;少数复杂技能效果退化 |\n| 异常状态 | ✅ 已实现 | 烧伤 / 中毒 / 冻结 / 寄生,规则见下方机制表 |\n| 应对机制 | ✅ 已实现 | 攻击/防御/状态三类应对的减伤、反弹、威力倍率 |\n| 天气系统 | ✅ 已实现 | 雪天 / 沙暴 / 雨天,持续 8 回合 |\n| **印记系统** | ✅ **已实现** | 12 种正负印记,详见「[印记系统](#印记系统)」章节 |\n| **特性系统** | ✅ **部分实现** | 五支预设队伍全部 24 种特性已实现;详见「[特性系统](#特性系统)」|\n| 对战策略 | ✅ MCTS AI | 蒙特卡洛树搜索,支持经验积累和 YAML 策略配置 |\n\n---\n\n## 印记系统\n\n印记是队伍级别的持续效果,换人不消失。每支队伍同时最多存在 **1 种正面印记 + 1 种负面印记**。\n\n- **相同类别的新印记直接顶替旧印记**(异种覆盖)\n- **相同种类的印记则叠加层数**\n- 只有清除类技能或被顶替才会消失\n\n### 正面印记(POSITIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 湿润印记 | 全技能能耗 -1 |\n| 龙噬印记 | 使用 3 能耗技能时,自身双攻 +30% |\n| 蓄势印记 | 攻击技能威力 +30%,能耗 +1 |\n| 风起印记 | 本回合先手时,技能威力 +20% |\n| 蓄电印记 | 攻击技能威力平坦 +10 |\n| 光合印记 | 回合结束获得 1 能量 |\n| 攻击印记 | 全技能威力 +10% |\n\n### 负面印记(NEGATIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 减速印记 | 速度 -10 |\n| 降灵印记 | 入场时失去 1 能量 |\n| 星陨印记 | 受到非幻系攻击时,消耗全部层数造成等量幻系反击伤害 |\n| 中毒印记 | 回合结束扣 3% HP |\n| 棘刺印记 | 入场时失去 6% HP |\n\n---\n\n## 特性系统\n\n五支预设队伍(毒队、翼王队、狼王队、平衡狼王队、沙暴武队)中全部 **24 种特性**均已实现。\n\n| 特性 | 持有精灵 | 效果简述 |\n|------|----------|---------|\n| 溶解扩散 | 千棘盔 | 水系技能命中 → 每携带 1 个毒系技能,敌方中毒 +1 层 |\n| 蚀刻 | 裘卡 | 回合结束:敌方每 2 层中毒 → 转化为 1 层中毒印记 |\n| 扩散侵蚀 | 琉璃水母 | 水系命中后,敌方中毒 +(当前层数×2) |\n| 下黑手 | 影狸 | 在场时,敌方换入精灵立刻获得 5 层中毒 |\n| 向心力 | 声波缇塔 | 前两个有伤技能威力 +30(平坦加成)|\n| 壮胆 | 巨噬针鼹 | 队伍存在虫系精灵时,双攻 +50% |\n| 翼轴 | 帕帕斯卡 | 1 号位技能获得先手 |\n| 悲悯 | 恶魔狼 | 每有 1 只力竭队友,双攻 +30% |\n| 渗透 | 棋绮后 | 使用武/地系技能后,永久攻防 +5%(无上限累积)|\n| 身经百练 | 海豹船长 | 己方每次应对,水/武技能威力 +20%/次(累积)|\n| 洁癖 | 翠顶夫人 | 换出时将全部 buff/debuff 传递给换入精灵 |\n| 飓风 | 圣羽翼王 | ①翼系队友携带相同技能时该技能获先手;②被击败时己方额外 -1 魔力 |\n| 煤渣草 | 燃薪虫 | 在场时,全场烧伤回合结束增长(+1层)而非减半 |\n| 变形活画 | 画间沉铁兽 | 对手每有 10% buff,己方攻击威力 +10%(累积)|\n| 目空 | 白金独角兽 | 非光系技能威力 +25% |\n| 绝对秩序 | 秩序鱿墨 | 受到非自身属性攻击时,伤害 -50% |\n| 暴食 | 翼龙 | 龙系技能获得先手 |\n| 虚假宝箱 | 迷迷箱怪 | 力竭时,场上敌方攻防 +20% |\n| 专注力 | 音速犬 | 入场首回合,物攻技能威力 +100% |\n| 魔法增效 | 黑猫巫师 | 魔攻技能威力 +70% |\n| 诈死 | 卡瓦重 | 己方精灵倒下时,补回被扣的 1 格生命 |\n| 嫁祸 | 朔夜伊芙 | HP 穿越 75%/50%/25% 里程碑时,技能连击次数各 +2 |\n| 特殊清洁场景 | 食尘短绒 | 回合结束:偷取敌方 1 层印记(优先正面),转移至己方 |\n| 星地善良 | 小皮球 | 回合结束时,若当前己方精灵能量归 0,自动换入 |\n\n> **注意:** 上述大部分效果来自对游戏视频的观察分析,由于作者本人不擅长 PVP,部分细节(触发时机、数值精度)可能与实际游戏存在出入。如有发现偏差欢迎在 Issues 中指出。\n\n---\n\n## 个性系统说明 & 贡献征集\n\n洛克王国世界的「个性」系统目前**绝大部分未实现**。\n\n当前版本仅实现了精灵的「性格(Nature)」(25 种命名性格,±10% 属性修正),而游戏中影响战斗的「个性」被动技能(类似于特性的第二层被动)**仍缺失**。\n\n**🙋 诚邀有 PVP 经验的玩家参与贡献:**\n\n如果你熟悉某只精灵的个性效果,欢迎通过 Issues 或 PR 提供以下信息:\n\n- 个性名称 + 持有精灵名\n- 触发条件(什么时候触发)\n- 效果描述(具体数值)\n- 参考依据(对战截图 / 视频时间戳)\n\n作者本人对 PVP 了解有限,很多效果都是通过观看视频脑测分析,难以保证准确性。社区贡献将极大地提升模拟器还原度。\n\n---\n\n## 爬虫\n\n### 可选参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔下限(秒),实际为 `delay ~ delay+1.5` 随机值 | 1.5 |\n| `--output path` | 输出 JSON 的路径 | `data/sprites.json` |\n| `--force` | 强制重爬所有精灵,并重新下载所有图片(忽略已有缓存) | — |\n\n默认情况下,爬虫会自动跳过本地 `sprites.json` 中已存在的精灵,只爬取新增内容。使用 `--force` 可强制全量重爬。\n\n### 输出文件\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整精灵数据,嵌套 JSON(含技能等级、特性) |\n| `data/sprites.csv` | 扁平化 CSV,可用 Excel / pandas 打开 |\n| `data/skills.csv` | 全技能去重列表(列名同 `skills_all.csv`) |\n| `data/urls.csv` | 爬取到的图片 URL 及本地路径,边爬边更新 |\n| `data/images/` | 下载的图片,按类型分子目录(sprites/skills/attributes/abilities/matchup) |\n| `data/sprites.backup.json` | 每次爬取前自动备份的上一版 |\n\n### 爬虫数据与战斗模拟器的同步关系\n\n| 数据文件 | 爬虫是否更新 | 说明 |\n|----------|-------------|------|\n| `data/sprites.json` | ✅ 每次爬取自动更新 | 精灵属性、可学技能列表 |\n| `data/skills_all.csv` | ❌ 静态文件,爬虫不触碰 | 技能的威力 / 能耗;来自 NRC_SIM 手工维护 |\n\n**当前数据状态:**\n- `skills_all.csv` 共收录 **488 个技能**,覆盖 roco-world 全部 487 个已知技能\n- 耗能、威力数值与 roco-world 完全一致,0 个差异\n\n---\n\n## 图鉴查看器\n\n```bash\npython viewer.py\n```\n\n终端显示类手机图鉴界面,支持翻页(`←` / `→`)、搜索(`/`)、退出(`q`)。\n\n---\n\n## 战斗模拟器\n\n```bash\npython battle.py\n```\n\n### 主菜单\n\n```\n========================================================\n 洛克王国战斗模拟器\n========================================================\n 当前队伍列表(3 支):\n 1. [预设] 预设毒队\n 2. [预设] 预设翼王队\n 3. [自定] 我的速攻队\n========================================================\n 1. 开始对战 (从列表选两支队伍)\n 2. 新建队伍 (交互组队并保存)\n 3. 管理队伍 (查看 / 删除 / 重命名 / 编辑)\n 4. 批量模拟 (选两支队伍跑 N 场)\n 5. 从图片导入队伍 (识别标准组队分享图)\n 0. 返回\n========================================================\n```\n\n### 开始对战\n\n从名册选 A、B 两队,MCTS AI 操控并实时输出日志:\n\n```\n────────────────────────────────────────── 回合 3\n 预设毒队: 裘卡 [##########] 302/302 能量: 8\n 翼王队: 声波缇塔 [####......] 149/334 能量: 7 毒2\n[A] 裘卡 使用 崩拳(物攻 武系 威力60)\n → 对 声波缇塔 造成 185 点伤害 [克制!] (HP: 334→149/334)\n```\n\n### 批量模拟\n\n```\n 批量模拟结果(100 场)\n 预设毒队 胜: 83 场 (83.0%)\n 预设翼王队 胜: 15 场 (15.0%)\n 平局: 2 场 ( 2.0%)\n 平均回合数: 97.6\n 总耗时: 0.31s (3.1ms/场)\n```\n\n### 从图片导入队伍\n\n识别游戏内标准组队分享截图,自动提取精灵名和技能,存入名册。\n\n将截图放入 `import_images/` 目录后,选择识别方式:\n\n| 方式 | 精度 | 安装 |\n|------|------|------|\n| Claude Vision API | ★★★★★ | `pip install anthropic` + 配置 `ANTHROPIC_API_KEY` |\n| rapidocr(本地) | ★★★☆☆ | `pip install rapidocr-onnxruntime` |\n| easyocr(本地) | ★★★★☆ | `pip install easyocr`(需 PyTorch) |\n\n---\n\n## 战斗引擎实现机制\n\n| 机制 | 规则 |\n|------|------|\n| **伤害公式** | `(攻/防) × 0.9 × 技能威力 × 能力等级 × 本系加成(×1.5) × 克制倍率 × 天气加成` |\n| **能力等级** | `(1 + 攻击提升 + 敌方防御降低) / (1 + 攻击降低 + 敌方防御提升)` |\n| **属性克制** | 单弱/单抗=2x/0.5x;双弱=3x(非400%);双抗=0.25x;无免疫 |\n| **性格修正** | 25 种命名性格,±10%,仅作用于物攻/物防/魔攻/魔防/速度(HP不受影响)|\n| **胜利条件** | 4 格生命制:击倒对方精灵 -1格,一方生命格归0则判负 |\n| **烧伤** | 每回合 `-2% × 层数` HP,层数减半衰减,归零消失 |\n| **中毒** | 每回合 `-3% × 层数` HP,层数不衰减 |\n| **冻结** | 回合结束时若 HP < `maxHP × 层数/12` 则死亡 |\n| **寄生** | 被寄生者每回合 -8% HP,寄生者在场时回复等量 |\n| **应对** | 攻击 vs 防御/状态、防御 vs 状态 各触发对应额外效果 |\n| **天气** | 雪天:全场 +2 冻结/回合;沙暴:地系技能能耗减半;雨天:水系威力 +50% |\n| **换人** | 主动换人 / 精灵倒下后自动切换到首位存活精灵 |\n| **能量** | 汇合聚能 +5,技能各有消耗,不足时强制聚能 |\n| **印记** | 队伍级正/负印记各 1 槽,换人不消失;12 种印记各有回合效果或触发效果 |\n| **先手** | `有效速度 = 基础速度 × (1 + 先手修正) - 减速印记惩罚` |\n\n---\n\n## 项目结构\n\n```\nrocom-data/\n├── rocom_scraper.py 爬虫主程序\n├── viewer.py 终端图鉴查看器\n├── battle.py 战斗模拟器主入口\n├── train.py MCTS AI 批量训练\n├── run.bat Windows 一键启动菜单\n├── requirements.txt 依赖清单\n│\n├── data/\n│ ├── sprites.json 精灵完整数据(爬虫输出)\n│ ├── sprites.csv 精灵扁平化数据\n│ ├── skills_all.csv 技能库(含威力数值)\n│ ├── teams.json 队伍名册(自动生成)\n│ ├── experience/ MCTS 经验数据库(每队一个 JSON)\n│ └── strategies/ YAML 策略配置文件目录\n│ └── _template.yaml 策略文件模板\n│\n├── import_images/ 队伍分享截图放置目录\n│\n└── sim/ 战斗引擎\n ├── battle_engine.py 回合主循环\n ├── battle_state.py 战斗状态容器(含印记槽)\n ├── damage_calc.py 伤害公式\n ├── counter_system.py 应对系统\n ├── ability_engine.py 特性系统(24 种特性全实现)\n ├── mark_system.py 印记系统(12 种印记)\n ├── mcts.py 蒙特卡洛树搜索核心\n ├── mcts_agent.py MCTS 智能体封装\n ├── experience_db.py 经验数据库\n ├── strategy.py YAML 策略解析与权重应用\n ├── pokemon.py 精灵模型(含双属性、性格)\n ├── skill.py 技能数据模型\n ├── types.py 属性枚举 + 克制表\n ├── pokemon_db.py 精灵数据库\n ├── skill_db.py 技能数据库\n ├── team_builder.py 精灵构建\n ├── team_builder_interactive.py 交互式组队\n ├── team_roster.py 队伍名册持久化\n ├── team_image_parser.py 图片识别(Claude Vision API)\n └── team_image_parser_ocr.py 图片识别(本地 OCR)\n```\n\n---\n\n## 免责声明\n\n- 本项目仅供个人学习使用,请勿高频请求 BWIKI,以免对服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- **战斗模拟结果仅供参考**,与游戏内真实对局存在差异,请以游戏内实际表现为准\n- 使用本项目产生的一切后果由使用者自行承担\n\n---\n\n## 贡献\n\n欢迎提 PR 或 Issue:\n- 修复战斗机制偏差\n- 补充精灵个性效果\n- 完善技能描述解析\n- 参与 v2.0 游戏画面识别功能开发\n\n---\n\n## 致谢\n\n本项目由 [AofeiLi-code](https://github.com/AofeiLi-code) 负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n\n战斗引擎(`sim/` 目录)基于 [NRC_SIM](https://github.com/AofeiLi-code/NRC_SIM),遵循 MIT License。\n"}, "70bacf398a382deeddf94b70cc8672fd638bd6d6": {"t": 1785764679.4256878, "n": 12338, "h": "290b84bea38c1a58", "c": "# rocom-data · v1.1\n\n洛克王国世界完整数据爬虫 + 战斗模拟器 + MCTS AI 对战引擎 + **PVP 自动战斗脚本**。\n\n爬取 BWIKI 精灵图鉴,附带终端图鉴查看器、自由组队战斗模拟器,以及基于 **蒙特卡洛树搜索(MCTS)** 的 AI 智能体,支持通过 YAML 配置文件指导 AI 作战风格。v1.1 新增 **游戏客户端自动化模块**,可直接驱动游戏进行 PVP 自动战斗。\n\n> ⚠️ **战斗模拟器仅供参考,结果不代表真实游戏表现。**\n> 详见「[模拟器精度说明](#模拟器精度说明)」章节。\n\n---\n\n## 功能一览\n\n| 功能 | 说明 |\n|------|------|\n| 🕷️ 全量爬取 | 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV |\n| 🔄 检查更新 | 对比本地与 wiki 的差异,仅增量爬取新增精灵 |\n| 📖 图鉴查看器 | 在终端按页浏览每只精灵的完整信息,支持搜索 |\n| ⚔️ 战斗模拟器 | 自由组队 + 队伍名册,完整战斗机制模拟 |\n| 🤖 MCTS AI | 蒙特卡洛树搜索智能体,支持积累对局经验,YAML 策略配置 |\n| 📋 队伍名册 | 队伍持久化存储,内置预设 + 用户自定义,随时调取并编辑 |\n| 🖼️ 图片导入 | 识别游戏内队伍分享截图,自动解析精灵和技能并存入名册 |\n| 🎮 PVP 自动挑战 | 直接驱动游戏客户端,自动执行技能、检测死亡、换宠逃跑(v1.1) |\n\n---\n\n## 环境要求\n\n- Python 3.10+\n\n```bash\npip install -r requirements.txt\n```\n\n### 依赖说明\n\n| 库 | 用途 | 是否必须 |\n|----|------|----------|\n| `requests` | 爬虫网络请求 | ✅ |\n| `beautifulsoup4` | 爬虫 HTML 解析 | ✅ |\n| `rich` | 图鉴查看器 UI | ✅ |\n| `pyyaml` | YAML 策略配置文件解析 | ✅ |\n| `loguru` | PVP 自动战斗日志 | PVP 功能必须 |\n| `pywin32` | Windows 窗口操作(截图/按键/鼠标) | PVP 功能必须 |\n| `opencv-python` | 模板图像匹配 | PVP 功能必须 |\n| `anthropic` | 图片导入 — API 识别方式 | 可选 |\n| `rapidocr-onnxruntime` | 图片导入 — 本地 OCR(轻量,约 50MB) | 可选 |\n| `easyocr` | 图片导入 — 本地 OCR(高精度,依赖 PyTorch) | 可选 |\n\n图片导入功能至少安装 `anthropic` 或 `rapidocr-onnxruntime` 其中一个。\n\n---\n\n## 快速启动\n\n### 方式一:双击 run.bat(Windows 推荐)\n\n```\n================================\n Rocom Sprite Data Tool\n================================\n 1. Full scrape (all sprites) ← 全量爬取\n 2. Check for updates ← 检查更新\n 3. Browse sprites (viewer) ← 图鉴查看器\n 4. Battle simulator ← 战斗模拟器\n 5. Exit\n================================\n```\n\n### 方式二:命令行\n\n```bash\npython rocom_scraper.py # 全量爬取\npython rocom_scraper.py --check-update # 检查更新\npython viewer.py # 图鉴查看器\npython battle.py # 战斗模拟器(含 AI 对战)\npython train.py # 批量训练 MCTS AI\n```\n\n---\n\n## MCTS AI 对战引擎\n\n### AI 是如何工作的\n\n本项目的 AI 对战基于 **蒙特卡洛树搜索(MCTS)**,而非随机操作。每一回合,AI 会:\n\n1. **展开模拟树**:从当前状态克隆多个分支,对每个候选行动运行前瞻模拟(默认 100 次迭代)\n2. **评估得分**:根据双方生命格差值、当前 HP 比例、场上状态估算该分支的\"胜利期望\"\n3. **选择最优行动**:UCB1 公式平衡探索(试新动作)与利用(选已知好动作)\n4. **积累经验**:每局结束后,将胜负结果回溯到历史决策树,更新各状态下动作的胜率权重\n5. **经验持久化**:对局经验保存在 `data/experience/<队伍名>.json`,每次对战自动加载,越打越强\n\n> MCTS 本身不具备\"学习\"权重的神经网络,而是通过**统计每个局面下每种行动的历史胜率**来做出判断。经验越多,决策越稳定。这是一种\"无模型、无神经网络\"的纯树搜索方案,对战效果接近人类中等水平。\n\n### YAML 策略配置\n\n通过编写 YAML 文件,可以向 AI 注入人类的战斗直觉,大幅提升其在特定队伍上的表现。\n\n**文件位置:** `data/strategies/<队伍名>.yaml`(参考模板 `data/strategies/_template.yaml`)\n\n```yaml\n# 示例:为毒队配置策略\nteam: 预设毒队\nstarter: 影狸 # 首发精灵\n\nskill_priority:\n 影狸: [感染病, 毒液渗透, 嘲弄, 恶意逃离] # 优先传毒,再逃脱\n 裘卡: [毒囊, 崩拳, 阻断, 防御]\n\nswitch_rules:\n - when: type_disadvantaged # 属性被克制时\n action: switch\n to: type_counter # 换克制对方的精灵\n\n - when: hp_pct < 25\n action: switch\n to: highest_hp\n\ngeneral:\n prefer_gather_below_energy: 3\n prefer_attack_when_type_advantage: true\n```\n\n策略权重与 MCTS 经验权重相乘,策略推荐的行动权重 ×3.0,排斥的行动权重 ×0.2,AI 会在策略偏好的方向上更积极地探索。\n\n**可用条件(when):**\n\n| 条件 | 说明 |\n|------|------|\n| `hp_pct < N` | 己方当前精灵 HP 低于 N% |\n| `energy < N` | 己方能量低于 N |\n| `type_disadvantaged` | 己方精灵属性被克制 |\n| `type_advantaged` | 己方精灵有属性克制对手 |\n| `enemy_hp_pct < N` | 对手 HP 低于 N% |\n| `always` | 无条件(默认规则) |\n\n### 未来目标:AI 辅助决策看板\n\nv2.0 的目标是将自动战斗与 MCTS AI 打通,实现真正的 AI 驱动对战:\n\n- 通过截图识别当前场上精灵、双方 HP/能量等战场信息\n- 将识别状态转换为引擎内战斗状态,由 MCTS AI 给出推荐行动\n- 实现对战全程\"AI 辅助看板\",或直接执行 AI 决策\n\n> v1.1 已完成游戏画面识别基础设施(`game_control/` 模块),PVP 自动战斗为此方向的第一个里程碑。\n\n---\n\n## PVP 自动挑战(v1.1)\n\n直接驱动游戏客户端,通过 **Windows 后台截图 + OpenCV 模板匹配 + 键盘/鼠标模拟** 实现自动挑战。\n\n### 当前支持脚本:咔咔鸟 + 五随机\n\n| 阶段 | 行为 |\n|------|------|\n| 等待 | 脚本启动后等待进入战斗,检测到技能出现自动开始 |\n| 开局序列 | 按顺序各释放一次:暴风眼 → 追打 → 音波弹 → 聚盐 |\n| 主循环 | 优先音波弹,音波弹变暗改用聚盐,超过 2 秒全黑则按 X 聚能 |\n| 死亡处理 | 检测到换宠面板(左下角心形图标)→ 按 3 换宠 → ESC 逃跑 |\n\n### 技术特性\n\n- **后台截图**:使用 `PrintWindow` API,游戏可在后台运行,不需要前台焦点\n- **窗口相对坐标**:所有坐标相对于游戏窗口,与窗口在屏幕的位置无关\n- **模板自动缩放**:根据当前窗口高度与截图参考高度自动计算缩放比,同一套模板适配不同窗口尺寸\n- **技能识别**:在左半边屏幕中识别技能图标所在槽位后点击,无需固定坐标\n- **全键盘操作**:换宠(3)、聚能(X)、逃跑(ESC)均通过键盘模拟,无位置依赖\n\n### 使用步骤\n\n**1. 安装依赖**\n\n```bash\npip install loguru pywin32 opencv-python\n```\n\n**2. 准备截图模板**(在对应游戏窗口尺寸下截图)\n\n| 文件路径 | 内容 |\n|---------|------|\n| `assets/templates/咔咔鸟.png` | 咔咔鸟战斗头像(左上角头像区域) |\n| `assets/templates/skills/暴风眼.png` | 暴风眼技能卡图标 |\n| `assets/templates/skills/追打.png` | 追打技能卡图标 |\n| `assets/templates/skills/音波弹.png` | 音波弹技能卡图标 |\n| `assets/templates/skills/聚盐.png` | 聚盐技能卡图标 |\n| `assets/templates/pvp/switch_panel_heart.png` | 换宠面板左下角心形图标(不含数字) |\n\n**3. 设置参考高度**\n\n打开任意一张截图,在画图工具中查看图片高度,填入 `pvp/config.py`:\n\n```python\nTEMPLATE_REFERENCE_HEIGHT = 736 # 截图时的游戏窗口高度(像素)\n```\n\n**4. 启动**\n\n```bash\npython battle.py # 选择菜单 6:PVP 自动战斗\n```\n\n启动后脚本进入等待状态,在游戏内手动点击「开始挑战」,脚本检测到技能出现后自动接管。\n\n### 添加新脚本\n\n新增其他战斗脚本只需:\n\n1. 在 `pvp/config.py` 中修改 `OPEN_SEQUENCE`、`MAIN_SKILLS` 和对应模板路径\n2. 截取新技能图标放入 `assets/templates/skills/`\n\n---\n\n## 模拟器精度说明\n\n**本模拟器力求对五支预设队伍实现接近 100% 的原游戏战斗还原度。** \n对于自定义队伍,精度取决于所用精灵的特性是否已实现。\n\n| 项目 | 实现情况 | 说明 |\n|------|----------|------|\n| 六维属性 | ✅ 已实现 | 种族值 + 个体值规则 + 性格修正公式计算 |\n| 双属性精灵 | ✅ 已实现 | 221 只双属精灵全覆盖;双弱=300%(非400%),双抗=25% |\n| 属性克制表 | ✅ 已对齐 | 采用 roco-world 官方数据,无免疫(最低0.5x),18 种属性 |\n| 性格系统 | ✅ 已实现 | 25 种命名性格(胆小/开朗等),±10%,仅作用于 5 个战斗属性 |\n| 胜利条件 | ✅ 已实现 | 4 格生命制:己方精灵倒下 -1 格,归0判负 |\n| 技能数据 | ✅ 已对齐 | 488 个技能,与 roco-world 一致;耗能/威力 0 差异 |\n| 技能效果 | ⚠️ 部分实现 | 通过正则解析技能描述,常见效果已覆盖;少数复杂技能效果退化 |\n| 异常状态 | ✅ 已实现 | 烧伤 / 中毒 / 冻结 / 寄生,规则见下方机制表 |\n| 应对机制 | ✅ 已实现 | 攻击/防御/状态三类应对的减伤、反弹、威力倍率 |\n| 天气系统 | ✅ 已实现 | 雪天 / 沙暴 / 雨天,持续 8 回合 |\n| **印记系统** | ✅ **已实现** | 12 种正负印记,详见「[印记系统](#印记系统)」章节 |\n| **特性系统** | ✅ **部分实现** | 五支预设队伍全部 24 种特性已实现;详见「[特性系统](#特性系统)」|\n| 对战策略 | ✅ MCTS AI | 蒙特卡洛树搜索,支持经验积累和 YAML 策略配置 |\n\n---\n\n## 印记系统\n\n印记是队伍级别的持续效果,换人不消失。每支队伍同时最多存在 **1 种正面印记 + 1 种负面印记**。\n\n- **相同类别的新印记直接顶替旧印记**(异种覆盖)\n- **相同种类的印记则叠加层数**\n- 只有清除类技能或被顶替才会消失\n\n### 正面印记(POSITIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 湿润印记 | 全技能能耗 -1 |\n| 龙噬印记 | 使用 3 能耗技能时,自身双攻 +30% |\n| 蓄势印记 | 攻击技能威力 +30%,能耗 +1 |\n| 风起印记 | 本回合先手时,技能威力 +20% |\n| 蓄电印记 | 攻击技能威力平坦 +10 |\n| 光合印记 | 回合结束获得 1 能量 |\n| 攻击印记 | 全技能威力 +10% |\n\n### 负面印记(NEGATIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 减速印记 | 速度 -10 |\n| 降灵印记 | 入场时失去 1 能量 |\n| 星陨印记 | 受到非幻系攻击时,消耗全部层数造成等量幻系反击伤害 |\n| 中毒印记 | 回合结束扣 3% HP |\n| 棘刺印记 | 入场时失去 6% HP |\n\n---\n\n## 特性系统\n\n五支预设队伍(毒队、翼王队、狼王队、平衡狼王队、沙暴武队)中全部 **24 种特性**均已实现。\n\n| 特性 | 持有精灵 | 效果简述 |\n|------|----------|---------|\n| 溶解扩散 | 千棘盔 | 水系技能命中 → 每携带 1 个毒系技能,敌方中毒 +1 层 |\n| 蚀刻 | 裘卡 | 回合结束:敌方每 2 层中毒 → 转化为 1 层中毒印记 |\n| 扩散侵蚀 | 琉璃水母 | 水系命中后,敌方中毒 +(当前层数×2) |\n| 下黑手 | 影狸 | 在场时,敌方换入精灵立刻获得 5 层中毒 |\n| 向心力 | 声波缇塔 | 前两个有伤技能威力 +30(平坦加成)|\n| 壮胆 | 巨噬针鼹 | 队伍存在虫系精灵时,双攻 +50% |\n| 翼轴 | 帕帕斯卡 | 1 号位技能获得先手 |\n| 悲悯 | 恶魔狼 | 每有 1 只力竭队友,双攻 +30% |\n| 渗透 | 棋绮后 | 使用武/地系技能后,永久攻防 +5%(无上限累积)|\n| 身经百练 | 海豹船长 | 己方每次应对,水/武技能威力 +20%/次(累积)|\n| 洁癖 | 翠顶夫人 | 换出时将全部 buff/debuff 传递给换入精灵 |\n| 飓风 | 圣羽翼王 | ①翼系队友携带相同技能时该技能获先手;②被击败时己方额外 -1 魔力 |\n| 煤渣草 | 燃薪虫 | 在场时,全场烧伤回合结束增长(+1层)而非减半 |\n| 变形活画 | 画间沉铁兽 | 对手每有 10% buff,己方攻击威力 +10%(累积)|\n| 目空 | 白金独角兽 | 非光系技能威力 +25% |\n| 绝对秩序 | 秩序鱿墨 | 受到非自身属性攻击时,伤害 -50% |\n| 暴食 | 翼龙 | 龙系技能获得先手 |\n| 虚假宝箱 | 迷迷箱怪 | 力竭时,场上敌方攻防 +20% |\n| 专注力 | 音速犬 | 入场首回合,物攻技能威力 +100% |\n| 魔法增效 | 黑猫巫师 | 魔攻技能威力 +70% |\n| 诈死 | 卡瓦重 | 己方精灵倒下时,补回被扣的 1 格生命 |\n| 嫁祸 | 朔夜伊芙 | HP 穿越 75%/50%/25% 里程碑时,技能连击次数各 +2 |\n| 特殊清洁场景 | 食尘短绒 | 回合结束:偷取敌方 1 层印记(优先正面),转移至己方 |\n| 星地善良 | 小皮球 | 回合结束时,若当前己方精灵能量归 0,自动换入 |\n\n> **注意:** 上述大部分效果来自对游戏视频的观察分析,由于作者本人不擅长 PVP,部分细节(触发时机、数值精度)可能与实际游戏存在出入。如有发现偏差欢迎在 Issues 中指出。\n\n---\n\n## 个性系统说明 & 贡献征集\n\n洛克王国世界的「个性」系统目前**绝大部分未实现**。\n\n当前版本仅实现了精灵的「性格(Nature)」(25 种命名性格,±10% 属性修正),而游戏中影响战斗的「个性」被动技能(类似于特性的第二层被动)**仍缺失**。\n\n**🙋 诚邀有 PVP 经验的玩家参与贡献:**\n\n如果你熟悉某只精灵的个性效果,欢迎通过 Issues 或 PR 提供以下信息:\n\n- 个性名称 + 持有精灵名\n- 触发条件(什么时候触发)\n- 效果描述(具体数值)\n- 参考依据(对战截图 / 视频时间戳)\n\n作者本人对 PVP 了解有限,很多效果都是通过观看视频脑测分析,难以保证准确性。社区贡献将极大地提升模拟器还原度。\n\n---\n\n## 爬虫\n\n### 可选参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔下限(秒),实际为 `delay ~ delay+1.5` 随机值 | 1.5 |\n| `--output path` | 输出 JSON 的路径 | `data/sprites.json` |\n| `--check-update` | 增量更新模式 | — |\n\n### 输出文件\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整精灵数据,嵌套 JSON |\n| `data/sprites.csv` | 扁平化 CSV,可用 Excel / pandas 打开 |\n| `data/sprites.backup.json` | 每次爬取前自动备份的上一版 |\n\n### 爬虫数据与战斗模拟器的同步关系\n\n| 数据文件 | 爬虫是否更新 | 说明 |\n|----------|-------------|------|\n| `data/sprites.json` | ✅ 每次爬取自动更新 | 精灵属性、可学技能列表 |\n| `data/skills_all.csv` | ❌ 静态文件,爬虫不触碰 | 技能的威力 / 能耗;来自 NRC_SIM 手工维护 |\n\n**当前数据状态:**\n- `skills_all.csv` 共收录 **488 个技能**,覆盖 roco-world 全部 487 个已知技能\n- 耗能、威力数值与 roco-world 完全一致,0 个差异\n\n---\n\n## 图鉴查看器\n\n```bash\npython viewer.py\n```\n\n终端显示类手机图鉴界面,支持翻页(`←` / `→`)、搜索(`/`)、退出(`q`)。\n\n---\n\n## 战斗模拟器\n\n```bash\npython battle.py\n```\n\n### 主菜单\n\n```\n========================================================\n 洛克王国战斗模拟器\n========================================================\n 当前队伍列表(3 支):\n 1. [预设] 预设毒队\n 2. [预设] 预设翼王队\n 3. [自定] 我的速攻队\n========================================================\n 1. 开始对战 (从列表选两支队伍)\n 2. 新建队伍 (交互组队并保存)\n 3. 管理队伍 (查看 / 删除 / 重命名 / 编辑)\n 4. 批量模拟 (选两支队伍跑 N 场)\n 5. 从图片导入队伍 (识别标准组队分享图)\n 0. 返回\n========================================================\n```\n\n### 开始对战\n\n从名册选 A、B 两队,MCTS AI 操控并实时输出日志:\n\n```\n────────────────────────────────────────── 回合 3\n 预设毒队: 裘卡 [##########] 302/302 能量: 8\n 翼王队: 声波缇塔 [####......] 149/334 能量: 7 毒2\n[A] 裘卡 使用 崩拳(物攻 武系 威力60)\n → 对 声波缇塔 造成 185 点伤害 [克制!] (HP: 334→149/334)\n```\n\n### 批量模拟\n\n```\n 批量模拟结果(100 场)\n 预设毒队 胜: 83 场 (83.0%)\n 预设翼王队 胜: 15 场 (15.0%)\n 平局: 2 场 ( 2.0%)\n 平均回合数: 97.6\n 总耗时: 0.31s (3.1ms/场)\n```\n\n### 从图片导入队伍\n\n识别游戏内标准组队分享截图,自动提取精灵名和技能,存入名册。\n\n将截图放入 `import_images/` 目录后,选择识别方式:\n\n| 方式 | 精度 | 安装 |\n|------|------|------|\n| Claude Vision API | ★★★★★ | `pip install anthropic` + 配置 `ANTHROPIC_API_KEY` |\n| rapidocr(本地) | ★★★☆☆ | `pip install rapidocr-onnxruntime` |\n| easyocr(本地) | ★★★★☆ | `pip install easyocr`(需 PyTorch) |\n\n---\n\n## 战斗引擎实现机制\n\n| 机制 | 规则 |\n|------|------|\n| **伤害公式** | `(攻/防) × 0.9 × 技能威力 × 能力等级 × 本系加成(×1.5) × 克制倍率 × 天气加成` |\n| **能力等级** | `(1 + 攻击提升 + 敌方防御降低) / (1 + 攻击降低 + 敌方防御提升)` |\n| **属性克制** | 单弱/单抗=2x/0.5x;双弱=3x(非400%);双抗=0.25x;无免疫 |\n| **性格修正** | 25 种命名性格,±10%,仅作用于物攻/物防/魔攻/魔防/速度(HP不受影响)|\n| **胜利条件** | 4 格生命制:击倒对方精灵 -1格,一方生命格归0则判负 |\n| **烧伤** | 每回合 `-2% × 层数` HP,层数减半衰减,归零消失 |\n| **中毒** | 每回合 `-3% × 层数` HP,层数不衰减 |\n| **冻结** | 回合结束时若 HP < `maxHP × 层数/12` 则死亡 |\n| **寄生** | 被寄生者每回合 -8% HP,寄生者在场时回复等量 |\n| **应对** | 攻击 vs 防御/状态、防御 vs 状态 各触发对应额外效果 |\n| **天气** | 雪天:全场 +2 冻结/回合;沙暴:地系技能能耗减半;雨天:水系威力 +50% |\n| **换人** | 主动换人 / 精灵倒下后自动切换到首位存活精灵 |\n| **能量** | 汇合聚能 +5,技能各有消耗,不足时强制聚能 |\n| **印记** | 队伍级正/负印记各 1 槽,换人不消失;12 种印记各有回合效果或触发效果 |\n| **先手** | `有效速度 = 基础速度 × (1 + 先手修正) - 减速印记惩罚` |\n\n---\n\n## 项目结构\n\n```\nrocom-data/\n├── rocom_scraper.py 爬虫主程序\n├── viewer.py 终端图鉴查看器\n├── battle.py 战斗模拟器主入口\n├── train.py MCTS AI 批量训练\n├── run.bat Windows 一键启动菜单\n├── requirements.txt 依赖清单\n│\n├── data/\n│ ├── sprites.json 精灵完整数据(爬虫输出)\n│ ├── sprites.csv 精灵扁平化数据\n│ ├── skills_all.csv 技能库(含威力数值)\n│ ├── teams.json 队伍名册(自动生成)\n│ ├── experience/ MCTS 经验数据库(每队一个 JSON)\n│ └── strategies/ YAML 策略配置文件目录\n│ └── _template.yaml 策略文件模板\n│\n├── import_images/ 队伍分享截图放置目录\n│\n└── sim/ 战斗引擎\n ├── battle_engine.py 回合主循环\n ├── battle_state.py 战斗状态容器(含印记槽)\n ├── damage_calc.py 伤害公式\n ├── counter_system.py 应对系统\n ├── ability_engine.py 特性系统(24 种特性全实现)\n ├── mark_system.py 印记系统(12 种印记)\n ├── mcts.py 蒙特卡洛树搜索核心\n ├── mcts_agent.py MCTS 智能体封装\n ├── experience_db.py 经验数据库\n ├── strategy.py YAML 策略解析与权重应用\n ├── pokemon.py 精灵模型(含双属性、性格)\n ├── skill.py 技能数据模型\n ├── types.py 属性枚举 + 克制表\n ├── pokemon_db.py 精灵数据库\n ├── skill_db.py 技能数据库\n ├── team_builder.py 精灵构建\n ├── team_builder_interactive.py 交互式组队\n ├── team_roster.py 队伍名册持久化\n ├── team_image_parser.py 图片识别(Claude Vision API)\n └── team_image_parser_ocr.py 图片识别(本地 OCR)\n```\n\n---\n\n## 免责声明\n\n- 本项目仅供个人学习使用,请勿高频请求 BWIKI,以免对服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- **战斗模拟结果仅供参考**,与游戏内真实对局存在差异,请以游戏内实际表现为准\n- 使用本项目产生的一切后果由使用者自行承担\n\n---\n\n## 贡献\n\n欢迎提 PR 或 Issue:\n- 修复战斗机制偏差\n- 补充精灵个性效果\n- 完善技能描述解析\n- 参与 v2.0 游戏画面识别功能开发\n\n---\n\n## 致谢\n\n本项目由 [AofeiLi-code](https://github.com/AofeiLi-code) 负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n\n战斗引擎(`sim/` 目录)基于 [NRC_SIM](https://github.com/AofeiLi-code/NRC_SIM),遵循 MIT License。\n"}, "c9b525802cbdaab9c3086a8f86990d71a139e41d": {"t": 1785764681.395178, "n": 11032, "h": "643cfde124687a87", "c": "# rocom-data · v1.0\n\n洛克王国世界完整数据爬虫 + 战斗模拟器 + MCTS AI 对战引擎。\n\n爬取 BWIKI 精灵图鉴,附带终端图鉴查看器、自由组队战斗模拟器,以及基于 **蒙特卡洛树搜索(MCTS)** 的 AI 智能体,支持通过 YAML 配置文件指导 AI 作战风格。\n\n> ⚠️ **战斗模拟器仅供参考,结果不代表真实游戏表现。**\n> 详见「[模拟器精度说明](#模拟器精度说明)」章节。\n\n---\n\n## 功能一览\n\n| 功能 | 说明 |\n|------|------|\n| 🕷️ 全量爬取 | 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV |\n| 🔄 检查更新 | 对比本地与 wiki 的差异,仅增量爬取新增精灵 |\n| 📖 图鉴查看器 | 在终端按页浏览每只精灵的完整信息,支持搜索 |\n| ⚔️ 战斗模拟器 | 自由组队 + 队伍名册,完整战斗机制模拟 |\n| 🤖 MCTS AI | 蒙特卡洛树搜索智能体,支持积累对局经验,YAML 策略配置 |\n| 📋 队伍名册 | 队伍持久化存储,内置预设 + 用户自定义,随时调取并编辑 |\n| 🖼️ 图片导入 | 识别游戏内队伍分享截图,自动解析精灵和技能并存入名册 |\n\n---\n\n## 环境要求\n\n- Python 3.10+\n\n```bash\npip install -r requirements.txt\n```\n\n### 依赖说明\n\n| 库 | 用途 | 是否必须 |\n|----|------|----------|\n| `requests` | 爬虫网络请求 | ✅ |\n| `beautifulsoup4` | 爬虫 HTML 解析 | ✅ |\n| `rich` | 图鉴查看器 UI | ✅ |\n| `pyyaml` | YAML 策略配置文件解析 | ✅ |\n| `anthropic` | 图片导入 — API 识别方式 | 可选 |\n| `rapidocr-onnxruntime` | 图片导入 — 本地 OCR(轻量,约 50MB) | 可选 |\n| `easyocr` | 图片导入 — 本地 OCR(高精度,依赖 PyTorch) | 可选 |\n\n图片导入功能至少安装 `anthropic` 或 `rapidocr-onnxruntime` 其中一个。\n\n---\n\n## 快速启动\n\n### 方式一:双击 run.bat(Windows 推荐)\n\n```\n================================\n Rocom Sprite Data Tool\n================================\n 1. Full scrape (all sprites) ← 全量爬取\n 2. Check for updates ← 检查更新\n 3. Browse sprites (viewer) ← 图鉴查看器\n 4. Battle simulator ← 战斗模拟器\n 5. Exit\n================================\n```\n\n### 方式二:命令行\n\n```bash\npython rocom_scraper.py # 全量爬取(自动跳过已有精灵)\npython rocom_scraper.py --force # 强制重爬所有精灵\npython viewer.py # 图鉴查看器\npython battle.py # 战斗模拟器(含 AI 对战)\npython train.py # 批量训练 MCTS AI\n```\n\n---\n\n## MCTS AI 对战引擎\n\n### AI 是如何工作的\n\n本项目的 AI 对战基于 **蒙特卡洛树搜索(MCTS)**,而非随机操作。每一回合,AI 会:\n\n1. **展开模拟树**:从当前状态克隆多个分支,对每个候选行动运行前瞻模拟(默认 100 次迭代)\n2. **评估得分**:根据双方生命格差值、当前 HP 比例、场上状态估算该分支的\"胜利期望\"\n3. **选择最优行动**:UCB1 公式平衡探索(试新动作)与利用(选已知好动作)\n4. **积累经验**:每局结束后,将胜负结果回溯到历史决策树,更新各状态下动作的胜率权重\n5. **经验持久化**:对局经验保存在 `data/experience/<队伍名>.json`,每次对战自动加载,越打越强\n\n> MCTS 本身不具备\"学习\"权重的神经网络,而是通过**统计每个局面下每种行动的历史胜率**来做出判断。经验越多,决策越稳定。这是一种\"无模型、无神经网络\"的纯树搜索方案,对战效果接近人类中等水平。\n\n### YAML 策略配置\n\n通过编写 YAML 文件,可以向 AI 注入人类的战斗直觉,大幅提升其在特定队伍上的表现。\n\n**文件位置:** `data/strategies/<队伍名>.yaml`(参考模板 `data/strategies/_template.yaml`)\n\n```yaml\n# 示例:为毒队配置策略\nteam: 预设毒队\nstarter: 影狸 # 首发精灵\n\nskill_priority:\n 影狸: [感染病, 毒液渗透, 嘲弄, 恶意逃离] # 优先传毒,再逃脱\n 裘卡: [毒囊, 崩拳, 阻断, 防御]\n\nswitch_rules:\n - when: type_disadvantaged # 属性被克制时\n action: switch\n to: type_counter # 换克制对方的精灵\n\n - when: hp_pct < 25\n action: switch\n to: highest_hp\n\ngeneral:\n prefer_gather_below_energy: 3\n prefer_attack_when_type_advantage: true\n```\n\n策略权重与 MCTS 经验权重相乘,策略推荐的行动权重 ×3.0,排斥的行动权重 ×0.2,AI 会在策略偏好的方向上更积极地探索。\n\n**可用条件(when):**\n\n| 条件 | 说明 |\n|------|------|\n| `hp_pct < N` | 己方当前精灵 HP 低于 N% |\n| `energy < N` | 己方能量低于 N |\n| `type_disadvantaged` | 己方精灵属性被克制 |\n| `type_advantaged` | 己方精灵有属性克制对手 |\n| `enemy_hp_pct < N` | 对手 HP 低于 N% |\n| `always` | 无条件(默认规则) |\n\n### 未来目标:游戏画面识别辅助\n\nv2.0 的目标是接入 **游戏画面实时读取**,让 AI 真正用于游戏内辅助决策:\n\n- 通过截图识别当前上场精灵、双方 HP/能量、已使用技能等战场信息\n- 将识别到的状态转换为引擎内战斗状态\n- MCTS AI 给出推荐行动(显示在辅助窗口中)\n- 实现对战全程的\"AI 辅助看板\",而非自动操作\n\n这一功能目前仍在规划阶段,有兴趣参与的开发者欢迎提 PR。\n\n---\n\n## 模拟器精度说明\n\n**本模拟器力求对五支预设队伍实现接近 100% 的原游戏战斗还原度。** \n对于自定义队伍,精度取决于所用精灵的特性是否已实现。\n\n| 项目 | 实现情况 | 说明 |\n|------|----------|------|\n| 六维属性 | ✅ 已实现 | 种族值 + 个体值规则 + 性格修正公式计算 |\n| 双属性精灵 | ✅ 已实现 | 221 只双属精灵全覆盖;双弱=300%(非400%),双抗=25% |\n| 属性克制表 | ✅ 已对齐 | 采用 roco-world 官方数据,无免疫(最低0.5x),18 种属性 |\n| 性格系统 | ✅ 已实现 | 25 种命名性格(胆小/开朗等),±10%,仅作用于 5 个战斗属性 |\n| 胜利条件 | ✅ 已实现 | 4 格生命制:己方精灵倒下 -1 格,归0判负 |\n| 技能数据 | ✅ 已对齐 | 488 个技能,与 roco-world 一致;耗能/威力 0 差异 |\n| 技能效果 | ⚠️ 部分实现 | 通过正则解析技能描述,常见效果已覆盖;少数复杂技能效果退化 |\n| 异常状态 | ✅ 已实现 | 烧伤 / 中毒 / 冻结 / 寄生,规则见下方机制表 |\n| 应对机制 | ✅ 已实现 | 攻击/防御/状态三类应对的减伤、反弹、威力倍率 |\n| 天气系统 | ✅ 已实现 | 雪天 / 沙暴 / 雨天,持续 8 回合 |\n| **印记系统** | ✅ **已实现** | 12 种正负印记,详见「[印记系统](#印记系统)」章节 |\n| **特性系统** | ✅ **部分实现** | 五支预设队伍全部 24 种特性已实现;详见「[特性系统](#特性系统)」|\n| 对战策略 | ✅ MCTS AI | 蒙特卡洛树搜索,支持经验积累和 YAML 策略配置 |\n\n---\n\n## 印记系统\n\n印记是队伍级别的持续效果,换人不消失。每支队伍同时最多存在 **1 种正面印记 + 1 种负面印记**。\n\n- **相同类别的新印记直接顶替旧印记**(异种覆盖)\n- **相同种类的印记则叠加层数**\n- 只有清除类技能或被顶替才会消失\n\n### 正面印记(POSITIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 湿润印记 | 全技能能耗 -1 |\n| 龙噬印记 | 使用 3 能耗技能时,自身双攻 +30% |\n| 蓄势印记 | 攻击技能威力 +30%,能耗 +1 |\n| 风起印记 | 本回合先手时,技能威力 +20% |\n| 蓄电印记 | 攻击技能威力平坦 +10 |\n| 光合印记 | 回合结束获得 1 能量 |\n| 攻击印记 | 全技能威力 +10% |\n\n### 负面印记(NEGATIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 减速印记 | 速度 -10 |\n| 降灵印记 | 入场时失去 1 能量 |\n| 星陨印记 | 受到非幻系攻击时,消耗全部层数造成等量幻系反击伤害 |\n| 中毒印记 | 回合结束扣 3% HP |\n| 棘刺印记 | 入场时失去 6% HP |\n\n---\n\n## 特性系统\n\n五支预设队伍(毒队、翼王队、狼王队、平衡狼王队、沙暴武队)中全部 **24 种特性**均已实现。\n\n| 特性 | 持有精灵 | 效果简述 |\n|------|----------|---------|\n| 溶解扩散 | 千棘盔 | 水系技能命中 → 每携带 1 个毒系技能,敌方中毒 +1 层 |\n| 蚀刻 | 裘卡 | 回合结束:敌方每 2 层中毒 → 转化为 1 层中毒印记 |\n| 扩散侵蚀 | 琉璃水母 | 水系命中后,敌方中毒 +(当前层数×2) |\n| 下黑手 | 影狸 | 在场时,敌方换入精灵立刻获得 5 层中毒 |\n| 向心力 | 声波缇塔 | 前两个有伤技能威力 +30(平坦加成)|\n| 壮胆 | 巨噬针鼹 | 队伍存在虫系精灵时,双攻 +50% |\n| 翼轴 | 帕帕斯卡 | 1 号位技能获得先手 |\n| 悲悯 | 恶魔狼 | 每有 1 只力竭队友,双攻 +30% |\n| 渗透 | 棋绮后 | 使用武/地系技能后,永久攻防 +5%(无上限累积)|\n| 身经百练 | 海豹船长 | 己方每次应对,水/武技能威力 +20%/次(累积)|\n| 洁癖 | 翠顶夫人 | 换出时将全部 buff/debuff 传递给换入精灵 |\n| 飓风 | 圣羽翼王 | ①翼系队友携带相同技能时该技能获先手;②被击败时己方额外 -1 魔力 |\n| 煤渣草 | 燃薪虫 | 在场时,全场烧伤回合结束增长(+1层)而非减半 |\n| 变形活画 | 画间沉铁兽 | 对手每有 10% buff,己方攻击威力 +10%(累积)|\n| 目空 | 白金独角兽 | 非光系技能威力 +25% |\n| 绝对秩序 | 秩序鱿墨 | 受到非自身属性攻击时,伤害 -50% |\n| 暴食 | 翼龙 | 龙系技能获得先手 |\n| 虚假宝箱 | 迷迷箱怪 | 力竭时,场上敌方攻防 +20% |\n| 专注力 | 音速犬 | 入场首回合,物攻技能威力 +100% |\n| 魔法增效 | 黑猫巫师 | 魔攻技能威力 +70% |\n| 诈死 | 卡瓦重 | 己方精灵倒下时,补回被扣的 1 格生命 |\n| 嫁祸 | 朔夜伊芙 | HP 穿越 75%/50%/25% 里程碑时,技能连击次数各 +2 |\n| 特殊清洁场景 | 食尘短绒 | 回合结束:偷取敌方 1 层印记(优先正面),转移至己方 |\n| 星地善良 | 小皮球 | 回合结束时,若当前己方精灵能量归 0,自动换入 |\n\n> **注意:** 上述大部分效果来自对游戏视频的观察分析,由于作者本人不擅长 PVP,部分细节(触发时机、数值精度)可能与实际游戏存在出入。如有发现偏差欢迎在 Issues 中指出。\n\n---\n\n## 个性系统说明 & 贡献征集\n\n洛克王国世界的「个性」系统目前**绝大部分未实现**。\n\n当前版本仅实现了精灵的「性格(Nature)」(25 种命名性格,±10% 属性修正),而游戏中影响战斗的「个性」被动技能(类似于特性的第二层被动)**仍缺失**。\n\n**🙋 诚邀有 PVP 经验的玩家参与贡献:**\n\n如果你熟悉某只精灵的个性效果,欢迎通过 Issues 或 PR 提供以下信息:\n\n- 个性名称 + 持有精灵名\n- 触发条件(什么时候触发)\n- 效果描述(具体数值)\n- 参考依据(对战截图 / 视频时间戳)\n\n作者本人对 PVP 了解有限,很多效果都是通过观看视频脑测分析,难以保证准确性。社区贡献将极大地提升模拟器还原度。\n\n---\n\n## 爬虫\n\n### 可选参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔下限(秒),实际为 `delay ~ delay+1.5` 随机值 | 1.5 |\n| `--output path` | 输出 JSON 的路径 | `data/sprites.json` |\n| `--force` | 强制重爬所有精灵,并重新下载所有图片(忽略已有缓存) | — |\n\n默认情况下,爬虫会自动跳过本地 `sprites.json` 中已存在的精灵,只爬取新增内容。使用 `--force` 可强制全量重爬。\n\n### 输出文件\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整精灵数据,嵌套 JSON(含技能等级、特性) |\n| `data/sprites.csv` | 扁平化 CSV,可用 Excel / pandas 打开 |\n| `data/skills.csv` | 全技能去重列表(列名同 `skills_all.csv`) |\n| `data/urls.csv` | 爬取到的图片 URL 及本地路径,边爬边更新 |\n| `data/images/` | 下载的图片,按类型分子目录(sprites/skills/attributes/abilities/matchup) |\n| `data/sprites.backup.json` | 每次爬取前自动备份的上一版 |\n\n### 爬虫数据与战斗模拟器的同步关系\n\n| 数据文件 | 爬虫是否更新 | 说明 |\n|----------|-------------|------|\n| `data/sprites.json` | ✅ 每次爬取自动更新 | 精灵属性、可学技能列表 |\n| `data/skills_all.csv` | ❌ 静态文件,爬虫不触碰 | 技能的威力 / 能耗;来自 NRC_SIM 手工维护 |\n\n**当前数据状态:**\n- `skills_all.csv` 共收录 **488 个技能**,覆盖 roco-world 全部 487 个已知技能\n- 耗能、威力数值与 roco-world 完全一致,0 个差异\n\n---\n\n## 图鉴查看器\n\n```bash\npython viewer.py\n```\n\n终端显示类手机图鉴界面,支持翻页(`←` / `→`)、搜索(`/`)、退出(`q`)。\n\n---\n\n## 战斗模拟器\n\n```bash\npython battle.py\n```\n\n### 主菜单\n\n```\n========================================================\n 洛克王国战斗模拟器\n========================================================\n 当前队伍列表(3 支):\n 1. [预设] 预设毒队\n 2. [预设] 预设翼王队\n 3. [自定] 我的速攻队\n========================================================\n 1. 开始对战 (从列表选两支队伍)\n 2. 新建队伍 (交互组队并保存)\n 3. 管理队伍 (查看 / 删除 / 重命名 / 编辑)\n 4. 批量模拟 (选两支队伍跑 N 场)\n 5. 从图片导入队伍 (识别标准组队分享图)\n 0. 返回\n========================================================\n```\n\n### 开始对战\n\n从名册选 A、B 两队,MCTS AI 操控并实时输出日志:\n\n```\n────────────────────────────────────────── 回合 3\n 预设毒队: 裘卡 [##########] 302/302 能量: 8\n 翼王队: 声波缇塔 [####......] 149/334 能量: 7 毒2\n[A] 裘卡 使用 崩拳(物攻 武系 威力60)\n → 对 声波缇塔 造成 185 点伤害 [克制!] (HP: 334→149/334)\n```\n\n### 批量模拟\n\n```\n 批量模拟结果(100 场)\n 预设毒队 胜: 83 场 (83.0%)\n 预设翼王队 胜: 15 场 (15.0%)\n 平局: 2 场 ( 2.0%)\n 平均回合数: 97.6\n 总耗时: 0.31s (3.1ms/场)\n```\n\n### 从图片导入队伍\n\n识别游戏内标准组队分享截图,自动提取精灵名和技能,存入名册。\n\n将截图放入 `import_images/` 目录后,选择识别方式:\n\n| 方式 | 精度 | 安装 |\n|------|------|------|\n| Claude Vision API | ★★★★★ | `pip install anthropic` + 配置 `ANTHROPIC_API_KEY` |\n| rapidocr(本地) | ★★★☆☆ | `pip install rapidocr-onnxruntime` |\n| easyocr(本地) | ★★★★☆ | `pip install easyocr`(需 PyTorch) |\n\n---\n\n## 战斗引擎实现机制\n\n| 机制 | 规则 |\n|------|------|\n| **伤害公式** | `(攻/防) × 0.9 × 技能威力 × 能力等级 × 本系加成(×1.5) × 克制倍率 × 天气加成` |\n| **能力等级** | `(1 + 攻击提升 + 敌方防御降低) / (1 + 攻击降低 + 敌方防御提升)` |\n| **属性克制** | 单弱/单抗=2x/0.5x;双弱=3x(非400%);双抗=0.25x;无免疫 |\n| **性格修正** | 25 种命名性格,±10%,仅作用于物攻/物防/魔攻/魔防/速度(HP不受影响)|\n| **胜利条件** | 4 格生命制:击倒对方精灵 -1格,一方生命格归0则判负 |\n| **烧伤** | 每回合 `-2% × 层数` HP,层数减半衰减,归零消失 |\n| **中毒** | 每回合 `-3% × 层数` HP,层数不衰减 |\n| **冻结** | 回合结束时若 HP < `maxHP × 层数/12` 则死亡 |\n| **寄生** | 被寄生者每回合 -8% HP,寄生者在场时回复等量 |\n| **应对** | 攻击 vs 防御/状态、防御 vs 状态 各触发对应额外效果 |\n| **天气** | 雪天:全场 +2 冻结/回合;沙暴:地系技能能耗减半;雨天:水系威力 +50% |\n| **换人** | 主动换人 / 精灵倒下后自动切换到首位存活精灵 |\n| **能量** | 汇合聚能 +5,技能各有消耗,不足时强制聚能 |\n| **印记** | 队伍级正/负印记各 1 槽,换人不消失;12 种印记各有回合效果或触发效果 |\n| **先手** | `有效速度 = 基础速度 × (1 + 先手修正) - 减速印记惩罚` |\n\n---\n\n## 项目结构\n\n```\nrocom-data/\n├── rocom_scraper.py 爬虫主程序\n├── viewer.py 终端图鉴查看器\n├── battle.py 战斗模拟器主入口\n├── train.py MCTS AI 批量训练\n├── run.bat Windows 一键启动菜单\n├── requirements.txt 依赖清单\n│\n├── data/\n│ ├── sprites.json 精灵完整数据(爬虫输出)\n│ ├── sprites.csv 精灵扁平化数据\n│ ├── skills_all.csv 技能库(含威力数值)\n│ ├── teams.json 队伍名册(自动生成)\n│ ├── experience/ MCTS 经验数据库(每队一个 JSON)\n│ └── strategies/ YAML 策略配置文件目录\n│ └── _template.yaml 策略文件模板\n│\n├── import_images/ 队伍分享截图放置目录\n│\n└── sim/ 战斗引擎\n ├── battle_engine.py 回合主循环\n ├── battle_state.py 战斗状态容器(含印记槽)\n ├── damage_calc.py 伤害公式\n ├── counter_system.py 应对系统\n ├── ability_engine.py 特性系统(24 种特性全实现)\n ├── mark_system.py 印记系统(12 种印记)\n ├── mcts.py 蒙特卡洛树搜索核心\n ├── mcts_agent.py MCTS 智能体封装\n ├── experience_db.py 经验数据库\n ├── strategy.py YAML 策略解析与权重应用\n ├── pokemon.py 精灵模型(含双属性、性格)\n ├── skill.py 技能数据模型\n ├── types.py 属性枚举 + 克制表\n ├── pokemon_db.py 精灵数据库\n ├── skill_db.py 技能数据库\n ├── team_builder.py 精灵构建\n ├── team_builder_interactive.py 交互式组队\n ├── team_roster.py 队伍名册持久化\n ├── team_image_parser.py 图片识别(Claude Vision API)\n └── team_image_parser_ocr.py 图片识别(本地 OCR)\n```\n\n---\n\n## 免责声明\n\n- 本项目仅供个人学习使用,请勿高频请求 BWIKI,以免对服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- **战斗模拟结果仅供参考**,与游戏内真实对局存在差异,请以游戏内实际表现为准\n- 使用本项目产生的一切后果由使用者自行承担\n\n---\n\n## 贡献\n\n欢迎提 PR 或 Issue:\n- 修复战斗机制偏差\n- 补充精灵个性效果\n- 完善技能描述解析\n- 参与 v2.0 游戏画面识别功能开发\n\n---\n\n## 致谢\n\n本项目由 [AofeiLi-code](https://github.com/AofeiLi-code) 负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n\n战斗引擎(`sim/` 目录)基于 [NRC_SIM](https://github.com/AofeiLi-code/NRC_SIM),遵循 MIT License。\n"}, "382a79bfa41d8c3cf758b554c0fb5726128b532e": {"t": 1785764683.2869859, "n": 10746, "h": "767aa8f0a249f91b", "c": "# rocom-data · v1.0\n\n洛克王国世界完整数据爬虫 + 战斗模拟器 + MCTS AI 对战引擎。\n\n爬取 BWIKI 精灵图鉴,附带终端图鉴查看器、自由组队战斗模拟器,以及基于 **蒙特卡洛树搜索(MCTS)** 的 AI 智能体,支持通过 YAML 配置文件指导 AI 作战风格。\n\n> ⚠️ **战斗模拟器仅供参考,结果不代表真实游戏表现。**\n> 详见「[模拟器精度说明](#模拟器精度说明)」章节。\n\n---\n\n## 功能一览\n\n| 功能 | 说明 |\n|------|------|\n| 🕷️ 全量爬取 | 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV |\n| 🔄 检查更新 | 对比本地与 wiki 的差异,仅增量爬取新增精灵 |\n| 📖 图鉴查看器 | 在终端按页浏览每只精灵的完整信息,支持搜索 |\n| ⚔️ 战斗模拟器 | 自由组队 + 队伍名册,完整战斗机制模拟 |\n| 🤖 MCTS AI | 蒙特卡洛树搜索智能体,支持积累对局经验,YAML 策略配置 |\n| 📋 队伍名册 | 队伍持久化存储,内置预设 + 用户自定义,随时调取并编辑 |\n| 🖼️ 图片导入 | 识别游戏内队伍分享截图,自动解析精灵和技能并存入名册 |\n\n---\n\n## 环境要求\n\n- Python 3.10+\n\n```bash\npip install -r requirements.txt\n```\n\n### 依赖说明\n\n| 库 | 用途 | 是否必须 |\n|----|------|----------|\n| `requests` | 爬虫网络请求 | ✅ |\n| `beautifulsoup4` | 爬虫 HTML 解析 | ✅ |\n| `rich` | 图鉴查看器 UI | ✅ |\n| `pyyaml` | YAML 策略配置文件解析 | ✅ |\n| `anthropic` | 图片导入 — API 识别方式 | 可选 |\n| `rapidocr-onnxruntime` | 图片导入 — 本地 OCR(轻量,约 50MB) | 可选 |\n| `easyocr` | 图片导入 — 本地 OCR(高精度,依赖 PyTorch) | 可选 |\n\n图片导入功能至少安装 `anthropic` 或 `rapidocr-onnxruntime` 其中一个。\n\n---\n\n## 快速启动\n\n### 方式一:双击 run.bat(Windows 推荐)\n\n```\n================================\n Rocom Sprite Data Tool\n================================\n 1. Full scrape (all sprites) ← 全量爬取\n 2. Check for updates ← 检查更新\n 3. Browse sprites (viewer) ← 图鉴查看器\n 4. Battle simulator ← 战斗模拟器\n 5. Exit\n================================\n```\n\n### 方式二:命令行\n\n```bash\npython rocom_scraper.py # 全量爬取\npython rocom_scraper.py --check-update # 检查更新\npython viewer.py # 图鉴查看器\npython battle.py # 战斗模拟器(含 AI 对战)\npython train.py # 批量训练 MCTS AI\n```\n\n---\n\n## MCTS AI 对战引擎\n\n### AI 是如何工作的\n\n本项目的 AI 对战基于 **蒙特卡洛树搜索(MCTS)**,而非随机操作。每一回合,AI 会:\n\n1. **展开模拟树**:从当前状态克隆多个分支,对每个候选行动运行前瞻模拟(默认 100 次迭代)\n2. **评估得分**:根据双方生命格差值、当前 HP 比例、场上状态估算该分支的\"胜利期望\"\n3. **选择最优行动**:UCB1 公式平衡探索(试新动作)与利用(选已知好动作)\n4. **积累经验**:每局结束后,将胜负结果回溯到历史决策树,更新各状态下动作的胜率权重\n5. **经验持久化**:对局经验保存在 `data/experience/<队伍名>.json`,每次对战自动加载,越打越强\n\n> MCTS 本身不具备\"学习\"权重的神经网络,而是通过**统计每个局面下每种行动的历史胜率**来做出判断。经验越多,决策越稳定。这是一种\"无模型、无神经网络\"的纯树搜索方案,对战效果接近人类中等水平。\n\n### YAML 策略配置\n\n通过编写 YAML 文件,可以向 AI 注入人类的战斗直觉,大幅提升其在特定队伍上的表现。\n\n**文件位置:** `data/strategies/<队伍名>.yaml`(参考模板 `data/strategies/_template.yaml`)\n\n```yaml\n# 示例:为毒队配置策略\nteam: 预设毒队\nstarter: 影狸 # 首发精灵\n\nskill_priority:\n 影狸: [感染病, 毒液渗透, 嘲弄, 恶意逃离] # 优先传毒,再逃脱\n 裘卡: [毒囊, 崩拳, 阻断, 防御]\n\nswitch_rules:\n - when: type_disadvantaged # 属性被克制时\n action: switch\n to: type_counter # 换克制对方的精灵\n\n - when: hp_pct < 25\n action: switch\n to: highest_hp\n\ngeneral:\n prefer_gather_below_energy: 3\n prefer_attack_when_type_advantage: true\n```\n\n策略权重与 MCTS 经验权重相乘,策略推荐的行动权重 ×3.0,排斥的行动权重 ×0.2,AI 会在策略偏好的方向上更积极地探索。\n\n**可用条件(when):**\n\n| 条件 | 说明 |\n|------|------|\n| `hp_pct < N` | 己方当前精灵 HP 低于 N% |\n| `energy < N` | 己方能量低于 N |\n| `type_disadvantaged` | 己方精灵属性被克制 |\n| `type_advantaged` | 己方精灵有属性克制对手 |\n| `enemy_hp_pct < N` | 对手 HP 低于 N% |\n| `always` | 无条件(默认规则) |\n\n### 未来目标:游戏画面识别辅助\n\nv2.0 的目标是接入 **游戏画面实时读取**,让 AI 真正用于游戏内辅助决策:\n\n- 通过截图识别当前上场精灵、双方 HP/能量、已使用技能等战场信息\n- 将识别到的状态转换为引擎内战斗状态\n- MCTS AI 给出推荐行动(显示在辅助窗口中)\n- 实现对战全程的\"AI 辅助看板\",而非自动操作\n\n这一功能目前仍在规划阶段,有兴趣参与的开发者欢迎提 PR。\n\n---\n\n## 模拟器精度说明\n\n**本模拟器力求对五支预设队伍实现接近 100% 的原游戏战斗还原度。** \n对于自定义队伍,精度取决于所用精灵的特性是否已实现。\n\n| 项目 | 实现情况 | 说明 |\n|------|----------|------|\n| 六维属性 | ✅ 已实现 | 种族值 + 个体值规则 + 性格修正公式计算 |\n| 双属性精灵 | ✅ 已实现 | 221 只双属精灵全覆盖;双弱=300%(非400%),双抗=25% |\n| 属性克制表 | ✅ 已对齐 | 采用 roco-world 官方数据,无免疫(最低0.5x),18 种属性 |\n| 性格系统 | ✅ 已实现 | 25 种命名性格(胆小/开朗等),±10%,仅作用于 5 个战斗属性 |\n| 胜利条件 | ✅ 已实现 | 4 格生命制:己方精灵倒下 -1 格,归0判负 |\n| 技能数据 | ✅ 已对齐 | 488 个技能,与 roco-world 一致;耗能/威力 0 差异 |\n| 技能效果 | ⚠️ 部分实现 | 通过正则解析技能描述,常见效果已覆盖;少数复杂技能效果退化 |\n| 异常状态 | ✅ 已实现 | 烧伤 / 中毒 / 冻结 / 寄生,规则见下方机制表 |\n| 应对机制 | ✅ 已实现 | 攻击/防御/状态三类应对的减伤、反弹、威力倍率 |\n| 天气系统 | ✅ 已实现 | 雪天 / 沙暴 / 雨天,持续 8 回合 |\n| **印记系统** | ✅ **已实现** | 12 种正负印记,详见「[印记系统](#印记系统)」章节 |\n| **特性系统** | ✅ **部分实现** | 五支预设队伍全部 24 种特性已实现;详见「[特性系统](#特性系统)」|\n| 对战策略 | ✅ MCTS AI | 蒙特卡洛树搜索,支持经验积累和 YAML 策略配置 |\n\n---\n\n## 印记系统\n\n印记是队伍级别的持续效果,换人不消失。每支队伍同时最多存在 **1 种正面印记 + 1 种负面印记**。\n\n- **相同类别的新印记直接顶替旧印记**(异种覆盖)\n- **相同种类的印记则叠加层数**\n- 只有清除类技能或被顶替才会消失\n\n### 正面印记(POSITIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 湿润印记 | 全技能能耗 -1 |\n| 龙噬印记 | 使用 3 能耗技能时,自身双攻 +30% |\n| 蓄势印记 | 攻击技能威力 +30%,能耗 +1 |\n| 风起印记 | 本回合先手时,技能威力 +20% |\n| 蓄电印记 | 攻击技能威力平坦 +10 |\n| 光合印记 | 回合结束获得 1 能量 |\n| 攻击印记 | 全技能威力 +10% |\n\n### 负面印记(NEGATIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 减速印记 | 速度 -10 |\n| 降灵印记 | 入场时失去 1 能量 |\n| 星陨印记 | 受到非幻系攻击时,消耗全部层数造成等量幻系反击伤害 |\n| 中毒印记 | 回合结束扣 3% HP |\n| 棘刺印记 | 入场时失去 6% HP |\n\n---\n\n## 特性系统\n\n五支预设队伍(毒队、翼王队、狼王队、平衡狼王队、沙暴武队)中全部 **24 种特性**均已实现。\n\n| 特性 | 持有精灵 | 效果简述 |\n|------|----------|---------|\n| 溶解扩散 | 千棘盔 | 水系技能命中 → 每携带 1 个毒系技能,敌方中毒 +1 层 |\n| 蚀刻 | 裘卡 | 回合结束:敌方每 2 层中毒 → 转化为 1 层中毒印记 |\n| 扩散侵蚀 | 琉璃水母 | 水系命中后,敌方中毒 +(当前层数×2) |\n| 下黑手 | 影狸 | 在场时,敌方换入精灵立刻获得 5 层中毒 |\n| 向心力 | 声波缇塔 | 前两个有伤技能威力 +30(平坦加成)|\n| 壮胆 | 巨噬针鼹 | 队伍存在虫系精灵时,双攻 +50% |\n| 翼轴 | 帕帕斯卡 | 1 号位技能获得先手 |\n| 悲悯 | 恶魔狼 | 每有 1 只力竭队友,双攻 +30% |\n| 渗透 | 棋绮后 | 使用武/地系技能后,永久攻防 +5%(无上限累积)|\n| 身经百练 | 海豹船长 | 己方每次应对,水/武技能威力 +20%/次(累积)|\n| 洁癖 | 翠顶夫人 | 换出时将全部 buff/debuff 传递给换入精灵 |\n| 飓风 | 圣羽翼王 | ①翼系队友携带相同技能时该技能获先手;②被击败时己方额外 -1 魔力 |\n| 煤渣草 | 燃薪虫 | 在场时,全场烧伤回合结束增长(+1层)而非减半 |\n| 变形活画 | 画间沉铁兽 | 对手每有 10% buff,己方攻击威力 +10%(累积)|\n| 目空 | 白金独角兽 | 非光系技能威力 +25% |\n| 绝对秩序 | 秩序鱿墨 | 受到非自身属性攻击时,伤害 -50% |\n| 暴食 | 翼龙 | 龙系技能获得先手 |\n| 虚假宝箱 | 迷迷箱怪 | 力竭时,场上敌方攻防 +20% |\n| 专注力 | 音速犬 | 入场首回合,物攻技能威力 +100% |\n| 魔法增效 | 黑猫巫师 | 魔攻技能威力 +70% |\n| 诈死 | 卡瓦重 | 己方精灵倒下时,补回被扣的 1 格生命 |\n| 嫁祸 | 朔夜伊芙 | HP 穿越 75%/50%/25% 里程碑时,技能连击次数各 +2 |\n| 特殊清洁场景 | 食尘短绒 | 回合结束:偷取敌方 1 层印记(优先正面),转移至己方 |\n| 星地善良 | 小皮球 | 回合结束时,若当前己方精灵能量归 0,自动换入 |\n\n> **注意:** 上述大部分效果来自对游戏视频的观察分析,由于作者本人不擅长 PVP,部分细节(触发时机、数值精度)可能与实际游戏存在出入。如有发现偏差欢迎在 Issues 中指出。\n\n---\n\n## 个性系统说明 & 贡献征集\n\n洛克王国世界的「个性」系统目前**绝大部分未实现**。\n\n当前版本仅实现了精灵的「性格(Nature)」(25 种命名性格,±10% 属性修正),而游戏中影响战斗的「个性」被动技能(类似于特性的第二层被动)**仍缺失**。\n\n**🙋 诚邀有 PVP 经验的玩家参与贡献:**\n\n如果你熟悉某只精灵的个性效果,欢迎通过 Issues 或 PR 提供以下信息:\n\n- 个性名称 + 持有精灵名\n- 触发条件(什么时候触发)\n- 效果描述(具体数值)\n- 参考依据(对战截图 / 视频时间戳)\n\n作者本人对 PVP 了解有限,很多效果都是通过观看视频脑测分析,难以保证准确性。社区贡献将极大地提升模拟器还原度。\n\n---\n\n## 爬虫\n\n### 可选参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔下限(秒),实际为 `delay ~ delay+1.5` 随机值 | 1.5 |\n| `--output path` | 输出 JSON 的路径 | `data/sprites.json` |\n| `--check-update` | 增量更新模式 | — |\n\n### 输出文件\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整精灵数据,嵌套 JSON |\n| `data/sprites.csv` | 扁平化 CSV,可用 Excel / pandas 打开 |\n| `data/sprites.backup.json` | 每次爬取前自动备份的上一版 |\n\n### 爬虫数据与战斗模拟器的同步关系\n\n| 数据文件 | 爬虫是否更新 | 说明 |\n|----------|-------------|------|\n| `data/sprites.json` | ✅ 每次爬取自动更新 | 精灵属性、可学技能列表 |\n| `data/skills_all.csv` | ❌ 静态文件,爬虫不触碰 | 技能的威力 / 能耗;来自 NRC_SIM 手工维护 |\n\n**当前数据状态:**\n- `skills_all.csv` 共收录 **488 个技能**,覆盖 roco-world 全部 487 个已知技能\n- 耗能、威力数值与 roco-world 完全一致,0 个差异\n\n---\n\n## 图鉴查看器\n\n```bash\npython viewer.py\n```\n\n终端显示类手机图鉴界面,支持翻页(`←` / `→`)、搜索(`/`)、退出(`q`)。\n\n---\n\n## 战斗模拟器\n\n```bash\npython battle.py\n```\n\n### 主菜单\n\n```\n========================================================\n 洛克王国战斗模拟器\n========================================================\n 当前队伍列表(3 支):\n 1. [预设] 预设毒队\n 2. [预设] 预设翼王队\n 3. [自定] 我的速攻队\n========================================================\n 1. 开始对战 (从列表选两支队伍)\n 2. 新建队伍 (交互组队并保存)\n 3. 管理队伍 (查看 / 删除 / 重命名 / 编辑)\n 4. 批量模拟 (选两支队伍跑 N 场)\n 5. 从图片导入队伍 (识别标准组队分享图)\n 0. 返回\n========================================================\n```\n\n### 开始对战\n\n从名册选 A、B 两队,MCTS AI 操控并实时输出日志:\n\n```\n────────────────────────────────────────── 回合 3\n 预设毒队: 裘卡 [##########] 302/302 能量: 8\n 翼王队: 声波缇塔 [####......] 149/334 能量: 7 毒2\n[A] 裘卡 使用 崩拳(物攻 武系 威力60)\n → 对 声波缇塔 造成 185 点伤害 [克制!] (HP: 334→149/334)\n```\n\n### 批量模拟\n\n```\n 批量模拟结果(100 场)\n 预设毒队 胜: 83 场 (83.0%)\n 预设翼王队 胜: 15 场 (15.0%)\n 平局: 2 场 ( 2.0%)\n 平均回合数: 97.6\n 总耗时: 0.31s (3.1ms/场)\n```\n\n### 从图片导入队伍\n\n识别游戏内标准组队分享截图,自动提取精灵名和技能,存入名册。\n\n将截图放入 `import_images/` 目录后,选择识别方式:\n\n| 方式 | 精度 | 安装 |\n|------|------|------|\n| Claude Vision API | ★★★★★ | `pip install anthropic` + 配置 `ANTHROPIC_API_KEY` |\n| rapidocr(本地) | ★★★☆☆ | `pip install rapidocr-onnxruntime` |\n| easyocr(本地) | ★★★★☆ | `pip install easyocr`(需 PyTorch) |\n\n---\n\n## 战斗引擎实现机制\n\n| 机制 | 规则 |\n|------|------|\n| **伤害公式** | `(攻/防) × 0.9 × 技能威力 × 能力等级 × 本系加成(×1.5) × 克制倍率 × 天气加成` |\n| **能力等级** | `(1 + 攻击提升 + 敌方防御降低) / (1 + 攻击降低 + 敌方防御提升)` |\n| **属性克制** | 单弱/单抗=2x/0.5x;双弱=3x(非400%);双抗=0.25x;无免疫 |\n| **性格修正** | 25 种命名性格,±10%,仅作用于物攻/物防/魔攻/魔防/速度(HP不受影响)|\n| **胜利条件** | 4 格生命制:击倒对方精灵 -1格,一方生命格归0则判负 |\n| **烧伤** | 每回合 `-2% × 层数` HP,层数减半衰减,归零消失 |\n| **中毒** | 每回合 `-3% × 层数` HP,层数不衰减 |\n| **冻结** | 回合结束时若 HP < `maxHP × 层数/12` 则死亡 |\n| **寄生** | 被寄生者每回合 -8% HP,寄生者在场时回复等量 |\n| **应对** | 攻击 vs 防御/状态、防御 vs 状态 各触发对应额外效果 |\n| **天气** | 雪天:全场 +2 冻结/回合;沙暴:地系技能能耗减半;雨天:水系威力 +50% |\n| **换人** | 主动换人 / 精灵倒下后自动切换到首位存活精灵 |\n| **能量** | 汇合聚能 +5,技能各有消耗,不足时强制聚能 |\n| **印记** | 队伍级正/负印记各 1 槽,换人不消失;12 种印记各有回合效果或触发效果 |\n| **先手** | `有效速度 = 基础速度 × (1 + 先手修正) - 减速印记惩罚` |\n\n---\n\n## 项目结构\n\n```\nrocom-data/\n├── rocom_scraper.py 爬虫主程序\n├── viewer.py 终端图鉴查看器\n├── battle.py 战斗模拟器主入口\n├── train.py MCTS AI 批量训练\n├── run.bat Windows 一键启动菜单\n├── requirements.txt 依赖清单\n│\n├── data/\n│ ├── sprites.json 精灵完整数据(爬虫输出)\n│ ├── sprites.csv 精灵扁平化数据\n│ ├── skills_all.csv 技能库(含威力数值)\n│ ├── teams.json 队伍名册(自动生成)\n│ ├── experience/ MCTS 经验数据库(每队一个 JSON)\n│ └── strategies/ YAML 策略配置文件目录\n│ └── _template.yaml 策略文件模板\n│\n├── import_images/ 队伍分享截图放置目录\n│\n└── sim/ 战斗引擎\n ├── battle_engine.py 回合主循环\n ├── battle_state.py 战斗状态容器(含印记槽)\n ├── damage_calc.py 伤害公式\n ├── counter_system.py 应对系统\n ├── ability_engine.py 特性系统(24 种特性全实现)\n ├── mark_system.py 印记系统(12 种印记)\n ├── mcts.py 蒙特卡洛树搜索核心\n ├── mcts_agent.py MCTS 智能体封装\n ├── experience_db.py 经验数据库\n ├── strategy.py YAML 策略解析与权重应用\n ├── pokemon.py 精灵模型(含双属性、性格)\n ├── skill.py 技能数据模型\n ├── types.py 属性枚举 + 克制表\n ├── pokemon_db.py 精灵数据库\n ├── skill_db.py 技能数据库\n ├── team_builder.py 精灵构建\n ├── team_builder_interactive.py 交互式组队\n ├── team_roster.py 队伍名册持久化\n ├── team_image_parser.py 图片识别(Claude Vision API)\n └── team_image_parser_ocr.py 图片识别(本地 OCR)\n```\n\n---\n\n## 免责声明\n\n- 本项目仅供个人学习使用,请勿高频请求 BWIKI,以免对服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- **战斗模拟结果仅供参考**,与游戏内真实对局存在差异,请以游戏内实际表现为准\n- 使用本项目产生的一切后果由使用者自行承担\n\n---\n\n## 贡献\n\n欢迎提 PR 或 Issue:\n- 修复战斗机制偏差\n- 补充精灵个性效果\n- 完善技能描述解析\n- 参与 v2.0 游戏画面识别功能开发\n\n---\n\n## 致谢\n\n本项目由 [AofeiLi-code](https://github.com/AofeiLi-code) 负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n\n战斗引擎(`sim/` 目录)基于 [NRC_SIM](https://github.com/AofeiLi-code/NRC_SIM),遵循 MIT License。\n"}, "aff52361bf5ee54bbacdf8fa810c349dbfa22ce2": {"t": 1785764684.946743, "n": 10749, "h": "122a676c7569c83f", "c": "# rocom-data · v1.0\n\n洛克王国世界完整数据爬虫 + 战斗模拟器 + MCTS AI 对战引擎。\n\n爬取 BWIKI 精灵图鉴,附带终端图鉴查看器、自由组队战斗模拟器,以及基于 **蒙特卡洛树搜索(MCTS)** 的 AI 智能体,支持通过 YAML 配置文件指导 AI 作战风格。\n\n> ⚠️ **战斗模拟器仅供参考,结果不代表真实游戏表现。**\n> 详见「[模拟器精度说明](#模拟器精度说明)」章节。\n\n---\n\n## 功能一览\n\n| 功能 | 说明 |\n|------|------|\n| 🕷️ 全量爬取 | 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV |\n| 🔄 检查更新 | 对比本地与 wiki 的差异,仅增量爬取新增精灵 |\n| 📖 图鉴查看器 | 在终端按页浏览每只精灵的完整信息,支持搜索 |\n| ⚔️ 战斗模拟器 | 自由组队 + 队伍名册,完整战斗机制模拟 |\n| 🤖 MCTS AI | 蒙特卡洛树搜索智能体,支持积累对局经验,YAML 策略配置 |\n| 📋 队伍名册 | 队伍持久化存储,内置预设 + 用户自定义,随时调取并编辑 |\n| 🖼️ 图片导入 | 识别游戏内队伍分享截图,自动解析精灵和技能并存入名册 |\n\n---\n\n## 环境要求\n\n- Python 3.10+\n\n```bash\npip install -r requirements.txt\n```\n\n### 依赖说明\n\n| 库 | 用途 | 是否必须 |\n|----|------|----------|\n| `requests` | 爬虫网络请求 | ✅ |\n| `beautifulsoup4` | 爬虫 HTML 解析 | ✅ |\n| `rich` | 图鉴查看器 UI | ✅ |\n| `pyyaml` | YAML 策略配置文件解析 | ✅ |\n| `anthropic` | 图片导入 — API 识别方式 | 可选 |\n| `rapidocr-onnxruntime` | 图片导入 — 本地 OCR(轻量,约 50MB) | 可选 |\n| `easyocr` | 图片导入 — 本地 OCR(高精度,依赖 PyTorch) | 可选 |\n\n图片导入功能至少安装 `anthropic` 或 `rapidocr-onnxruntime` 其中一个。\n\n---\n\n## 快速启动\n\n### 方式一:双击 run.bat(Windows 推荐)\n\n```\n================================\n Rocom Sprite Data Tool\n================================\n 1. Full scrape (all sprites) ← 全量爬取\n 2. Check for updates ← 检查更新\n 3. Browse sprites (viewer) ← 图鉴查看器\n 4. Battle simulator ← 战斗模拟器\n 5. Exit\n================================\n```\n\n### 方式二:命令行\n\n```bash\npython rocom_scraper.py # 全量爬取\npython rocom_scraper.py --check-update # 检查更新\npython viewer.py # 图鉴查看器\npython battle.py # 战斗模拟器(含 AI 对战)\npython train.py # 批量训练 MCTS AI\n```\n\n---\n\n## MCTS AI 对战引擎\n\n### AI 是如何工作的\n\n本项目的 AI 对战基于 **蒙特卡洛树搜索(MCTS)**,而非随机操作。每一回合,AI 会:\n\n1. **展开模拟树**:从当前状态克隆多个分支,对每个候选行动运行前瞻模拟(默认 100 次迭代)\n2. **评估得分**:根据双方生命格差值、当前 HP 比例、场上状态估算该分支的\"胜利期望\"\n3. **选择最优行动**:UCB1 公式平衡探索(试新动作)与利用(选已知好动作)\n4. **积累经验**:每局结束后,将胜负结果回溯到历史决策树,更新各状态下动作的胜率权重\n5. **经验持久化**:对局经验保存在 `data/experience/<队伍名>.json`,每次对战自动加载,越打越强\n\n> MCTS 本身不具备\"学习\"权重的神经网络,而是通过**统计每个局面下每种行动的历史胜率**来做出判断。经验越多,决策越稳定。这是一种\"无模型、无神经网络\"的纯树搜索方案,对战效果接近人类中等水平。\n\n### YAML 策略配置\n\n通过编写 YAML 文件,可以向 AI 注入人类的战斗直觉,大幅提升其在特定队伍上的表现。\n\n**文件位置:** `data/strategies/<队伍名>.yaml`(参考模板 `data/strategies/_template.yaml`)\n\n```yaml\n# 示例:为毒队配置策略\nteam: 预设毒队\nstarter: 影狸 # 首发精灵\n\nskill_priority:\n 影狸: [感染病, 毒液渗透, 嘲弄, 恶意逃离] # 优先传毒,再逃脱\n 裘卡: [毒囊, 崩拳, 阻断, 防御]\n\nswitch_rules:\n - when: type_disadvantaged # 属性被克制时\n action: switch\n to: type_counter # 换克制对方的精灵\n\n - when: hp_pct < 25\n action: switch\n to: highest_hp\n\ngeneral:\n prefer_gather_below_energy: 3\n prefer_attack_when_type_advantage: true\n```\n\n策略权重与 MCTS 经验权重相乘,策略推荐的行动权重 ×3.0,排斥的行动权重 ×0.2,AI 会在策略偏好的方向上更积极地探索。\n\n**可用条件(when):**\n\n| 条件 | 说明 |\n|------|------|\n| `hp_pct < N` | 己方当前精灵 HP 低于 N% |\n| `energy < N` | 己方能量低于 N |\n| `type_disadvantaged` | 己方精灵属性被克制 |\n| `type_advantaged` | 己方精灵有属性克制对手 |\n| `enemy_hp_pct < N` | 对手 HP 低于 N% |\n| `always` | 无条件(默认规则) |\n\n### 未来目标:游戏画面识别辅助\n\nv2.0 的目标是接入 **游戏画面实时读取**,让 AI 真正用于游戏内辅助决策:\n\n- 通过截图识别当前上场精灵、双方 HP/能量、已使用技能等战场信息\n- 将识别到的状态转换为引擎内战斗状态\n- MCTS AI 给出推荐行动(显示在辅助窗口中)\n- 实现对战全程的\"AI 辅助看板\",而非自动操作\n\n这一功能目前仍在规划阶段,有兴趣参与的开发者欢迎提 PR。\n\n---\n\n## 模拟器精度说明\n\n**本模拟器力求对五支预设队伍实现接近 100% 的原游戏战斗还原度。** \n对于自定义队伍,精度取决于所用精灵的特性是否已实现。\n\n| 项目 | 实现情况 | 说明 |\n|------|----------|------|\n| 六维属性 | ✅ 已实现 | 种族值 + 个体值规则 + 性格修正公式计算 |\n| 双属性精灵 | ✅ 已实现 | 221 只双属精灵全覆盖;双弱=300%(非400%),双抗=25% |\n| 属性克制表 | ✅ 已对齐 | 采用 roco-world 官方数据,无免疫(最低0.5x),18 种属性 |\n| 性格系统 | ✅ 已实现 | 25 种命名性格(胆小/开朗等),±10%,仅作用于 5 个战斗属性 |\n| 胜利条件 | ✅ 已实现 | 4 格生命制:己方精灵倒下 -1 格,归0判负 |\n| 技能数据 | ✅ 已对齐 | 488 个技能,与 roco-world 一致;耗能/威力 0 差异 |\n| 技能效果 | ⚠️ 部分实现 | 通过正则解析技能描述,常见效果已覆盖;少数复杂技能效果退化 |\n| 异常状态 | ✅ 已实现 | 烧伤 / 中毒 / 冻结 / 寄生,规则见下方机制表 |\n| 应对机制 | ✅ 已实现 | 攻击/防御/状态三类应对的减伤、反弹、威力倍率 |\n| 天气系统 | ✅ 已实现 | 雪天 / 沙暴 / 雨天,持续 8 回合 |\n| **印记系统** | ✅ **已实现** | 12 种正负印记,详见「[印记系统](#印记系统)」章节 |\n| **特性系统** | ✅ **部分实现** | 五支预设队伍全部 24 种特性已实现;详见「[特性系统](#特性系统)」|\n| 对战策略 | ✅ MCTS AI | 蒙特卡洛树搜索,支持经验积累和 YAML 策略配置 |\n\n---\n\n## 印记系统\n\n印记是队伍级别的持续效果,换人不消失。每支队伍同时最多存在 **1 种正面印记 + 1 种负面印记**。\n\n- **相同类别的新印记直接顶替旧印记**(异种覆盖)\n- **相同种类的印记则叠加层数**\n- 只有清除类技能或被顶替才会消失\n\n### 正面印记(POSITIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 湿润印记 | 全技能能耗 -1 |\n| 龙噬印记 | 使用 3 能耗技能时,自身双攻 +30% |\n| 蓄势印记 | 攻击技能威力 +30%,能耗 +1 |\n| 风起印记 | 本回合先手时,技能威力 +20% |\n| 蓄电印记 | 攻击技能威力平坦 +10 |\n| 光合印记 | 回合结束获得 1 能量 |\n| 攻击印记 | 全技能威力 +10% |\n\n### 负面印记(NEGATIVE)\n\n| 印记 | 效果(每层) |\n|------|------------|\n| 减速印记 | 速度 -10 |\n| 降灵印记 | 入场时失去 1 能量 |\n| 星陨印记 | 受到非幻系攻击时,消耗全部层数造成等量幻系反击伤害 |\n| 中毒印记 | 回合结束扣 3% HP |\n| 棘刺印记 | 入场时失去 6% HP |\n\n---\n\n## 特性系统\n\n五支预设队伍(毒队、翼王队、暴食翼龙队、秩序墨鱼队、皮球组合队)中全部 **24 种特性**均已实现。\n\n| 特性 | 持有精灵 | 效果简述 |\n|------|----------|---------|\n| 溶解扩散 | 千棘盔 | 水系技能命中 → 每携带 1 个毒系技能,敌方中毒 +1 层 |\n| 蚀刻 | 裘卡 | 回合结束:敌方每 2 层中毒 → 转化为 1 层中毒印记 |\n| 扩散侵蚀 | 琉璃水母 | 水系命中后,敌方中毒 +(当前层数×2) |\n| 下黑手 | 影狸 | 在场时,敌方换入精灵立刻获得 5 层中毒 |\n| 向心力 | 声波缇塔 | 前两个有伤技能威力 +30(平坦加成)|\n| 壮胆 | 巨噬针鼹 | 队伍存在虫系精灵时,双攻 +50% |\n| 翼轴 | 帕帕斯卡 | 1 号位技能获得先手 |\n| 悲悯 | 恶魔狼 | 每有 1 只力竭队友,双攻 +30% |\n| 渗透 | 棋绮后 | 使用武/地系技能后,永久攻防 +5%(无上限累积)|\n| 身经百练 | 海豹船长 | 己方每次应对,水/武技能威力 +20%/次(累积)|\n| 洁癖 | 翠顶夫人 | 换出时将全部 buff/debuff 传递给换入精灵 |\n| 飓风 | 圣羽翼王 | ①翼系队友携带相同技能时该技能获先手;②被击败时己方额外 -1 魔力 |\n| 煤渣草 | 燃薪虫 | 在场时,全场烧伤回合结束增长(+1层)而非减半 |\n| 变形活画 | 画间沉铁兽 | 对手每有 10% buff,己方攻击威力 +10%(累积)|\n| 目空 | 白金独角兽 | 非光系技能威力 +25% |\n| 绝对秩序 | 秩序鱿墨 | 受到非自身属性攻击时,伤害 -50% |\n| 暴食 | 翼龙 | 龙系技能获得先手 |\n| 虚假宝箱 | 迷迷箱怪 | 力竭时,场上敌方攻防 +20% |\n| 专注力 | 音速犬 | 入场首回合,物攻技能威力 +100% |\n| 魔法增效 | 黑猫巫师 | 魔攻技能威力 +70% |\n| 诈死 | 卡瓦重 | 己方精灵倒下时,补回被扣的 1 格生命 |\n| 嫁祸 | 朔夜伊芙 | HP 穿越 75%/50%/25% 里程碑时,技能连击次数各 +2 |\n| 特殊清洁场景 | 食尘短绒 | 回合结束:偷取敌方 1 层印记(优先正面),转移至己方 |\n| 星地善良 | 小皮球 | 回合结束时,若当前己方精灵能量归 0,自动换入 |\n\n> **注意:** 上述大部分效果来自对游戏视频的观察分析,由于作者本人不擅长 PVP,部分细节(触发时机、数值精度)可能与实际游戏存在出入。如有发现偏差欢迎在 Issues 中指出。\n\n---\n\n## 个性系统说明 & 贡献征集\n\n洛克王国世界的「个性」系统目前**绝大部分未实现**。\n\n当前版本仅实现了精灵的「性格(Nature)」(25 种命名性格,±10% 属性修正),而游戏中影响战斗的「个性」被动技能(类似于特性的第二层被动)**仍缺失**。\n\n**🙋 诚邀有 PVP 经验的玩家参与贡献:**\n\n如果你熟悉某只精灵的个性效果,欢迎通过 Issues 或 PR 提供以下信息:\n\n- 个性名称 + 持有精灵名\n- 触发条件(什么时候触发)\n- 效果描述(具体数值)\n- 参考依据(对战截图 / 视频时间戳)\n\n作者本人对 PVP 了解有限,很多效果都是通过观看视频脑测分析,难以保证准确性。社区贡献将极大地提升模拟器还原度。\n\n---\n\n## 爬虫\n\n### 可选参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔下限(秒),实际为 `delay ~ delay+1.5` 随机值 | 1.5 |\n| `--output path` | 输出 JSON 的路径 | `data/sprites.json` |\n| `--check-update` | 增量更新模式 | — |\n\n### 输出文件\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整精灵数据,嵌套 JSON |\n| `data/sprites.csv` | 扁平化 CSV,可用 Excel / pandas 打开 |\n| `data/sprites.backup.json` | 每次爬取前自动备份的上一版 |\n\n### 爬虫数据与战斗模拟器的同步关系\n\n| 数据文件 | 爬虫是否更新 | 说明 |\n|----------|-------------|------|\n| `data/sprites.json` | ✅ 每次爬取自动更新 | 精灵属性、可学技能列表 |\n| `data/skills_all.csv` | ❌ 静态文件,爬虫不触碰 | 技能的威力 / 能耗;来自 NRC_SIM 手工维护 |\n\n**当前数据状态:**\n- `skills_all.csv` 共收录 **488 个技能**,覆盖 roco-world 全部 487 个已知技能\n- 耗能、威力数值与 roco-world 完全一致,0 个差异\n\n---\n\n## 图鉴查看器\n\n```bash\npython viewer.py\n```\n\n终端显示类手机图鉴界面,支持翻页(`←` / `→`)、搜索(`/`)、退出(`q`)。\n\n---\n\n## 战斗模拟器\n\n```bash\npython battle.py\n```\n\n### 主菜单\n\n```\n========================================================\n 洛克王国战斗模拟器\n========================================================\n 当前队伍列表(3 支):\n 1. [预设] 预设毒队\n 2. [预设] 预设翼王队\n 3. [自定] 我的速攻队\n========================================================\n 1. 开始对战 (从列表选两支队伍)\n 2. 新建队伍 (交互组队并保存)\n 3. 管理队伍 (查看 / 删除 / 重命名 / 编辑)\n 4. 批量模拟 (选两支队伍跑 N 场)\n 5. 从图片导入队伍 (识别标准组队分享图)\n 0. 返回\n========================================================\n```\n\n### 开始对战\n\n从名册选 A、B 两队,MCTS AI 操控并实时输出日志:\n\n```\n────────────────────────────────────────── 回合 3\n 预设毒队: 裘卡 [##########] 302/302 能量: 8\n 翼王队: 声波缇塔 [####......] 149/334 能量: 7 毒2\n[A] 裘卡 使用 崩拳(物攻 武系 威力60)\n → 对 声波缇塔 造成 185 点伤害 [克制!] (HP: 334→149/334)\n```\n\n### 批量模拟\n\n```\n 批量模拟结果(100 场)\n 预设毒队 胜: 83 场 (83.0%)\n 预设翼王队 胜: 15 场 (15.0%)\n 平局: 2 场 ( 2.0%)\n 平均回合数: 97.6\n 总耗时: 0.31s (3.1ms/场)\n```\n\n### 从图片导入队伍\n\n识别游戏内标准组队分享截图,自动提取精灵名和技能,存入名册。\n\n将截图放入 `import_images/` 目录后,选择识别方式:\n\n| 方式 | 精度 | 安装 |\n|------|------|------|\n| Claude Vision API | ★★★★★ | `pip install anthropic` + 配置 `ANTHROPIC_API_KEY` |\n| rapidocr(本地) | ★★★☆☆ | `pip install rapidocr-onnxruntime` |\n| easyocr(本地) | ★★★★☆ | `pip install easyocr`(需 PyTorch) |\n\n---\n\n## 战斗引擎实现机制\n\n| 机制 | 规则 |\n|------|------|\n| **伤害公式** | `(攻/防) × 0.9 × 技能威力 × 能力等级 × 本系加成(×1.5) × 克制倍率 × 天气加成` |\n| **能力等级** | `(1 + 攻击提升 + 敌方防御降低) / (1 + 攻击降低 + 敌方防御提升)` |\n| **属性克制** | 单弱/单抗=2x/0.5x;双弱=3x(非400%);双抗=0.25x;无免疫 |\n| **性格修正** | 25 种命名性格,±10%,仅作用于物攻/物防/魔攻/魔防/速度(HP不受影响)|\n| **胜利条件** | 4 格生命制:击倒对方精灵 -1格,一方生命格归0则判负 |\n| **烧伤** | 每回合 `-2% × 层数` HP,层数减半衰减,归零消失 |\n| **中毒** | 每回合 `-3% × 层数` HP,层数不衰减 |\n| **冻结** | 回合结束时若 HP < `maxHP × 层数/12` 则死亡 |\n| **寄生** | 被寄生者每回合 -8% HP,寄生者在场时回复等量 |\n| **应对** | 攻击 vs 防御/状态、防御 vs 状态 各触发对应额外效果 |\n| **天气** | 雪天:全场 +2 冻结/回合;沙暴:地系技能能耗减半;雨天:水系威力 +50% |\n| **换人** | 主动换人 / 精灵倒下后自动切换到首位存活精灵 |\n| **能量** | 汇合聚能 +5,技能各有消耗,不足时强制聚能 |\n| **印记** | 队伍级正/负印记各 1 槽,换人不消失;12 种印记各有回合效果或触发效果 |\n| **先手** | `有效速度 = 基础速度 × (1 + 先手修正) - 减速印记惩罚` |\n\n---\n\n## 项目结构\n\n```\nrocom-data/\n├── rocom_scraper.py 爬虫主程序\n├── viewer.py 终端图鉴查看器\n├── battle.py 战斗模拟器主入口\n├── train.py MCTS AI 批量训练\n├── run.bat Windows 一键启动菜单\n├── requirements.txt 依赖清单\n│\n├── data/\n│ ├── sprites.json 精灵完整数据(爬虫输出)\n│ ├── sprites.csv 精灵扁平化数据\n│ ├── skills_all.csv 技能库(含威力数值)\n│ ├── teams.json 队伍名册(自动生成)\n│ ├── experience/ MCTS 经验数据库(每队一个 JSON)\n│ └── strategies/ YAML 策略配置文件目录\n│ └── _template.yaml 策略文件模板\n│\n├── import_images/ 队伍分享截图放置目录\n│\n└── sim/ 战斗引擎\n ├── battle_engine.py 回合主循环\n ├── battle_state.py 战斗状态容器(含印记槽)\n ├── damage_calc.py 伤害公式\n ├── counter_system.py 应对系统\n ├── ability_engine.py 特性系统(24 种特性全实现)\n ├── mark_system.py 印记系统(12 种印记)\n ├── mcts.py 蒙特卡洛树搜索核心\n ├── mcts_agent.py MCTS 智能体封装\n ├── experience_db.py 经验数据库\n ├── strategy.py YAML 策略解析与权重应用\n ├── pokemon.py 精灵模型(含双属性、性格)\n ├── skill.py 技能数据模型\n ├── types.py 属性枚举 + 克制表\n ├── pokemon_db.py 精灵数据库\n ├── skill_db.py 技能数据库\n ├── team_builder.py 精灵构建\n ├── team_builder_interactive.py 交互式组队\n ├── team_roster.py 队伍名册持久化\n ├── team_image_parser.py 图片识别(Claude Vision API)\n └── team_image_parser_ocr.py 图片识别(本地 OCR)\n```\n\n---\n\n## 免责声明\n\n- 本项目仅供个人学习使用,请勿高频请求 BWIKI,以免对服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- **战斗模拟结果仅供参考**,与游戏内真实对局存在差异,请以游戏内实际表现为准\n- 使用本项目产生的一切后果由使用者自行承担\n\n---\n\n## 贡献\n\n欢迎提 PR 或 Issue:\n- 修复战斗机制偏差\n- 补充精灵个性效果\n- 完善技能描述解析\n- 参与 v2.0 游戏画面识别功能开发\n\n---\n\n## 致谢\n\n本项目由 [AofeiLi-code](https://github.com/AofeiLi-code) 负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n\n战斗引擎(`sim/` 目录)基于 [NRC_SIM](https://github.com/AofeiLi-code/NRC_SIM),遵循 MIT License。\n"}, "2e0537ed4fd6996d078ccaf2390e86cb2d6872cc": {"t": 1785764686.7234929, "n": 11174, "h": "566e89e99675e8dd", "c": "# rocom-data\n\n从洛克王国世界 BWIKI 爬取完整精灵图鉴数据,包含种族值、技能、特性、属性克制关系,\n附带终端图鉴查看器和战斗模拟器(支持自由组队、队伍持久化、图片识别导入)。\n\n> ⚠️ **战斗模拟器仅供参考,结果不代表真实游戏表现。**\n> 详见「[模拟器精度说明](#模拟器精度说明)」章节。\n\n## 功能一览\n\n| 功能 | 说明 |\n|------|------|\n| 🕷️ 全量爬取 | 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV |\n| 🔄 检查更新 | 对比本地与 wiki 的差异,仅增量爬取新增精灵 |\n| 📖 图鉴查看器 | 在终端按页浏览每只精灵的完整信息,支持搜索 |\n| ⚔️ 战斗模拟器 | 自由组队 + 队伍名册 + AI 随机对战,支持双属性和性格配置 |\n| 📋 队伍名册 | 队伍持久化存储,内置预设 + 用户自定义,随时调取并编辑 |\n| 🖼️ 图片导入 | 识别游戏内队伍分享截图,自动解析精灵和技能并存入名册 |\n\n---\n\n## 环境要求\n\n- Python 3.10+\n\n```bash\npip install -r requirements.txt\n```\n\n### 依赖说明\n\n| 库 | 用途 | 是否必须 |\n|----|------|----------|\n| `requests` | 爬虫网络请求 | ✅ |\n| `beautifulsoup4` | 爬虫 HTML 解析 | ✅ |\n| `rich` | 图鉴查看器 UI | ✅ |\n| `anthropic` | 图片导入 — API 识别方式 | 可选 |\n| `rapidocr-onnxruntime` | 图片导入 — 本地 OCR(轻量,约 50MB) | 可选 |\n| `easyocr` | 图片导入 — 本地 OCR(高精度,依赖 PyTorch) | 可选 |\n\n图片导入功能至少安装 `anthropic` 或 `rapidocr-onnxruntime` 其中一个。\n\n---\n\n## 快速启动\n\n### 方式一:双击 run.bat(Windows 推荐)\n\n```\n================================\n Rocom Sprite Data Tool\n================================\n 1. Full scrape (all sprites) ← 全量爬取\n 2. Check for updates ← 检查更新\n 3. Browse sprites (viewer) ← 图鉴查看器\n 4. Battle simulator ← 战斗模拟器\n 5. Exit\n================================\n```\n\n### 方式二:命令行\n\n```bash\npython rocom_scraper.py # 全量爬取\npython rocom_scraper.py --check-update # 检查更新\npython viewer.py # 图鉴查看器\npython battle.py # 战斗模拟器\n```\n\n---\n\n## 爬虫\n\n### 可选参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔下限(秒),实际为 `delay ~ delay+1.5` 随机值 | 1.5 |\n| `--output path` | 输出 JSON 的路径 | `data/sprites.json` |\n| `--check-update` | 增量更新模式 | — |\n\n### 输出文件\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整精灵数据,嵌套 JSON |\n| `data/sprites.csv` | 扁平化 CSV,可用 Excel / pandas 打开 |\n| `data/sprites.backup.json` | 每次爬取前自动备份的上一版 |\n\n### 爬虫数据与战斗模拟器的同步关系\n\n战斗模拟器依赖两个数据源,爬虫只更新其中一个:\n\n| 数据文件 | 爬虫是否更新 | 说明 |\n|----------|-------------|------|\n| `data/sprites.json` | ✅ 每次爬取自动更新 | 精灵属性、可学技能列表;更新后重启 `battle.py` 即生效 |\n| `data/skills_all.csv` | ❌ 静态文件,爬虫不触碰 | 技能的威力 / 能耗 / 效果;来自 NRC_SIM 项目手工维护 |\n\n**为什么 `skills_all.csv` 不由爬虫生成?**\nbwiki 上爬取到的技能数据 `power` 字段全为 0,威力数值并未在页面中以可抓取的格式呈现,因此威力数据由 `skills_all.csv` 单独维护。\n\n**当前数据状态(已与 roco-world 数据对齐):**\n- `skills_all.csv` 共收录 **488 个技能**,覆盖 roco-world 全部 487 个已知技能(另含 1 个独立条目\"束缚\")\n- 耗能、威力数值与 roco-world 完全一致,0 个差异\n- `skills_all.csv` 中有 **1 个技能**(束缚)未出现在任何精灵的可学列表里,属孤立条目,不影响对战\n\n**手动补充缺失技能:** 若游戏新增技能,直接在 `data/skills_all.csv` 末尾按格式追加一行:\n\n```\n技能名,属性系,类型,威力,耗能,效果描述\n新技能,水系,物攻,80,3,对敌方精灵造成物理伤害。\n```\n\n### JSON 字段说明\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `no` | int | 精灵编号 |\n| `name` | str | 精灵名称 |\n| `form` | str / null | 形态名,无则为 null |\n| `url` | str | BWIKI 原始页面链接 |\n| `has_shiny` | bool | 是否有异色图 |\n| `attributes` | list[str] | 属性,最多两个,如 `[\"火\", \"水\"]` |\n| `stats` | dict | 种族值:`hp / atk / sp_atk / def / sp_def / spd / total` |\n| `ability` | dict | 特性:`name / description` |\n| `type_matchup` | dict | 克制关系:`strong_against / weak_to / resists / resisted_by` |\n| `skills` | list[dict] | 可学技能列表,见下表 |\n\n**skills 子字段:**\n\n| 字段 | 说明 |\n|------|------|\n| `name` | 技能名 |\n| `attribute` | 技能属性(火/水/草…) |\n| `category` | 类别(物攻 / 魔攻 / 状态 / 防御) |\n| `power` | 威力数值 |\n| `cost` | 能量消耗 |\n| `description` | 技能效果描述 |\n\n---\n\n## 图鉴查看器\n\n```bash\npython viewer.py\n```\n\n终端显示类手机图鉴界面:\n\n```\n╭─────────────── 洛克王国图鉴 ───────────────╮\n│ NO.001 迪莫 │\n│ 属性 光 │\n│ ──────────────── 种族值 ───────────────── │\n│ 生命 ████████░░░░ 120 │\n│ 物攻 █████░░░░░░░ 80 │\n│ 合计 582 │\n│ ──────────────── 克制关系 ──────────────── │\n│ 克制 恶 幽 │\n│ 被克制 幽 草 │\n│ ──────────────── 技能 ──────────────────── │\n│ 猛烈撞击 普通 物攻 ★ │\n│ 对敌方精灵造成物理伤害。 │\n╰────────────────── 1 / 427 ─────────────────╯\n```\n\n| 按键 | 功能 |\n|------|------|\n| `←` / `→` 或 `a` / `d` | 切换精灵 |\n| `/` | 按名称或编号搜索 |\n| `q` | 退出 |\n\n---\n\n## 战斗模拟器\n\n```bash\npython battle.py\n# 或双击 run.bat → 4. Battle simulator\n```\n\n### ⚠ 模拟器精度说明\n\n**本模拟器仅供配队思路参考,结果不代表真实游戏中的实际表现。**\n\n| 项目 | 实现情况 | 说明 |\n|------|----------|------|\n| 六维属性 | ✅ 已实现 | 由种族值 + 个体值规则 + 性格修正公式计算 |\n| 双属性精灵 | ✅ 已实现 | 221 只双属精灵全覆盖;双弱=300%(非400%),双抗=25% |\n| 属性克制表 | ✅ 已对齐 | 采用 roco-world 官方数据,无免疫(最低0.5x),18 种属性 |\n| 性格系统 | ✅ 已实现 | 25 种命名性格(胆小/开朗等),±10%,仅作用于 5 个战斗属性(不含HP) |\n| 胜利条件 | ✅ 已实现 | 4 格生命制:己方精灵倒下 -1 格,归0判负 |\n| 技能数据 | ✅ 已对齐 | 488 个技能,与 roco-world 一致;耗能/威力 0 差异 |\n| 技能效果 | ⚠️ 部分实现 | 通过正则解析技能描述,常见效果已覆盖;7 个复杂技能效果暂退化(见下方说明) |\n| 异常状态 | ✅ 已实现 | 烧伤 / 中毒 / 冻结 / 寄生,规则见下方机制表 |\n| 应对机制 | ✅ 已实现 | 攻击/防御/状态三类应对的减伤、反弹、威力倍率 |\n| 天气系统 | ✅ 已实现 | 雪天 / 沙暴 / 雨天,持续 8 回合 |\n| **特性(被动)** | ❌ **未实现** | 特性字段仅作显示,不参与战斗计算 |\n| 对战策略 | ❌ 随机 AI | 双方均随机选择可用行动,不代表玩家实际操作水平 |\n| 持久化效果 | ⚠️ 部分实现 | 技能描述中\"永久\"类效果依赖文本解析,准确性因技能而异 |\n\n**特别注意:** 特性是洛克王国的核心玩法之一,每只精灵的特性在游戏内会带来显著的战斗加成(如\"溶解扩散\"在配毒队时极为关键)。由于特性效果形式多样、难以自动化解析,当前版本尚未实现,因此模拟结果与真实对局存在较大偏差,请以游戏内实际表现为准。\n\n**技能效果暂不支持的 7 个技能(游戏效果退化为基础攻击或空过):**\n\n| 技能 | 属性/类型 | 游戏效果 | 模拟器行为 |\n|------|-----------|----------|-----------|\n| 冰刺 | 冰/物攻 威力85 | 应对状态:敌方 2 回合无法换宠 | 仅造成基础伤害,禁止换宠未实现 |\n| 幼态延续 | 萌/魔攻 威力90 | 自身萌化时威力+60 | 仅造成基础伤害(90),条件加成未实现 |\n| 求雨 | 水/变化 耗能8 | 将天气变为雨天 | 空过,天气由技能触发未实现 |\n| 炎爆术 | 火/变化 耗能2 | 将敌方印记转换为 3 倍灼烧层数 | 空过,印记系统未实现 |\n| 玩具乐园 | 萌/变化 耗能7 | 全队萌化,攻防+30%,速度+20 | 空过,萌化机制未实现 |\n| 缓冻 | 冰/魔攻 威力85 | 敌方速度-10点 | 仅造成基础伤害,速度减益未实现 |\n| 逆向演化 | 萌/变化 耗能1 | 解除萌化并转移给敌方 | 空过,萌化机制未实现 |\n\n---\n\n### 主菜单\n\n每次进入时顶部显示当前队伍名册:\n\n```\n========================================================\n 洛克王国战斗模拟器\n========================================================\n 当前队伍列表(3 支):\n 1. [预设] 预设毒队\n 2. [预设] 预设翼王队\n 3. [自定] 我的速攻队\n========================================================\n 1. 开始对战 (从列表选两支队伍)\n 2. 新建队伍 (交互组队并保存)\n 3. 管理队伍 (查看 / 删除 / 重命名 / 编辑)\n 4. 批量模拟 (选两支队伍跑 N 场)\n 5. 从图片导入队伍 (识别标准组队分享图)\n 0. 返回\n========================================================\n```\n\n---\n\n### 队伍名册\n\n队伍保存在 `data/teams.json`,跨会话持久化。\n\n| 队伍类型 | 说明 |\n|----------|------|\n| `[预设]` | 内置队伍(预设毒队、预设翼王队),不可删除或重命名 |\n| `[自定]` | 用户创建的队伍,可完整编辑 |\n\n**管理操作(菜单 3):**\n\n| 操作 | 说明 |\n|------|------|\n| `e3` | 编辑第 3 支队伍的精灵配置(技能 + 性格) |\n| `r3` | 重命名第 3 支队伍 |\n| `d3` | 删除第 3 支队伍 |\n| `3` | 查看第 3 支队伍的详情(性格 + 技能) |\n\n---\n\n### 新建队伍(菜单 2)\n\n输入队伍名称后,逐步引导选择 6 只精灵,每只选 4 个技能。组队时同步显示性格:\n\n```\n── 第 1 只精灵 ──\n输入精灵名(输入 ? 或 ?关键字 可搜索):影狸\n\n ✔ 影狸 [恶] 种族值总和 530 性格:天真(速度↑魔防↓)\n\n 可学技能(共 XX 个):\n 1. 嘲弄 2. 恶意逃离 3. 毒液渗透 ...\n\n 已选 (0/4):(无)\n 选择第 1 个技能:嘲弄\n ...\n```\n\n**精灵搜索:**\n\n| 输入 | 效果 |\n|------|------|\n| `精灵名` | 精确或自动模糊匹配 |\n| `?` | 列出前 20 只精灵 |\n| `?棘` | 搜索名称含\"棘\"的精灵 |\n\n**技能选择:**\n\n| 输入 | 效果 |\n|------|------|\n| `1` ~ `N` | 按序号选 |\n| `技能名` | 精确或模糊匹配 |\n\n---\n\n### 编辑精灵配置(管理菜单 → e<序号>)\n\n进入编辑界面后,可同时修改任意精灵的技能和性格,每只精灵旁边显示当前性格:\n\n```\n────────────────────────────────────────────────────────\n 编辑精灵配置 · 队伍「我的速攻队」\n <序号>=编辑技能和性格 n<序号>=仅改性格 0=保存退出\n────────────────────────────────────────────────────────\n 1. 影狸 [天真(速度↑魔防↓)] 1:嘲弄 | 2:感染病 | 3:毒液渗透 | 4:恶意逃离\n 2. 裘卡 [急躁(速度↑物防↓)] 1:阻断 | 2:崩拳 | 3:毒囊 | 4:防御\n ...\n────────────────────────────────────────────────────────\n```\n\n**修改技能**(选序号后进入子编辑):\n\n```\n 当前技能: 1:嘲弄 2:感染病 3:毒液渗透 4:恶意逃离\n 输入替换(支持多个,如 1:喷火, 2:水刃,3:冰晶)回车=完成:\n 1:毒液渗透,2:感染病,3:恶意逃离,4:嘲弄\n```\n\n支持中英文冒号(`:` `:`)和逗号(`,` `,`)混用,一行可替换 1~4 个技能槽。\n\n**修改性格**(`n<序号>`):\n\n输入 `n1` 后显示 25 种命名性格供选择:\n\n```\n 影狸 当前性格:天真(速度↑魔防↓)(自动)\n 25 种性格:\n 1. 胆小(速度↑物攻↓) 2. 急躁(速度↑物防↓) 3. 天真(速度↑魔防↓) 4. 开朗(速度↑魔攻↓)\n 5. 固执(物攻↑魔攻↓) 6. 勇敢(物攻↑速度↓) ...\n 20. 认真(无变化) 21. 实干(无变化) ...\n\n 输入序号或性格名(回车=恢复自动 [天真(速度↑魔防↓)]):3\n 影狸 性格已设为 天真(速度↑魔防↓) → HP=343 物攻=185 魔攻=162 速度=224\n```\n\n自定义性格显示带 `*` 标记(如 `[天真(速度↑魔防↓)*]`)。支持按序号、完整名称或模糊名称输入。\n\n---\n\n### 开始对战(菜单 1)\n\n从名册选 A、B 两队,随机 AI 操控并实时输出日志:\n\n```\n────────────────────────────────────────── 回合 3\n 预设毒队: 裘卡 [##########] 302/302 能量: 8\n 翼王队: 声波缇塔 [####......] 149/334 能量: 7 毒2\n[A] 裘卡 使用 崩拳(物攻 武系 威力60)\n → 对 声波缇塔 造成 185 点伤害 [克制!] (HP: 334→149/334)\n```\n\n---\n\n### 批量模拟(菜单 4)\n\n从名册选两队,输入场数,输出胜率统计(适合横向比较配队强度):\n\n```\n 批量模拟结果(100 场)\n 预设毒队 胜: 83 场 (83.0%)\n 预设翼王队 胜: 15 场 (15.0%)\n 平局: 2 场 ( 2.0%)\n 平均回合数: 97.6\n 总耗时: 0.31s (3.1ms/场)\n```\n\n---\n\n### 从图片导入队伍(菜单 5)\n\n识别游戏内标准组队分享截图,自动提取精灵名和技能,存入名册。\n\n**第一步:** 将截图放入 `import_images/` 文件夹。支持 `JPG / PNG / WEBP / GIF`。\n\n**第二步:** 选择识别方式:\n\n| 方式 | 精度 | 费用 | 安装 |\n|------|------|------|------|\n| Claude Vision API | ★★★★★ | 按量计费 | `pip install anthropic` + 配置 `ANTHROPIC_API_KEY` |\n| rapidocr(本地) | ★★★☆☆ | 免费 | `pip install rapidocr-onnxruntime` |\n| easyocr(本地) | ★★★★☆ | 免费 | `pip install easyocr`(需 PyTorch) |\n\n**API Key 配置:**\n\n```bash\n# Windows CMD\nset ANTHROPIC_API_KEY=sk-ant-...\n# PowerShell\n$env:ANTHROPIC_API_KEY=\"sk-ant-...\"\n# 永久:系统属性 → 高级 → 环境变量\n```\n\n**第三步:** 预览识别结果,确认后存入名册。不在技能库中的技能会给出校验提示,建议手动替换。\n\n---\n\n### 战斗引擎实现机制\n\n| 机制 | 规则 |\n|------|------|\n| **伤害公式** | `(攻/防) × 0.9 × 技能威力 × 能力等级 × 本系加成(×1.5) × 克制倍率 × 天气加成` |\n| **能力等级** | `(1 + 攻击提升 + 敌方防御降低) / (1 + 攻击降低 + 敌方防御提升)` |\n| **属性克制** | 来自 roco-world 数据;单弱/单抗=2x/0.5x;双弱=3x(非400%);双抗=0.25x;无免疫 |\n| **性格修正** | 25 种命名性格(胆小/开朗等),±10%,仅作用于物攻/物防/魔攻/魔防/速度(HP不受影响) |\n| **胜利条件** | 4 格生命制:击倒对方精灵 -1格/己方+1格(上限4),一方生命格归0则判负 |\n| **烧伤** | 每回合 `-2% × 层数` HP,层数减半衰减,归零消失 |\n| **中毒** | 每回合 `-3% × 层数` HP,层数不衰减 |\n| **冻结** | 回合结束时若 HP < `maxHP × 层数/12` 则死亡 |\n| **寄生** | 被寄生者每回合 -8% HP,寄生者在场时回复等量 |\n| **应对** | 攻击 vs 防御/状态、防御 vs 状态 各触发对应额外效果 |\n| **天气** | 雪天:所有精灵每回合 +2 冻结层;沙暴:地系技能能耗减半;雨天:水系威力 +50% |\n| **换人** | 主动换人 / 精灵倒下后自动切换到首位存活精灵 |\n| **能量** | 汇合聚能 +5,技能各有消耗,不足时强制聚能 |\n\n---\n\n## 项目结构\n\n```\nrocom-data/\n├── rocom_scraper.py 爬虫主程序\n├── viewer.py 终端图鉴查看器\n├── battle.py 战斗模拟器主入口\n├── run.bat Windows 一键启动菜单\n├── requirements.txt 依赖清单\n│\n├── data/\n│ ├── sprites.json 精灵完整数据(爬虫输出)\n│ ├── sprites.csv 精灵扁平化数据\n│ ├── skills_all.csv 技能库(含威力数值)\n│ └── teams.json 队伍名册(自动生成,可手动编辑)\n│\n├── import_images/ 队伍分享截图放置目录\n│ └── README.txt 使用说明\n│\n├── sim/ 战斗引擎(基于 NRC_SIM)\n│ ├── battle_engine.py 回合主循环\n│ ├── battle_state.py 战斗状态容器\n│ ├── damage_calc.py 伤害公式\n│ ├── counter_system.py 应对系统\n│ ├── pokemon.py 精灵模型(含双属性、性格)\n│ ├── skill.py 技能数据模型\n│ ├── types.py 属性枚举 + 克制表 + normalize_type\n│ ├── pokemon_db.py 精灵数据库(sprites.json → 进战六维 + 性格)\n│ ├── skill_db.py 技能数据库(skills_all.csv + 可学技能查询)\n│ ├── team_builder.py 精灵构建(支持性格覆盖)\n│ ├── team_builder_interactive.py 交互式组队\n│ ├── team_roster.py 队伍名册持久化\n│ ├── team_image_parser.py 图片识别(Claude Vision API)\n│ └── team_image_parser_ocr.py 图片识别(本地 OCR)\n│\n└── tests/\n ├── test_all.py 战斗引擎测试套件(27 项)\n └── test_interactive.py 交互式组队测试(5 项)\n```\n\n---\n\n## 免责声明\n\n- 本项目仅供个人学习使用,请勿高频请求 BWIKI,以免对服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- **战斗模拟结果仅供参考**,与游戏内真实对局存在差异,请以游戏内实际表现为准\n- 使用本项目产生的一切后果由使用者自行承担\n\n## 贡献\n\n欢迎提 PR 修复解析问题或补充缺失字段,感谢!\n\n## 致谢\n\n本项目由 [AofeiLi-code](https://github.com/AofeiLi-code) 负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n\n战斗引擎(`sim/` 目录)基于 [NRC_SIM](https://github.com/AofeiLi-code/NRC_SIM),遵循 MIT License。\n"}, "0fee35504a1f509de1e1b2feb3c2f480d0200ffc": {"t": 1785764688.2136028, "n": 10638, "h": "570187a343f9c6e7", "c": "# rocom-data\n\n从洛克王国世界 BWIKI 爬取完整精灵图鉴数据,包含种族值、技能、特性、属性克制关系,\n附带终端图鉴查看器和战斗模拟器(支持自由组队、队伍持久化、图片识别导入)。\n\n> ⚠️ **战斗模拟器仅供参考,结果不代表真实游戏表现。**\n> 详见「[模拟器精度说明](#模拟器精度说明)」章节。\n\n## 功能一览\n\n| 功能 | 说明 |\n|------|------|\n| 🕷️ 全量爬取 | 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV |\n| 🔄 检查更新 | 对比本地与 wiki 的差异,仅增量爬取新增精灵 |\n| 📖 图鉴查看器 | 在终端按页浏览每只精灵的完整信息,支持搜索 |\n| ⚔️ 战斗模拟器 | 自由组队 + 队伍名册 + AI 随机对战,支持双属性和性格配置 |\n| 📋 队伍名册 | 队伍持久化存储,内置预设 + 用户自定义,随时调取并编辑 |\n| 🖼️ 图片导入 | 识别游戏内队伍分享截图,自动解析精灵和技能并存入名册 |\n\n---\n\n## 环境要求\n\n- Python 3.10+\n\n```bash\npip install -r requirements.txt\n```\n\n### 依赖说明\n\n| 库 | 用途 | 是否必须 |\n|----|------|----------|\n| `requests` | 爬虫网络请求 | ✅ |\n| `beautifulsoup4` | 爬虫 HTML 解析 | ✅ |\n| `rich` | 图鉴查看器 UI | ✅ |\n| `anthropic` | 图片导入 — API 识别方式 | 可选 |\n| `rapidocr-onnxruntime` | 图片导入 — 本地 OCR(轻量,约 50MB) | 可选 |\n| `easyocr` | 图片导入 — 本地 OCR(高精度,依赖 PyTorch) | 可选 |\n\n图片导入功能至少安装 `anthropic` 或 `rapidocr-onnxruntime` 其中一个。\n\n---\n\n## 快速启动\n\n### 方式一:双击 run.bat(Windows 推荐)\n\n```\n================================\n Rocom Sprite Data Tool\n================================\n 1. Full scrape (all sprites) ← 全量爬取\n 2. Check for updates ← 检查更新\n 3. Browse sprites (viewer) ← 图鉴查看器\n 4. Battle simulator ← 战斗模拟器\n 5. Exit\n================================\n```\n\n### 方式二:命令行\n\n```bash\npython rocom_scraper.py # 全量爬取\npython rocom_scraper.py --check-update # 检查更新\npython viewer.py # 图鉴查看器\npython battle.py # 战斗模拟器\n```\n\n---\n\n## 爬虫\n\n### 可选参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔下限(秒),实际为 `delay ~ delay+1.5` 随机值 | 1.5 |\n| `--output path` | 输出 JSON 的路径 | `data/sprites.json` |\n| `--check-update` | 增量更新模式 | — |\n\n### 输出文件\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整精灵数据,嵌套 JSON |\n| `data/sprites.csv` | 扁平化 CSV,可用 Excel / pandas 打开 |\n| `data/sprites.backup.json` | 每次爬取前自动备份的上一版 |\n\n### 爬虫数据与战斗模拟器的同步关系\n\n战斗模拟器依赖两个数据源,爬虫只更新其中一个:\n\n| 数据文件 | 爬虫是否更新 | 说明 |\n|----------|-------------|------|\n| `data/sprites.json` | ✅ 每次爬取自动更新 | 精灵属性、可学技能列表;更新后重启 `battle.py` 即生效 |\n| `data/skills_all.csv` | ❌ 静态文件,爬虫不触碰 | 技能的威力 / 能耗 / 效果;来自 NRC_SIM 项目手工维护 |\n\n**为什么 `skills_all.csv` 不由爬虫生成?**\nbwiki 上爬取到的技能数据 `power` 字段全为 0,威力数值并未在页面中以可抓取的格式呈现,因此威力数据由 `skills_all.csv` 单独维护。\n\n**当前数据差异(截至本版本):**\n- `sprites.json` 中有 **5 个技能**不在 `skills_all.csv` 里(如\"捆缚\"、\"风吹雪\"等)。这些技能在对战时会被替换为默认普攻(威力 40、耗能 2),不影响运行但数值不准确。\n- `skills_all.csv` 中有 **6 个技能**未出现在任何精灵的可学列表里,属于孤立条目,不影响对战。\n\n**手动补充缺失技能:** 若需要修正,直接在 `data/skills_all.csv` 末尾按格式追加一行即可:\n\n```\n技能名,属性系,类型,威力,耗能,效果描述\n捆缚,普通系,物攻,60,3,对敌方精灵造成物理伤害。\n```\n\n### JSON 字段说明\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `no` | int | 精灵编号 |\n| `name` | str | 精灵名称 |\n| `form` | str / null | 形态名,无则为 null |\n| `url` | str | BWIKI 原始页面链接 |\n| `has_shiny` | bool | 是否有异色图 |\n| `attributes` | list[str] | 属性,最多两个,如 `[\"火\", \"水\"]` |\n| `stats` | dict | 种族值:`hp / atk / sp_atk / def / sp_def / spd / total` |\n| `ability` | dict | 特性:`name / description` |\n| `type_matchup` | dict | 克制关系:`strong_against / weak_to / resists / resisted_by` |\n| `skills` | list[dict] | 可学技能列表,见下表 |\n\n**skills 子字段:**\n\n| 字段 | 说明 |\n|------|------|\n| `name` | 技能名 |\n| `attribute` | 技能属性(火/水/草…) |\n| `category` | 类别(物攻 / 魔攻 / 状态 / 防御) |\n| `power` | 威力数值 |\n| `cost` | 能量消耗 |\n| `description` | 技能效果描述 |\n\n---\n\n## 图鉴查看器\n\n```bash\npython viewer.py\n```\n\n终端显示类手机图鉴界面:\n\n```\n╭─────────────── 洛克王国图鉴 ───────────────╮\n│ NO.001 迪莫 │\n│ 属性 光 │\n│ ──────────────── 种族值 ───────────────── │\n│ 生命 ████████░░░░ 120 │\n│ 物攻 █████░░░░░░░ 80 │\n│ 合计 582 │\n│ ──────────────── 克制关系 ──────────────── │\n│ 克制 恶 幽 │\n│ 被克制 幽 草 │\n│ ──────────────── 技能 ──────────────────── │\n│ 猛烈撞击 普通 物攻 ★ │\n│ 对敌方精灵造成物理伤害。 │\n╰────────────────── 1 / 427 ─────────────────╯\n```\n\n| 按键 | 功能 |\n|------|------|\n| `←` / `→` 或 `a` / `d` | 切换精灵 |\n| `/` | 按名称或编号搜索 |\n| `q` | 退出 |\n\n---\n\n## 战斗模拟器\n\n```bash\npython battle.py\n# 或双击 run.bat → 4. Battle simulator\n```\n\n### ⚠ 模拟器精度说明\n\n**本模拟器仅供配队思路参考,结果不代表真实游戏中的实际表现。**\n\n| 项目 | 实现情况 | 说明 |\n|------|----------|------|\n| 六维属性 | ✅ 已实现 | 由种族值 + 个体值规则 + 性格修正公式计算 |\n| 双属性精灵 | ✅ 已实现 | 221 只双属精灵全覆盖;双弱=300%(非400%),双抗=25% |\n| 属性克制表 | ✅ 已对齐 | 采用 roco-world 官方数据,无免疫(最低0.5x),18 种属性 |\n| 性格系统 | ✅ 已实现 | 25 种命名性格(胆小/开朗等),±10%,仅作用于 5 个战斗属性(不含HP) |\n| 胜利条件 | ✅ 已实现 | 4 格生命制:击倒对方精灵 -1 格/己方 +1 格(上限4),归0判负 |\n| 技能效果 | ⚠️ 部分实现 | 通过正则解析技能描述,常见效果已覆盖,复杂描述可能漏解析 |\n| 异常状态 | ✅ 已实现 | 烧伤 / 中毒 / 冻结 / 寄生,规则见下方机制表 |\n| 应对机制 | ✅ 已实现 | 攻击/防御/状态三类应对的减伤、反弹、威力倍率 |\n| 天气系统 | ✅ 已实现 | 雪天 / 沙暴 / 雨天,持续 8 回合 |\n| **特性(被动)** | ❌ **未实现** | 特性字段仅作显示,不参与战斗计算 |\n| 对战策略 | ❌ 随机 AI | 双方均随机选择可用行动,不代表玩家实际操作水平 |\n| 持久化效果 | ⚠️ 部分实现 | 技能描述中\"永久\"类效果依赖文本解析,准确性因技能而异 |\n\n**特别注意:** 特性是洛克王国的核心玩法之一,每只精灵的特性在游戏内会带来显著的战斗加成(如\"溶解扩散\"在配毒队时极为关键)。由于特性效果形式多样、难以自动化解析,当前版本尚未实现,因此模拟结果与真实对局存在较大偏差,请以游戏内实际表现为准。\n\n---\n\n### 主菜单\n\n每次进入时顶部显示当前队伍名册:\n\n```\n========================================================\n 洛克王国战斗模拟器\n========================================================\n 当前队伍列表(3 支):\n 1. [预设] 预设毒队\n 2. [预设] 预设翼王队\n 3. [自定] 我的速攻队\n========================================================\n 1. 开始对战 (从列表选两支队伍)\n 2. 新建队伍 (交互组队并保存)\n 3. 管理队伍 (查看 / 删除 / 重命名 / 编辑)\n 4. 批量模拟 (选两支队伍跑 N 场)\n 5. 从图片导入队伍 (识别标准组队分享图)\n 0. 返回\n========================================================\n```\n\n---\n\n### 队伍名册\n\n队伍保存在 `data/teams.json`,跨会话持久化。\n\n| 队伍类型 | 说明 |\n|----------|------|\n| `[预设]` | 内置队伍(预设毒队、预设翼王队),不可删除或重命名 |\n| `[自定]` | 用户创建的队伍,可完整编辑 |\n\n**管理操作(菜单 3):**\n\n| 操作 | 说明 |\n|------|------|\n| `e3` | 编辑第 3 支队伍的精灵配置(技能 + 性格) |\n| `r3` | 重命名第 3 支队伍 |\n| `d3` | 删除第 3 支队伍 |\n| `3` | 查看第 3 支队伍的详情(性格 + 技能) |\n\n---\n\n### 新建队伍(菜单 2)\n\n输入队伍名称后,逐步引导选择 6 只精灵,每只选 4 个技能。组队时同步显示性格:\n\n```\n── 第 1 只精灵 ──\n输入精灵名(输入 ? 或 ?关键字 可搜索):影狸\n\n ✔ 影狸 [恶] 种族值总和 530 性格:天真(速度↑魔防↓)\n\n 可学技能(共 XX 个):\n 1. 嘲弄 2. 恶意逃离 3. 毒液渗透 ...\n\n 已选 (0/4):(无)\n 选择第 1 个技能:嘲弄\n ...\n```\n\n**精灵搜索:**\n\n| 输入 | 效果 |\n|------|------|\n| `精灵名` | 精确或自动模糊匹配 |\n| `?` | 列出前 20 只精灵 |\n| `?棘` | 搜索名称含\"棘\"的精灵 |\n\n**技能选择:**\n\n| 输入 | 效果 |\n|------|------|\n| `1` ~ `N` | 按序号选 |\n| `技能名` | 精确或模糊匹配 |\n\n---\n\n### 编辑精灵配置(管理菜单 → e<序号>)\n\n进入编辑界面后,可同时修改任意精灵的技能和性格,每只精灵旁边显示当前性格:\n\n```\n────────────────────────────────────────────────────────\n 编辑精灵配置 · 队伍「我的速攻队」\n <序号>=编辑技能和性格 n<序号>=仅改性格 0=保存退出\n────────────────────────────────────────────────────────\n 1. 影狸 [天真(速度↑魔防↓)] 1:嘲弄 | 2:感染病 | 3:毒液渗透 | 4:恶意逃离\n 2. 裘卡 [急躁(速度↑物防↓)] 1:阻断 | 2:崩拳 | 3:毒囊 | 4:防御\n ...\n────────────────────────────────────────────────────────\n```\n\n**修改技能**(选序号后进入子编辑):\n\n```\n 当前技能: 1:嘲弄 2:感染病 3:毒液渗透 4:恶意逃离\n 输入替换(支持多个,如 1:喷火, 2:水刃,3:冰晶)回车=完成:\n 1:毒液渗透,2:感染病,3:恶意逃离,4:嘲弄\n```\n\n支持中英文冒号(`:` `:`)和逗号(`,` `,`)混用,一行可替换 1~4 个技能槽。\n\n**修改性格**(`n<序号>`):\n\n输入 `n1` 后显示 25 种命名性格供选择:\n\n```\n 影狸 当前性格:天真(速度↑魔防↓)(自动)\n 25 种性格:\n 1. 胆小(速度↑物攻↓) 2. 急躁(速度↑物防↓) 3. 天真(速度↑魔防↓) 4. 开朗(速度↑魔攻↓)\n 5. 固执(物攻↑魔攻↓) 6. 勇敢(物攻↑速度↓) ...\n 20. 认真(无变化) 21. 实干(无变化) ...\n\n 输入序号或性格名(回车=恢复自动 [天真(速度↑魔防↓)]):3\n 影狸 性格已设为 天真(速度↑魔防↓) → HP=343 物攻=185 魔攻=162 速度=224\n```\n\n自定义性格显示带 `*` 标记(如 `[天真(速度↑魔防↓)*]`)。支持按序号、完整名称或模糊名称输入。\n\n---\n\n### 开始对战(菜单 1)\n\n从名册选 A、B 两队,随机 AI 操控并实时输出日志:\n\n```\n────────────────────────────────────────── 回合 3\n 预设毒队: 裘卡 [##########] 302/302 能量: 8\n 翼王队: 声波缇塔 [####......] 149/334 能量: 7 毒2\n[A] 裘卡 使用 崩拳(物攻 武系 威力60)\n → 对 声波缇塔 造成 185 点伤害 [克制!] (HP: 334→149/334)\n```\n\n---\n\n### 批量模拟(菜单 4)\n\n从名册选两队,输入场数,输出胜率统计(适合横向比较配队强度):\n\n```\n 批量模拟结果(100 场)\n 预设毒队 胜: 83 场 (83.0%)\n 预设翼王队 胜: 15 场 (15.0%)\n 平局: 2 场 ( 2.0%)\n 平均回合数: 97.6\n 总耗时: 0.31s (3.1ms/场)\n```\n\n---\n\n### 从图片导入队伍(菜单 5)\n\n识别游戏内标准组队分享截图,自动提取精灵名和技能,存入名册。\n\n**第一步:** 将截图放入 `import_images/` 文件夹。支持 `JPG / PNG / WEBP / GIF`。\n\n**第二步:** 选择识别方式:\n\n| 方式 | 精度 | 费用 | 安装 |\n|------|------|------|------|\n| Claude Vision API | ★★★★★ | 按量计费 | `pip install anthropic` + 配置 `ANTHROPIC_API_KEY` |\n| rapidocr(本地) | ★★★☆☆ | 免费 | `pip install rapidocr-onnxruntime` |\n| easyocr(本地) | ★★★★☆ | 免费 | `pip install easyocr`(需 PyTorch) |\n\n**API Key 配置:**\n\n```bash\n# Windows CMD\nset ANTHROPIC_API_KEY=sk-ant-...\n# PowerShell\n$env:ANTHROPIC_API_KEY=\"sk-ant-...\"\n# 永久:系统属性 → 高级 → 环境变量\n```\n\n**第三步:** 预览识别结果,确认后存入名册。不在技能库中的技能会给出校验提示,建议手动替换。\n\n---\n\n### 战斗引擎实现机制\n\n| 机制 | 规则 |\n|------|------|\n| **伤害公式** | `(攻/防) × 0.9 × 技能威力 × 能力等级 × 本系加成(×1.5) × 克制倍率 × 天气加成` |\n| **能力等级** | `(1 + 攻击提升 + 敌方防御降低) / (1 + 攻击降低 + 敌方防御提升)` |\n| **属性克制** | 来自 roco-world 数据;单弱/单抗=2x/0.5x;双弱=3x(非400%);双抗=0.25x;无免疫 |\n| **性格修正** | 25 种命名性格(胆小/开朗等),±10%,仅作用于物攻/物防/魔攻/魔防/速度(HP不受影响) |\n| **胜利条件** | 4 格生命制:击倒对方精灵 -1格/己方+1格(上限4),一方生命格归0则判负 |\n| **烧伤** | 每回合 `-2% × 层数` HP,层数减半衰减,归零消失 |\n| **中毒** | 每回合 `-3% × 层数` HP,层数不衰减 |\n| **冻结** | 回合结束时若 HP < `maxHP × 层数/12` 则死亡 |\n| **寄生** | 被寄生者每回合 -8% HP,寄生者在场时回复等量 |\n| **应对** | 攻击 vs 防御/状态、防御 vs 状态 各触发对应额外效果 |\n| **天气** | 雪天:所有精灵每回合 +2 冻结层;沙暴:地系技能能耗减半;雨天:水系威力 +50% |\n| **换人** | 主动换人 / 精灵倒下后自动切换到首位存活精灵 |\n| **能量** | 汇合聚能 +5,技能各有消耗,不足时强制聚能 |\n\n---\n\n## 项目结构\n\n```\nrocom-data/\n├── rocom_scraper.py 爬虫主程序\n├── viewer.py 终端图鉴查看器\n├── battle.py 战斗模拟器主入口\n├── run.bat Windows 一键启动菜单\n├── requirements.txt 依赖清单\n│\n├── data/\n│ ├── sprites.json 精灵完整数据(爬虫输出)\n│ ├── sprites.csv 精灵扁平化数据\n│ ├── skills_all.csv 技能库(含威力数值)\n│ └── teams.json 队伍名册(自动生成,可手动编辑)\n│\n├── import_images/ 队伍分享截图放置目录\n│ └── README.txt 使用说明\n│\n├── sim/ 战斗引擎(基于 NRC_SIM)\n│ ├── battle_engine.py 回合主循环\n│ ├── battle_state.py 战斗状态容器\n│ ├── damage_calc.py 伤害公式\n│ ├── counter_system.py 应对系统\n│ ├── pokemon.py 精灵模型(含双属性、性格)\n│ ├── skill.py 技能数据模型\n│ ├── types.py 属性枚举 + 克制表 + normalize_type\n│ ├── pokemon_db.py 精灵数据库(sprites.json → 进战六维 + 性格)\n│ ├── skill_db.py 技能数据库(skills_all.csv + 可学技能查询)\n│ ├── team_builder.py 精灵构建(支持性格覆盖)\n│ ├── team_builder_interactive.py 交互式组队\n│ ├── team_roster.py 队伍名册持久化\n│ ├── team_image_parser.py 图片识别(Claude Vision API)\n│ └── team_image_parser_ocr.py 图片识别(本地 OCR)\n│\n└── tests/\n ├── test_all.py 战斗引擎测试套件(27 项)\n └── test_interactive.py 交互式组队测试(5 项)\n```\n\n---\n\n## 免责声明\n\n- 本项目仅供个人学习使用,请勿高频请求 BWIKI,以免对服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- **战斗模拟结果仅供参考**,与游戏内真实对局存在差异,请以游戏内实际表现为准\n- 使用本项目产生的一切后果由使用者自行承担\n\n## 贡献\n\n欢迎提 PR 修复解析问题或补充缺失字段,感谢!\n\n## 致谢\n\n本项目由 [AofeiLi-code](https://github.com/AofeiLi-code) 负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n\n战斗引擎(`sim/` 目录)基于 [NRC_SIM](https://github.com/AofeiLi-code/NRC_SIM),遵循 MIT License。\n"}, "bd8a0ef9a6b477e08170e6a73fc18d1a0533f6c7": {"t": 1785764689.4761438, "n": 10215, "h": "337ec9de5fab57d4", "c": "# rocom-data\n\n从洛克王国世界 BWIKI 爬取完整精灵图鉴数据,包含种族值、技能、特性、属性克制关系,\n附带终端图鉴查看器和战斗模拟器(支持自由组队、队伍持久化、图片识别导入)。\n\n> ⚠️ **战斗模拟器仅供参考,结果不代表真实游戏表现。**\n> 详见「[模拟器精度说明](#模拟器精度说明)」章节。\n\n## 功能一览\n\n| 功能 | 说明 |\n|------|------|\n| 🕷️ 全量爬取 | 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV |\n| 🔄 检查更新 | 对比本地与 wiki 的差异,仅增量爬取新增精灵 |\n| 📖 图鉴查看器 | 在终端按页浏览每只精灵的完整信息,支持搜索 |\n| ⚔️ 战斗模拟器 | 自由组队 + 队伍名册 + AI 随机对战,支持双属性和性格配置 |\n| 📋 队伍名册 | 队伍持久化存储,内置预设 + 用户自定义,随时调取并编辑 |\n| 🖼️ 图片导入 | 识别游戏内队伍分享截图,自动解析精灵和技能并存入名册 |\n\n---\n\n## 环境要求\n\n- Python 3.10+\n\n```bash\npip install -r requirements.txt\n```\n\n### 依赖说明\n\n| 库 | 用途 | 是否必须 |\n|----|------|----------|\n| `requests` | 爬虫网络请求 | ✅ |\n| `beautifulsoup4` | 爬虫 HTML 解析 | ✅ |\n| `rich` | 图鉴查看器 UI | ✅ |\n| `anthropic` | 图片导入 — API 识别方式 | 可选 |\n| `rapidocr-onnxruntime` | 图片导入 — 本地 OCR(轻量,约 50MB) | 可选 |\n| `easyocr` | 图片导入 — 本地 OCR(高精度,依赖 PyTorch) | 可选 |\n\n图片导入功能至少安装 `anthropic` 或 `rapidocr-onnxruntime` 其中一个。\n\n---\n\n## 快速启动\n\n### 方式一:双击 run.bat(Windows 推荐)\n\n```\n================================\n Rocom Sprite Data Tool\n================================\n 1. Full scrape (all sprites) ← 全量爬取\n 2. Check for updates ← 检查更新\n 3. Browse sprites (viewer) ← 图鉴查看器\n 4. Battle simulator ← 战斗模拟器\n 5. Exit\n================================\n```\n\n### 方式二:命令行\n\n```bash\npython rocom_scraper.py # 全量爬取\npython rocom_scraper.py --check-update # 检查更新\npython viewer.py # 图鉴查看器\npython battle.py # 战斗模拟器\n```\n\n---\n\n## 爬虫\n\n### 可选参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔下限(秒),实际为 `delay ~ delay+1.5` 随机值 | 1.5 |\n| `--output path` | 输出 JSON 的路径 | `data/sprites.json` |\n| `--check-update` | 增量更新模式 | — |\n\n### 输出文件\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整精灵数据,嵌套 JSON |\n| `data/sprites.csv` | 扁平化 CSV,可用 Excel / pandas 打开 |\n| `data/sprites.backup.json` | 每次爬取前自动备份的上一版 |\n\n### 爬虫数据与战斗模拟器的同步关系\n\n战斗模拟器依赖两个数据源,爬虫只更新其中一个:\n\n| 数据文件 | 爬虫是否更新 | 说明 |\n|----------|-------------|------|\n| `data/sprites.json` | ✅ 每次爬取自动更新 | 精灵属性、可学技能列表;更新后重启 `battle.py` 即生效 |\n| `data/skills_all.csv` | ❌ 静态文件,爬虫不触碰 | 技能的威力 / 能耗 / 效果;来自 NRC_SIM 项目手工维护 |\n\n**为什么 `skills_all.csv` 不由爬虫生成?**\nbwiki 上爬取到的技能数据 `power` 字段全为 0,威力数值并未在页面中以可抓取的格式呈现,因此威力数据由 `skills_all.csv` 单独维护。\n\n**当前数据差异(截至本版本):**\n- `sprites.json` 中有 **5 个技能**不在 `skills_all.csv` 里(如\"捆缚\"、\"风吹雪\"等)。这些技能在对战时会被替换为默认普攻(威力 40、耗能 2),不影响运行但数值不准确。\n- `skills_all.csv` 中有 **6 个技能**未出现在任何精灵的可学列表里,属于孤立条目,不影响对战。\n\n**手动补充缺失技能:** 若需要修正,直接在 `data/skills_all.csv` 末尾按格式追加一行即可:\n\n```\n技能名,属性系,类型,威力,耗能,效果描述\n捆缚,普通系,物攻,60,3,对敌方精灵造成物理伤害。\n```\n\n### JSON 字段说明\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `no` | int | 精灵编号 |\n| `name` | str | 精灵名称 |\n| `form` | str / null | 形态名,无则为 null |\n| `url` | str | BWIKI 原始页面链接 |\n| `has_shiny` | bool | 是否有异色图 |\n| `attributes` | list[str] | 属性,最多两个,如 `[\"火\", \"水\"]` |\n| `stats` | dict | 种族值:`hp / atk / sp_atk / def / sp_def / spd / total` |\n| `ability` | dict | 特性:`name / description` |\n| `type_matchup` | dict | 克制关系:`strong_against / weak_to / resists / resisted_by` |\n| `skills` | list[dict] | 可学技能列表,见下表 |\n\n**skills 子字段:**\n\n| 字段 | 说明 |\n|------|------|\n| `name` | 技能名 |\n| `attribute` | 技能属性(火/水/草…) |\n| `category` | 类别(物攻 / 魔攻 / 状态 / 防御) |\n| `power` | 威力数值 |\n| `cost` | 能量消耗 |\n| `description` | 技能效果描述 |\n\n---\n\n## 图鉴查看器\n\n```bash\npython viewer.py\n```\n\n终端显示类手机图鉴界面:\n\n```\n╭─────────────── 洛克王国图鉴 ───────────────╮\n│ NO.001 迪莫 │\n│ 属性 光 │\n│ ──────────────── 种族值 ───────────────── │\n│ 生命 ████████░░░░ 120 │\n│ 物攻 █████░░░░░░░ 80 │\n│ 合计 582 │\n│ ──────────────── 克制关系 ──────────────── │\n│ 克制 恶 幽 │\n│ 被克制 幽 草 │\n│ ──────────────── 技能 ──────────────────── │\n│ 猛烈撞击 普通 物攻 ★ │\n│ 对敌方精灵造成物理伤害。 │\n╰────────────────── 1 / 427 ─────────────────╯\n```\n\n| 按键 | 功能 |\n|------|------|\n| `←` / `→` 或 `a` / `d` | 切换精灵 |\n| `/` | 按名称或编号搜索 |\n| `q` | 退出 |\n\n---\n\n## 战斗模拟器\n\n```bash\npython battle.py\n# 或双击 run.bat → 4. Battle simulator\n```\n\n### ⚠ 模拟器精度说明\n\n**本模拟器仅供配队思路参考,结果不代表真实游戏中的实际表现。**\n\n| 项目 | 实现情况 | 说明 |\n|------|----------|------|\n| 六维属性 | ✅ 已实现 | 由种族值 + 个体值规则 + 性格修正公式计算,与游戏公式一致 |\n| 双属性精灵 | ✅ 已实现 | 受击克制倍率 = 主属性 × 副属性,221 只双属精灵全覆盖 |\n| 性格系统 | ✅ 已实现 | 默认自动分配(种族值最高项+20%,最低项-10%),支持手动覆盖 |\n| 技能效果 | ✅ 部分实现 | 通过正则解析技能描述文本,常见效果(buff/debuff/异常/吸血等)已覆盖,复杂描述可能漏解析 |\n| 异常状态 | ✅ 已实现 | 烧伤 / 中毒 / 冻结 / 寄生,规则见下方机制表 |\n| 应对机制 | ✅ 已实现 | 攻击/防御/状态三类应对的减伤、反弹、威力倍率 |\n| 天气系统 | ✅ 已实现 | 雪天 / 沙暴 / 雨天,持续 8 回合 |\n| **特性(被动)** | ❌ **未实现** | 特性字段仅作显示,不参与战斗计算 |\n| 对战策略 | ❌ 随机 AI | 双方均随机选择可用行动,不代表玩家的实际操作水平 |\n| 持久化效果 | ⚠️ 部分实现 | 技能描述中\"永久\"类效果的触发依赖描述文本解析,准确性因技能而异 |\n\n**特别注意:** 特性是洛克王国的核心玩法之一,每只精灵的特性在游戏内会带来显著的战斗加成(如\"溶解扩散\"在配毒队时极为关键)。由于特性效果形式多样、难以自动化解析,当前版本尚未实现,因此模拟结果与真实对局存在较大偏差,请以游戏内实际表现为准。\n\n---\n\n### 主菜单\n\n每次进入时顶部显示当前队伍名册:\n\n```\n========================================================\n 洛克王国战斗模拟器\n========================================================\n 当前队伍列表(3 支):\n 1. [预设] 预设毒队\n 2. [预设] 预设翼王队\n 3. [自定] 我的速攻队\n========================================================\n 1. 开始对战 (从列表选两支队伍)\n 2. 新建队伍 (交互组队并保存)\n 3. 管理队伍 (查看 / 删除 / 重命名 / 编辑)\n 4. 批量模拟 (选两支队伍跑 N 场)\n 5. 从图片导入队伍 (识别标准组队分享图)\n 0. 返回\n========================================================\n```\n\n---\n\n### 队伍名册\n\n队伍保存在 `data/teams.json`,跨会话持久化。\n\n| 队伍类型 | 说明 |\n|----------|------|\n| `[预设]` | 内置队伍(预设毒队、预设翼王队),不可删除或重命名 |\n| `[自定]` | 用户创建的队伍,可完整编辑 |\n\n**管理操作(菜单 3):**\n\n| 操作 | 说明 |\n|------|------|\n| `e3` | 编辑第 3 支队伍的精灵配置(技能 + 性格) |\n| `r3` | 重命名第 3 支队伍 |\n| `d3` | 删除第 3 支队伍 |\n| `3` | 查看第 3 支队伍的详情(性格 + 技能) |\n\n---\n\n### 新建队伍(菜单 2)\n\n输入队伍名称后,逐步引导选择 6 只精灵,每只选 4 个技能。组队时同步显示性格:\n\n```\n── 第 1 只精灵 ──\n输入精灵名(输入 ? 或 ?关键字 可搜索):影狸\n\n ✔ 影狸 [恶] 种族值总和 530 性格:速度↑ 魔防↓\n\n 可学技能(共 XX 个):\n 1. 嘲弄 2. 恶意逃离 3. 毒液渗透 ...\n\n 已选 (0/4):(无)\n 选择第 1 个技能:嘲弄\n ...\n```\n\n**精灵搜索:**\n\n| 输入 | 效果 |\n|------|------|\n| `精灵名` | 精确或自动模糊匹配 |\n| `?` | 列出前 20 只精灵 |\n| `?棘` | 搜索名称含\"棘\"的精灵 |\n\n**技能选择:**\n\n| 输入 | 效果 |\n|------|------|\n| `1` ~ `N` | 按序号选 |\n| `技能名` | 精确或模糊匹配 |\n\n---\n\n### 编辑精灵配置(管理菜单 → e<序号>)\n\n进入编辑界面后,可同时修改任意精灵的技能和性格,每只精灵旁边显示当前性格:\n\n```\n────────────────────────────────────────────────\n 编辑精灵配置 · 队伍「我的速攻队」\n <序号>=编辑技能和性格 n<序号>=仅改性格 0=保存退出\n────────────────────────────────────────────────\n 1. 影狸 [速度↑魔防↓] 1:嘲弄 | 2:感染病 | 3:毒液渗透 | 4:恶意逃离\n 2. 裘卡 [速度↑物防↓] 1:阻断 | 2:崩拳 | 3:毒囊 | 4:防御\n ...\n────────────────────────────────────────────────\n```\n\n**修改技能**(选序号后进入子编辑):\n\n```\n 当前技能: 1:嘲弄 2:感染病 3:毒液渗透 4:恶意逃离\n 输入替换(支持多个,如 1:喷火, 2:水刃,3:冰晶)回车=完成:\n 1:毒液渗透,2:感染病,3:恶意逃离,4:嘲弄\n```\n\n支持中英文冒号(`:` `:`)和逗号(`,` `,`)混用,一行可替换 1~4 个技能槽。\n\n**修改性格**(`n<序号>`):\n\n```\n 影狸 当前性格:速度↑ 魔防↓\n 可选属性:生命 物攻 魔攻 物防 魔防 速度\n 输入「提升:降低」(如 速度:魔攻),回车=恢复自动[速度↑魔防↓]:速度:物防\n 影狸 性格已设为 速度↑ 物防↓ → HP=343 物攻=... 速度=240\n```\n\n自定义性格显示带 `*` 标记(如 `[速度↑物防↓*]`)。\n\n---\n\n### 开始对战(菜单 1)\n\n从名册选 A、B 两队,随机 AI 操控并实时输出日志:\n\n```\n────────────────────────────────────────── 回合 3\n 预设毒队: 裘卡 [##########] 302/302 能量: 8\n 翼王队: 声波缇塔 [####......] 149/334 能量: 7 毒2\n[A] 裘卡 使用 崩拳(物攻 武系 威力60)\n → 对 声波缇塔 造成 185 点伤害 [克制!] (HP: 334→149/334)\n```\n\n---\n\n### 批量模拟(菜单 4)\n\n从名册选两队,输入场数,输出胜率统计(适合横向比较配队强度):\n\n```\n 批量模拟结果(100 场)\n 预设毒队 胜: 83 场 (83.0%)\n 预设翼王队 胜: 15 场 (15.0%)\n 平局: 2 场 ( 2.0%)\n 平均回合数: 97.6\n 总耗时: 0.31s (3.1ms/场)\n```\n\n---\n\n### 从图片导入队伍(菜单 5)\n\n识别游戏内标准组队分享截图,自动提取精灵名和技能,存入名册。\n\n**第一步:** 将截图放入 `import_images/` 文件夹。支持 `JPG / PNG / WEBP / GIF`。\n\n**第二步:** 选择识别方式:\n\n| 方式 | 精度 | 费用 | 安装 |\n|------|------|------|------|\n| Claude Vision API | ★★★★★ | 按量计费 | `pip install anthropic` + 配置 `ANTHROPIC_API_KEY` |\n| rapidocr(本地) | ★★★☆☆ | 免费 | `pip install rapidocr-onnxruntime` |\n| easyocr(本地) | ★★★★☆ | 免费 | `pip install easyocr`(需 PyTorch) |\n\n**API Key 配置:**\n\n```bash\n# Windows CMD\nset ANTHROPIC_API_KEY=sk-ant-...\n# PowerShell\n$env:ANTHROPIC_API_KEY=\"sk-ant-...\"\n# 永久:系统属性 → 高级 → 环境变量\n```\n\n**第三步:** 预览识别结果,确认后存入名册。不在技能库中的技能会给出校验提示,建议手动替换。\n\n---\n\n### 战斗引擎实现机制\n\n| 机制 | 规则 |\n|------|------|\n| **伤害公式** | `(攻/防) × 0.9 × 技能威力 × 能力等级 × 本系加成(×1.5) × 克制倍率 × 天气加成` |\n| **能力等级** | `(1 + 攻击提升 + 敌方防御降低) / (1 + 攻击降低 + 敌方防御提升)` |\n| **双属性克制** | `克制倍率 = 对主属性倍率 × 对副属性倍率` |\n| **性格修正** | 种族值最高项 +20%,最低项 -10%(可手动覆盖) |\n| **烧伤** | 每回合 `-2% × 层数` HP,层数减半衰减,归零消失 |\n| **中毒** | 每回合 `-3% × 层数` HP,层数不衰减 |\n| **冻结** | 回合结束时若 HP < `maxHP × 层数/12` 则死亡 |\n| **寄生** | 被寄生者每回合 -8% HP,寄生者在场时回复等量 |\n| **应对** | 攻击 vs 防御/状态、防御 vs 状态 各触发对应额外效果 |\n| **天气** | 雪天:所有精灵每回合 +2 冻结层;沙暴:地系技能能耗减半;雨天:水系威力 +50% |\n| **换人** | 主动换人 / 精灵倒下后自动切换到首位存活精灵 |\n| **能量** | 汇合聚能 +5,技能各有消耗,不足时强制聚能 |\n\n---\n\n## 项目结构\n\n```\nrocom-data/\n├── rocom_scraper.py 爬虫主程序\n├── viewer.py 终端图鉴查看器\n├── battle.py 战斗模拟器主入口\n├── run.bat Windows 一键启动菜单\n├── requirements.txt 依赖清单\n│\n├── data/\n│ ├── sprites.json 精灵完整数据(爬虫输出)\n│ ├── sprites.csv 精灵扁平化数据\n│ ├── skills_all.csv 技能库(含威力数值)\n│ └── teams.json 队伍名册(自动生成,可手动编辑)\n│\n├── import_images/ 队伍分享截图放置目录\n│ └── README.txt 使用说明\n│\n├── sim/ 战斗引擎(基于 NRC_SIM)\n│ ├── battle_engine.py 回合主循环\n│ ├── battle_state.py 战斗状态容器\n│ ├── damage_calc.py 伤害公式\n│ ├── counter_system.py 应对系统\n│ ├── pokemon.py 精灵模型(含双属性、性格)\n│ ├── skill.py 技能数据模型\n│ ├── types.py 属性枚举 + 克制表 + normalize_type\n│ ├── pokemon_db.py 精灵数据库(sprites.json → 进战六维 + 性格)\n│ ├── skill_db.py 技能数据库(skills_all.csv + 可学技能查询)\n│ ├── team_builder.py 精灵构建(支持性格覆盖)\n│ ├── team_builder_interactive.py 交互式组队\n│ ├── team_roster.py 队伍名册持久化\n│ ├── team_image_parser.py 图片识别(Claude Vision API)\n│ └── team_image_parser_ocr.py 图片识别(本地 OCR)\n│\n└── tests/\n ├── test_all.py 战斗引擎测试套件(27 项)\n └── test_interactive.py 交互式组队测试(5 项)\n```\n\n---\n\n## 免责声明\n\n- 本项目仅供个人学习使用,请勿高频请求 BWIKI,以免对服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- **战斗模拟结果仅供参考**,与游戏内真实对局存在差异,请以游戏内实际表现为准\n- 使用本项目产生的一切后果由使用者自行承担\n\n## 贡献\n\n欢迎提 PR 修复解析问题或补充缺失字段,感谢!\n\n## 致谢\n\n本项目由 [AofeiLi-code](https://github.com/AofeiLi-code) 负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n\n战斗引擎(`sim/` 目录)基于 [NRC_SIM](https://github.com/AofeiLi-code/NRC_SIM),遵循 MIT License。\n"}, "1bbf82214766fc1d0c16719fc7d806a27ebd0608": {"t": 1785764690.9607813, "n": 9538, "h": "48f79ddcc45b3689", "c": "# rocom-data\n\n从洛克王国世界 BWIKI 爬取完整精灵图鉴数据,包含种族值、技能、特性、属性克制关系,\n附带终端图鉴查看器和战斗模拟器(支持自由组队、队伍持久化、图片识别导入)。\n\n> ⚠️ **战斗模拟器仅供参考,结果不代表真实游戏表现。**\n> 详见「[模拟器精度说明](#模拟器精度说明)」章节。\n\n## 功能一览\n\n| 功能 | 说明 |\n|------|------|\n| 🕷️ 全量爬取 | 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV |\n| 🔄 检查更新 | 对比本地与 wiki 的差异,仅增量爬取新增精灵 |\n| 📖 图鉴查看器 | 在终端按页浏览每只精灵的完整信息,支持搜索 |\n| ⚔️ 战斗模拟器 | 自由组队 + 队伍名册 + AI 随机对战,支持双属性和性格配置 |\n| 📋 队伍名册 | 队伍持久化存储,内置预设 + 用户自定义,随时调取并编辑 |\n| 🖼️ 图片导入 | 识别游戏内队伍分享截图,自动解析精灵和技能并存入名册 |\n\n---\n\n## 环境要求\n\n- Python 3.10+\n\n```bash\npip install -r requirements.txt\n```\n\n### 依赖说明\n\n| 库 | 用途 | 是否必须 |\n|----|------|----------|\n| `requests` | 爬虫网络请求 | ✅ |\n| `beautifulsoup4` | 爬虫 HTML 解析 | ✅ |\n| `rich` | 图鉴查看器 UI | ✅ |\n| `anthropic` | 图片导入 — API 识别方式 | 可选 |\n| `rapidocr-onnxruntime` | 图片导入 — 本地 OCR(轻量,约 50MB) | 可选 |\n| `easyocr` | 图片导入 — 本地 OCR(高精度,依赖 PyTorch) | 可选 |\n\n图片导入功能至少安装 `anthropic` 或 `rapidocr-onnxruntime` 其中一个。\n\n---\n\n## 快速启动\n\n### 方式一:双击 run.bat(Windows 推荐)\n\n```\n================================\n Rocom Sprite Data Tool\n================================\n 1. Full scrape (all sprites) ← 全量爬取\n 2. Check for updates ← 检查更新\n 3. Browse sprites (viewer) ← 图鉴查看器\n 4. Battle simulator ← 战斗模拟器\n 5. Exit\n================================\n```\n\n### 方式二:命令行\n\n```bash\npython rocom_scraper.py # 全量爬取\npython rocom_scraper.py --check-update # 检查更新\npython viewer.py # 图鉴查看器\npython battle.py # 战斗模拟器\n```\n\n---\n\n## 爬虫\n\n### 可选参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔下限(秒),实际为 `delay ~ delay+1.5` 随机值 | 1.5 |\n| `--output path` | 输出 JSON 的路径 | `data/sprites.json` |\n| `--check-update` | 增量更新模式 | — |\n\n### 输出文件\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整精灵数据,嵌套 JSON |\n| `data/sprites.csv` | 扁平化 CSV,可用 Excel / pandas 打开 |\n| `data/sprites.backup.json` | 每次爬取前自动备份的上一版 |\n\n### JSON 字段说明\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `no` | int | 精灵编号 |\n| `name` | str | 精灵名称 |\n| `form` | str / null | 形态名,无则为 null |\n| `url` | str | BWIKI 原始页面链接 |\n| `has_shiny` | bool | 是否有异色图 |\n| `attributes` | list[str] | 属性,最多两个,如 `[\"火\", \"水\"]` |\n| `stats` | dict | 种族值:`hp / atk / sp_atk / def / sp_def / spd / total` |\n| `ability` | dict | 特性:`name / description` |\n| `type_matchup` | dict | 克制关系:`strong_against / weak_to / resists / resisted_by` |\n| `skills` | list[dict] | 可学技能列表,见下表 |\n\n**skills 子字段:**\n\n| 字段 | 说明 |\n|------|------|\n| `name` | 技能名 |\n| `attribute` | 技能属性(火/水/草…) |\n| `category` | 类别(物攻 / 魔攻 / 状态 / 防御) |\n| `power` | 威力数值 |\n| `cost` | 能量消耗 |\n| `description` | 技能效果描述 |\n\n---\n\n## 图鉴查看器\n\n```bash\npython viewer.py\n```\n\n终端显示类手机图鉴界面:\n\n```\n╭─────────────── 洛克王国图鉴 ───────────────╮\n│ NO.001 迪莫 │\n│ 属性 光 │\n│ ──────────────── 种族值 ───────────────── │\n│ 生命 ████████░░░░ 120 │\n│ 物攻 █████░░░░░░░ 80 │\n│ 合计 582 │\n│ ──────────────── 克制关系 ──────────────── │\n│ 克制 恶 幽 │\n│ 被克制 幽 草 │\n│ ──────────────── 技能 ──────────────────── │\n│ 猛烈撞击 普通 物攻 ★ │\n│ 对敌方精灵造成物理伤害。 │\n╰────────────────── 1 / 427 ─────────────────╯\n```\n\n| 按键 | 功能 |\n|------|------|\n| `←` / `→` 或 `a` / `d` | 切换精灵 |\n| `/` | 按名称或编号搜索 |\n| `q` | 退出 |\n\n---\n\n## 战斗模拟器\n\n```bash\npython battle.py\n# 或双击 run.bat → 4. Battle simulator\n```\n\n### ⚠ 模拟器精度说明\n\n**本模拟器仅供配队思路参考,结果不代表真实游戏中的实际表现。**\n\n| 项目 | 实现情况 | 说明 |\n|------|----------|------|\n| 六维属性 | ✅ 已实现 | 由种族值 + 个体值规则 + 性格修正公式计算,与游戏公式一致 |\n| 双属性精灵 | ✅ 已实现 | 受击克制倍率 = 主属性 × 副属性,221 只双属精灵全覆盖 |\n| 性格系统 | ✅ 已实现 | 默认自动分配(种族值最高项+20%,最低项-10%),支持手动覆盖 |\n| 技能效果 | ✅ 部分实现 | 通过正则解析技能描述文本,常见效果(buff/debuff/异常/吸血等)已覆盖,复杂描述可能漏解析 |\n| 异常状态 | ✅ 已实现 | 烧伤 / 中毒 / 冻结 / 寄生,规则见下方机制表 |\n| 应对机制 | ✅ 已实现 | 攻击/防御/状态三类应对的减伤、反弹、威力倍率 |\n| 天气系统 | ✅ 已实现 | 雪天 / 沙暴 / 雨天,持续 8 回合 |\n| **特性(被动)** | ❌ **未实现** | 特性字段仅作显示,不参与战斗计算 |\n| 对战策略 | ❌ 随机 AI | 双方均随机选择可用行动,不代表玩家的实际操作水平 |\n| 持久化效果 | ⚠️ 部分实现 | 技能描述中\"永久\"类效果的触发依赖描述文本解析,准确性因技能而异 |\n\n**特别注意:** 特性是洛克王国的核心玩法之一,每只精灵的特性在游戏内会带来显著的战斗加成(如\"溶解扩散\"在配毒队时极为关键)。由于特性效果形式多样、难以自动化解析,当前版本尚未实现,因此模拟结果与真实对局存在较大偏差,请以游戏内实际表现为准。\n\n---\n\n### 主菜单\n\n每次进入时顶部显示当前队伍名册:\n\n```\n========================================================\n 洛克王国战斗模拟器\n========================================================\n 当前队伍列表(3 支):\n 1. [预设] 预设毒队\n 2. [预设] 预设翼王队\n 3. [自定] 我的速攻队\n========================================================\n 1. 开始对战 (从列表选两支队伍)\n 2. 新建队伍 (交互组队并保存)\n 3. 管理队伍 (查看 / 删除 / 重命名 / 编辑)\n 4. 批量模拟 (选两支队伍跑 N 场)\n 5. 从图片导入队伍 (识别标准组队分享图)\n 0. 返回\n========================================================\n```\n\n---\n\n### 队伍名册\n\n队伍保存在 `data/teams.json`,跨会话持久化。\n\n| 队伍类型 | 说明 |\n|----------|------|\n| `[预设]` | 内置队伍(预设毒队、预设翼王队),不可删除或重命名 |\n| `[自定]` | 用户创建的队伍,可完整编辑 |\n\n**管理操作(菜单 3):**\n\n| 操作 | 说明 |\n|------|------|\n| `e3` | 编辑第 3 支队伍的精灵配置(技能 + 性格) |\n| `r3` | 重命名第 3 支队伍 |\n| `d3` | 删除第 3 支队伍 |\n| `3` | 查看第 3 支队伍的详情(性格 + 技能) |\n\n---\n\n### 新建队伍(菜单 2)\n\n输入队伍名称后,逐步引导选择 6 只精灵,每只选 4 个技能。组队时同步显示性格:\n\n```\n── 第 1 只精灵 ──\n输入精灵名(输入 ? 或 ?关键字 可搜索):影狸\n\n ✔ 影狸 [恶] 种族值总和 530 性格:速度↑ 魔防↓\n\n 可学技能(共 XX 个):\n 1. 嘲弄 2. 恶意逃离 3. 毒液渗透 ...\n\n 已选 (0/4):(无)\n 选择第 1 个技能:嘲弄\n ...\n```\n\n**精灵搜索:**\n\n| 输入 | 效果 |\n|------|------|\n| `精灵名` | 精确或自动模糊匹配 |\n| `?` | 列出前 20 只精灵 |\n| `?棘` | 搜索名称含\"棘\"的精灵 |\n\n**技能选择:**\n\n| 输入 | 效果 |\n|------|------|\n| `1` ~ `N` | 按序号选 |\n| `技能名` | 精确或模糊匹配 |\n\n---\n\n### 编辑精灵配置(管理菜单 → e<序号>)\n\n进入编辑界面后,可同时修改任意精灵的技能和性格,每只精灵旁边显示当前性格:\n\n```\n────────────────────────────────────────────────\n 编辑精灵配置 · 队伍「我的速攻队」\n <序号>=编辑技能和性格 n<序号>=仅改性格 0=保存退出\n────────────────────────────────────────────────\n 1. 影狸 [速度↑魔防↓] 1:嘲弄 | 2:感染病 | 3:毒液渗透 | 4:恶意逃离\n 2. 裘卡 [速度↑物防↓] 1:阻断 | 2:崩拳 | 3:毒囊 | 4:防御\n ...\n────────────────────────────────────────────────\n```\n\n**修改技能**(选序号后进入子编辑):\n\n```\n 当前技能: 1:嘲弄 2:感染病 3:毒液渗透 4:恶意逃离\n 输入替换(支持多个,如 1:喷火, 2:水刃,3:冰晶)回车=完成:\n 1:毒液渗透,2:感染病,3:恶意逃离,4:嘲弄\n```\n\n支持中英文冒号(`:` `:`)和逗号(`,` `,`)混用,一行可替换 1~4 个技能槽。\n\n**修改性格**(`n<序号>`):\n\n```\n 影狸 当前性格:速度↑ 魔防↓\n 可选属性:生命 物攻 魔攻 物防 魔防 速度\n 输入「提升:降低」(如 速度:魔攻),回车=恢复自动[速度↑魔防↓]:速度:物防\n 影狸 性格已设为 速度↑ 物防↓ → HP=343 物攻=... 速度=240\n```\n\n自定义性格显示带 `*` 标记(如 `[速度↑物防↓*]`)。\n\n---\n\n### 开始对战(菜单 1)\n\n从名册选 A、B 两队,随机 AI 操控并实时输出日志:\n\n```\n────────────────────────────────────────── 回合 3\n 预设毒队: 裘卡 [##########] 302/302 能量: 8\n 翼王队: 声波缇塔 [####......] 149/334 能量: 7 毒2\n[A] 裘卡 使用 崩拳(物攻 武系 威力60)\n → 对 声波缇塔 造成 185 点伤害 [克制!] (HP: 334→149/334)\n```\n\n---\n\n### 批量模拟(菜单 4)\n\n从名册选两队,输入场数,输出胜率统计(适合横向比较配队强度):\n\n```\n 批量模拟结果(100 场)\n 预设毒队 胜: 83 场 (83.0%)\n 预设翼王队 胜: 15 场 (15.0%)\n 平局: 2 场 ( 2.0%)\n 平均回合数: 97.6\n 总耗时: 0.31s (3.1ms/场)\n```\n\n---\n\n### 从图片导入队伍(菜单 5)\n\n识别游戏内标准组队分享截图,自动提取精灵名和技能,存入名册。\n\n**第一步:** 将截图放入 `import_images/` 文件夹。支持 `JPG / PNG / WEBP / GIF`。\n\n**第二步:** 选择识别方式:\n\n| 方式 | 精度 | 费用 | 安装 |\n|------|------|------|------|\n| Claude Vision API | ★★★★★ | 按量计费 | `pip install anthropic` + 配置 `ANTHROPIC_API_KEY` |\n| rapidocr(本地) | ★★★☆☆ | 免费 | `pip install rapidocr-onnxruntime` |\n| easyocr(本地) | ★★★★☆ | 免费 | `pip install easyocr`(需 PyTorch) |\n\n**API Key 配置:**\n\n```bash\n# Windows CMD\nset ANTHROPIC_API_KEY=sk-ant-...\n# PowerShell\n$env:ANTHROPIC_API_KEY=\"sk-ant-...\"\n# 永久:系统属性 → 高级 → 环境变量\n```\n\n**第三步:** 预览识别结果,确认后存入名册。不在技能库中的技能会给出校验提示,建议手动替换。\n\n---\n\n### 战斗引擎实现机制\n\n| 机制 | 规则 |\n|------|------|\n| **伤害公式** | `(攻/防) × 0.9 × 技能威力 × 能力等级 × 本系加成(×1.5) × 克制倍率 × 天气加成` |\n| **能力等级** | `(1 + 攻击提升 + 敌方防御降低) / (1 + 攻击降低 + 敌方防御提升)` |\n| **双属性克制** | `克制倍率 = 对主属性倍率 × 对副属性倍率` |\n| **性格修正** | 种族值最高项 +20%,最低项 -10%(可手动覆盖) |\n| **烧伤** | 每回合 `-2% × 层数` HP,层数减半衰减,归零消失 |\n| **中毒** | 每回合 `-3% × 层数` HP,层数不衰减 |\n| **冻结** | 回合结束时若 HP < `maxHP × 层数/12` 则死亡 |\n| **寄生** | 被寄生者每回合 -8% HP,寄生者在场时回复等量 |\n| **应对** | 攻击 vs 防御/状态、防御 vs 状态 各触发对应额外效果 |\n| **天气** | 雪天:所有精灵每回合 +2 冻结层;沙暴:地系技能能耗减半;雨天:水系威力 +50% |\n| **换人** | 主动换人 / 精灵倒下后自动切换到首位存活精灵 |\n| **能量** | 汇合聚能 +5,技能各有消耗,不足时强制聚能 |\n\n---\n\n## 项目结构\n\n```\nrocom-data/\n├── rocom_scraper.py 爬虫主程序\n├── viewer.py 终端图鉴查看器\n├── battle.py 战斗模拟器主入口\n├── run.bat Windows 一键启动菜单\n├── requirements.txt 依赖清单\n│\n├── data/\n│ ├── sprites.json 精灵完整数据(爬虫输出)\n│ ├── sprites.csv 精灵扁平化数据\n│ ├── skills_all.csv 技能库(含威力数值)\n│ └── teams.json 队伍名册(自动生成,可手动编辑)\n│\n├── import_images/ 队伍分享截图放置目录\n│ └── README.txt 使用说明\n│\n├── sim/ 战斗引擎(基于 NRC_SIM)\n│ ├── battle_engine.py 回合主循环\n│ ├── battle_state.py 战斗状态容器\n│ ├── damage_calc.py 伤害公式\n│ ├── counter_system.py 应对系统\n│ ├── pokemon.py 精灵模型(含双属性、性格)\n│ ├── skill.py 技能数据模型\n│ ├── types.py 属性枚举 + 克制表 + normalize_type\n│ ├── pokemon_db.py 精灵数据库(sprites.json → 进战六维 + 性格)\n│ ├── skill_db.py 技能数据库(skills_all.csv + 可学技能查询)\n│ ├── team_builder.py 精灵构建(支持性格覆盖)\n│ ├── team_builder_interactive.py 交互式组队\n│ ├── team_roster.py 队伍名册持久化\n│ ├── team_image_parser.py 图片识别(Claude Vision API)\n│ └── team_image_parser_ocr.py 图片识别(本地 OCR)\n│\n└── tests/\n ├── test_all.py 战斗引擎测试套件(27 项)\n └── test_interactive.py 交互式组队测试(5 项)\n```\n\n---\n\n## 免责声明\n\n- 本项目仅供个人学习使用,请勿高频请求 BWIKI,以免对服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- **战斗模拟结果仅供参考**,与游戏内真实对局存在差异,请以游戏内实际表现为准\n- 使用本项目产生的一切后果由使用者自行承担\n\n## 贡献\n\n欢迎提 PR 修复解析问题或补充缺失字段,感谢!\n\n## 致谢\n\n本项目由 [AofeiLi-code](https://github.com/AofeiLi-code) 负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n\n战斗引擎(`sim/` 目录)基于 [NRC_SIM](https://github.com/AofeiLi-code/NRC_SIM),遵循 MIT License。\n"}, "7a167c19ca6ff02613283ce6279f3319ee8e0b31": {"t": 1785764692.2523065, "n": 3399, "h": "7170fd279e475a91", "c": "# rocom-data\n\n从洛克王国世界 BWIKI 爬取完整精灵图鉴数据,包含种族值、技能、特性、属性克制关系,并附带一个可在终端直接浏览的图鉴查看器。\n\n## 功能\n\n| 功能 | 说明 |\n|------|------|\n| 🕷️ 全量爬取 | 抓取 BWIKI 上全部精灵数据,保存为 JSON 和 CSV |\n| 🔄 检查更新 | 对比本地与 wiki 的差异,仅增量爬取新增精灵 |\n| 📖 图鉴查看器 | 在终端按页浏览每只精灵的完整信息,支持搜索 |\n\n## 数据来源\n\n数据来自 [BWIKI 洛克王国世界](https://wiki.biligame.com/rocom/),仅供个人学习使用,请勿用于商业目的。\n\n---\n\n## 环境要求\n\n- Python 3.10+\n- 依赖库:`requests`、`beautifulsoup4`、`rich`\n\n```bash\npip install -r requirements.txt\n```\n\n---\n\n## 使用方法\n\n### 方式一:双击 run.bat(推荐)\n\nWindows 用户直接双击 `run.bat`,会出现菜单:\n\n```\n================================\n Rocom Sprite Data Tool\n================================\n 1. Full scrape (all sprites) ← 全量爬取\n 2. Check for updates ← 检查更新\n 3. Browse sprites (viewer) ← 打开图鉴查看器\n 4. Exit\n================================\n```\n\n### 方式二:命令行\n\n```bash\n# 全量爬取所有精灵\npython rocom_scraper.py\n\n# 检查并增量更新\npython rocom_scraper.py --check-update\n\n# 打开图鉴查看器\npython viewer.py\n```\n\n### 爬虫可选参数\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔秒数,过低可能被限速 | 0.8 |\n| `--output path` | 输出 JSON 的路径 | `data/sprites.json` |\n| `--check-update` | 检查更新模式,不重新全量爬取 | — |\n\n---\n\n## 图鉴查看器\n\n运行 `python viewer.py` 后,终端会显示类似手机图鉴的界面:\n\n```\n╭─────────────── 洛克王国图鉴 ───────────────╮\n│ NO.001 迪莫 │\n│ 属性 光 │\n│ │\n│ ──────────────── 种族值 ───────────────── │\n│ 生命 ████████░░░░ 120 │\n│ 物攻 █████░░░░░░░ 80 │\n│ ... │\n│ 合计 582 │\n│ │\n│ ──────────────── 克制关系 ──────────────── │\n│ 克制 恶 幽 │\n│ 被克制 幽 草 │\n│ ... │\n│ │\n│ ──────────────── 技能 ──────────────────── │\n│ 猛烈撞击 普通 物攻 ★ │\n│ 对敌方精灵造成物理伤害。 │\n│ ... │\n╰────────────────── 1 / 427 ─────────────────╯\n```\n\n**操作键:**\n\n| 按键 | 功能 |\n|------|------|\n| `←` / `→` 或 `a` / `d` | 切换上一只 / 下一只精灵 |\n| `/` | 搜索(输入名称或编号) |\n| `q` | 退出查看器 |\n\n---\n\n## 输出文件\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整数据,嵌套 JSON,适合程序读取 |\n| `data/sprites.csv` | 扁平化 CSV,可直接用 Excel 或 pandas 打开 |\n| `data/sprites.backup.json` | 每次爬取前自动备份的上一版数据 |\n\n### JSON 字段说明\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `no` | int | 精灵编号 |\n| `name` | str | 精灵名称 |\n| `form` | str / null | 形态名(如\"蓬松的样子\"),无则为 null |\n| `url` | str | BWIKI 原始页面链接 |\n| `has_shiny` | bool | 是否有异色图 |\n| `attributes` | list[str] | 属性(最多两个,如 `[\"火\", \"水\"]`) |\n| `stats` | dict | 种族值,含 `hp / atk / sp_atk / def / sp_def / spd / total` |\n| `ability` | dict | 特性,含 `name / description` |\n| `type_matchup` | dict | 克制关系,含 `strong_against / weak_to / resists / resisted_by` |\n| `skills` | list[dict] | 技能列表,见下表 |\n\n### skills 子字段\n\n| 字段 | 说明 |\n|------|------|\n| `name` | 技能名 |\n| `attribute` | 技能属性(火/水/草…) |\n| `category` | 类别(物攻 / 魔攻 / 状态 / 防御) |\n| `power` | 威力数值 |\n| `cost` | 能量消耗(星数) |\n| `description` | 技能效果描述 |\n\n---\n\n## 免责声明\n\n- 本项目仅供学习爬虫与数据分析,请勿高频请求,以免对 BWIKI 服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- 使用本项目产生的一切后果由使用者自行承担\n\n## 贡献\n\n欢迎提 PR 修复解析问题或补充缺失字段,感谢!\n\n## 致谢\n\n本项目由 [AofeiLi-code](https://github.com/AofeiLi-code) 负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n"}, "445857597dc767352dbccceb515a704e22a3d598": {"t": 1785764693.8121066, "n": 2271, "h": "452749f9aa934da9", "c": "# rocom-data\n\n从洛克王国世界 BWIKI 爬取精灵图鉴数据,输出为 JSON 与 CSV 格式,供个人学习与分析使用。\n\n## 数据来源\n\n数据来自 [https://wiki.biligame.com/rocom/](https://wiki.biligame.com/rocom/),仅供个人学习使用,请勿用于商业目的。\n\n## 环境要求\n\n- Python 3.10+\n\n## 安装与使用\n\n**1. 安装依赖**\n\n```bash\npip install -r requirements.txt\n```\n\n**2. 运行爬虫**\n\n- Windows 双击 `run.bat` 即可启动\n- 或在命令行运行:\n\n```bash\npython rocom_scraper.py --delay 1.5\n```\n\n- VS Code 用户可按 `Ctrl+Shift+B` 直接运行\"爬取精灵数据\"任务\n\n**可选参数**\n\n| 参数 | 说明 | 默认值 |\n|------|------|--------|\n| `--limit N` | 只爬前 N 只精灵(调试用) | 0(全部) |\n| `--delay N` | 每次请求间隔秒数 | 0.8 |\n| `--output path` | JSON 输出路径 | `data/sprites.json` |\n\n**3. 输出文件**\n\n| 文件 | 说明 |\n|------|------|\n| `data/sprites.json` | 完整精灵数据,嵌套 JSON 格式 |\n| `data/sprites.csv` | 同上,扁平 CSV 格式,便于 Excel / pandas 分析 |\n\n## 输出字段说明\n\n### JSON 顶层字段\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| `no` | int | 精灵编号 |\n| `name` | str | 精灵名称 |\n| `form` | str \\| null | 形态名(如\"蓬松的样子\"),无则为 null |\n| `url` | str | BWIKI 原始页面链接 |\n| `has_shiny` | bool | 是否有异色图 |\n| `attributes` | list[str] | 属性列表(最多两个,如 `[\"火\", \"飞行\"]`) |\n| `stats.total` | int | 总种族值 |\n| `stats.hp` | int | 生命种族值 |\n| `stats.atk` | int | 物攻种族值 |\n| `stats.sp_atk` | int | 魔攻种族值 |\n| `stats.def` | int | 物防种族值 |\n| `stats.sp_def` | int | 魔防种族值 |\n| `stats.spd` | int | 速度种族值 |\n| `ability.name` | str | 特性名称 |\n| `ability.description` | str | 特性描述 |\n| `type_matchup.strong_against` | list[str] | 克制的属性 |\n| `type_matchup.weak_to` | list[str] | 被克制的属性 |\n| `type_matchup.resists` | list[str] | 抵抗的属性 |\n| `type_matchup.resisted_by` | list[str] | 被抵抗的属性 |\n| `skills` | list[dict] | 技能列表,见下表 |\n\n### skills 子字段\n\n| 字段 | 说明 |\n|------|------|\n| `name` | 技能名 |\n| `attribute` | 技能属性 |\n| `category` | 技能类别(物攻/魔攻/状态/防御) |\n| `power` | 威力 |\n| `cost` | 能量消耗(星数) |\n| `description` | 技能描述 |\n\n### CSV 列说明\n\nCSV 在 JSON 基础上做了扁平化处理:\n\n| 列名 | 说明 |\n|------|------|\n| `no` ~ `spd` | 同 JSON 对应字段 |\n| `attributes` | 属性列表,逗号拼接,如 `火,飞行` |\n| `ability_name` | 特性名 |\n| `ability_desc` | 特性描述 |\n| `strong_against` / `weak_to` / `resists` / `resisted_by` | 克制关系,各字段逗号拼接 |\n| `skills` | 技能列表,分号拼接,每条格式为 `技能名(属性/类别/威力/能量消耗/描述)` |\n\n## 免责声明\n\n- 本项目仅供学习爬虫与数据分析,请勿高频请求,以免对 BWIKI 服务器造成负担\n- 数据版权归 BWIKI 及洛克王国世界原作者所有,禁止商业使用\n- 使用本项目产生的一切后果由使用者自行承担\n\n## 贡献\n\n欢迎提 PR 修复解析问题或补充缺失字段,感谢!\n\n## 致谢\n\n本项目由创作者负责整体架构设计与需求规划,具体代码实现由 [Claude](https://claude.ai)(Anthropic)协助完成。\n"}}}} |