Files

1 line
309 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"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"}}}}