Avoid blasting to max when users unmute highlight clips; keep native slider control afterward. Co-authored-by: Cursor <cursoragent@cursor.com>
35 KiB
35 KiB
Changelog
本文件记录 上分帝(Climperor) 的用户可见变更。格式参考 Keep a Changelog。
[Unreleased]
Changed
- 仓库重组为
pc/(局内识别)、web/(上分帝 Web)与shared/(共享包)三层 monorepo;保留脚本直跑方式,站点内容与SITE_VERSION不变。
[0.5.72] - 2026-07-29
Fixed
- 上分帝 Web「主播」取消静音后默认音量改为约 35%(不再直接开到最大);用户之后 用原生滑条调大仍生效。
[0.5.71] - 2026-07-29
Added
- 上分帝 Web:明星选手 watchlist(
web/data/pro_player_watchlist.json);fetch_pro_matches.py默认按名单拉近期联赛/锦标赛对局,写入pro_matches.json(gitignore,daily 现拉);英雄详情「近期比赛」与顶层 「比赛」页合并展示。 - 上分帝 Web 顶层「比赛」Tab(
#/matches[/account_id]):侧栏筛选选手, 卡片含出装/加点(同英雄详情),可点英雄头像跳转详情。 - 主播高光同名 JPG 封面(
streamer_videos/<id>.jpg→ OSSstreamer-video/); 未开播先显示封面,避免整块黑屏。
Changed
- 顶栏顺序改为:英雄 → 排行 → 主播 → 比赛 → …
- 「主播」视频改为视口分档加载:远处不请求、近约 1 屏只
metadata、中部canplay即播且同时仅 1 路preload=auto(取代整页队列式canplaythrough);超大 mp4 再压缩以缩短首播等待。 - 收录抖音主播「雷泽」(
leize)及精选高光。
[0.5.69] - 2026-07-29
Changed
- 上分帝 Web「主播」常用英雄头像同样
eager+fetchPriority=high,并与主播 头像一并等加载完成后再启动视频预载,避免只露出alt中文名、图未出。
[0.5.68] - 2026-07-29
Changed
- 上分帝 Web「主播」常用英雄只保留头像,去掉头像下方中文名(悬停
title/alt仍可辨认)。
[0.5.67] - 2026-07-29
Changed
- 上分帝 Web「主播」头像改为
eager+fetchPriority=high,等头像加载完成 (或 2.5s 超时)后再启动视频逐个预载,避免大 mp4 占满连接导致头像只显示alt文字;视频骨架占位改为标准 16:9 横屏高度。
[0.5.66] - 2026-07-29
Changed
- 上分帝 Web「主播」视频未就绪时改为矮骨架占位(约 88px +「视频加载中」), 不再默认铺满 9:16 大黑框;元数据到达后再按真实比例展开,并隐藏占位期原生播放钮。
[0.5.65] - 2026-07-29
Fixed
- 上分帝 Web「主播」视频队列:建卡时网格尚未挂到 DOM,
isConnected为假会把 队列条目全部丢掉,导致既不预载也不自动播放;改为未挂载时下一帧重试。
[0.5.64] - 2026-07-29
Changed
- 上分帝 Web「主播」精选视频改为队列逐个预载:按卡片顺序先拉第一个,
canplaythrough(或失败)后再拉下一个;播放仍跟视口中心卡。避免十余个 大 mp4 同时抢带宽导致首屏长时间转圈。
[0.5.63] - 2026-07-29
Changed
- 上分帝 Web「主播」精选视频改为延迟挂载
src(preload="none"),为逐个 预载做准备(随 0.5.64 队列逻辑完善)。
[0.5.62] - 2026-07-29
Fixed
- 上分帝 Web「对位」STRATZ 抓取默认改为全量刷新(
--resume-matchups仅中断续跑); 单英雄失败保留上一版并标stale,原子写入避免半截缓存。版本档软触发--matchups-only刷新(无 token 不阻断)。
Changed
- 「对位」面板标明全局聚合口径(不跟随走势页段位/分路/周),展示 STRATZ 相对优势 与原始对局胜率、场次、拉取日期;胜率低于 50% 但相对优势为正时不再误读为错误。
- 有 OpenDota
matchups.json时对克制/被克行做基线校正交叉提示(来源一致/分歧); 样本不足标为暂无可靠交叉结论。Dota2ProTracker 仅作文档化人工复核参考。
Added
shared/matchup_cross.py+audit_relations的web_matchup_tops_cross报告段; 单元测试shared/tests/test_matchup_cross.py。
[0.5.61] - 2026-07-29
Added
- 上分帝 Web「主播」访问触发的实时在播状态:新增 Pages Function
GET /api/live-status(web/frontend/functions/api/live-status.js),首位访客触发 全量探测,经边缘 Cache API 合并请求(5 分钟新鲜窗口内共享结果,无需 KV); 探测逻辑与fetch_streamer_live.py一致(抖音 SSRroomStore+ B 站Room/get_info);单个探测失败沿用旧缓存值并标stale,全失败回陈旧快照或空表, 永不 500。前端每页加载至多请求一次,合并is_live后就地更新「直播」角标/动效; 接口不可用时回退data.json的 daily 探测值。本地开发serve_relations.py提供空 stub 避免 404。
[0.5.60] - 2026-07-29
Added
- 上分帝 Web「主播」真实在播探测:
fetch_streamer_live.py(抖音解析直播间 SSR 页roomStore状态;B 站Room/get_info)回写data/streamers.json的is_live/live_probed_at,探测失败保留旧值;进refresh_web --tier daily。
Changed
- 主播卡片「直播」角标与脉冲动效只在
is_live探测为真时显示(此前以live_url存在作代理,不准确);头像在有live_url时仍可点击进直播间,未开播也可访问。
[0.5.59] - 2026-07-29
Added
- 上分帝 Web「被克装备」观测证据:
fetch_item_counter_stats.py(OpenDota Explorer 对阵购买率/条件胜率减同装备全局队伍基线)→data/item_counter_stats.json;item_fears.py对全部英雄已有机制候选小幅调序;显著新组合须机制复核后写入 overrides。 - 上分帝 Web 日活飞书推送:
notify_site_traffic.py+ Gitea Actionssite-traffic-notify(每日 09:00 CST;真实访问按已知浏览器 UA 打开/估算; 卡片含自动刷新:web-daily/weekly/patch结论 + 当日 Pages 生产部署)。 - 上分帝 Web 顶层「走势」
#/trends[/bracket]:近 8 周高胜率/上场率榜(初期 / 迷你走势 / 末期 / 变化;STRATZ;无禁用率)。 - 上分帝 Web 接入 STRATZ(
fetch_stratz_meta.py,token 经.env/ keyzoo):- 英雄详情「走势」优先 STRATZ:勋章条 + 最近 1 周三卡 + 分路 + 近 8 周逐周列表(OpenDota 作兜底)
- 新子 Tab「对位」
#/heroes/<key>/matchups:克制 / 被克 / 搭档三列 STRATZ Top(与网格机制「克/怕/搭」分开展示) - 缓存:
data/stratz_hero_meta.json/data/stratz_matchup_tops.json(gitignore;仅 Web,不进 recommend / relations)
- 上分帝 Web「近期比赛」Tab(
#/heroes/<key>/matches):同英雄近期局终局出装 + 加点顺序;展示选手昵称/段位勋章与外链;fetch_hero_matches.py→data/hero_matches.json(--source league|public|both;--workers;--enrich-item-times;仅 Web,不进局内推荐)。 - 选将规则阵容画像(不接 AI):识别敌方推进/全球流、敌我缺口(缺控制/爆发/输出/先手);
全网格标 克 / 搭 / 补;叠加层显示一句阵容分析;每英雄短推荐原因写入日志与
resultsJSON(draft_archetypes.py+recommend.suggest_marks)。
Changed
- 上分帝 Web「被克装备」卡片有对阵证据时显示购买率角标;显著新组合补入 overrides (帕克紫怨、幻影刺客/编织者/石鳞剑士鬼杖、编织者 Eul、石鳞剑士/虚无之灵羊刀); 剑圣移除林肯法球并补入幽魂权杖。
- 上分帝 Web 英雄详情「走势」:三卡 / 分路统一 当前选中勋章 · 最近 1 周; 布局为勋章条 → 提示 → 三卡 → 分路 → 近 8 周列表。
- 文档与注释统一称呼:
web/relations/子项目改称 上分帝 Web(不再称「关系预览」);路径与脚本名(如serve_relations.py)暂保持不变。 - 「近期比赛」公开对局默认优先国服;展示最近 10 场胜局;外链改 Dotabuff。
- 选将推荐不再限 Top-3 名次青标;非定位局也可推克/搭/补(无分路字则不过滤)。
[0.5.58] - 2026-07-28
Added
- 上分帝 Web「主播」新增 B 站沙王主播,收录主页、直播间、关注与粉丝数。
Changed
- 主播卡片元信息按平台显示:抖音显示获赞/粉丝,B 站显示 UID/关注/粉丝。
[0.5.57] - 2026-07-28
Fixed
- 上分帝 Web「主播」竖屏精选视频黑边:不再依赖 canvas 扫边;竖屏统一用内容框 +
object-fit: cover,按上下黑边比例设object-position;亚瑟归来 / 大地瓜写入video_aspect(横屏仍contain)。
[0.5.56] - 2026-07-28
Changed
- 上分帝 Web「主播」精选视频:滚动自动播放默认静音;不再因页面任意点击/按键全局开声,需在各视频原生控件中主动取消静音。
[0.5.55] - 2026-07-28
Fixed
- 上分帝 Web「主播」竖屏精选视频黑边:修正
object-position方向;preload=auto+ 首帧检测失败时对竖屏启用 16:9 启发式裁切(canvas / OSS CORS 不可用时仍生效)。
[0.5.54] - 2026-07-28
Changed
- 上分帝 Web 英雄详情「主播」子 Tab:卡片宽度与顶层
#/streamers一致(880px居中),竖屏/横屏精选视频比例不变。
[0.5.53] - 2026-07-28
Changed
- 上分帝 Web「主播」精选视频:竖屏且文件内嵌上下黑边时,首帧自动检测内容区并裁切显示;
横屏视频仍为
contain。可选video_fit/video_crop/video_aspect手工覆盖。
[0.5.52] - 2026-07-28
Added
- 上分帝 Web「主播」页卡片精选高光视频:手工
video/video_title+assets/streamer_videos/(本地/streamer-video/,OSSstreamer-video/); 滚入视口中部自动播放(原生 controls;多卡时播最靠近中心者);10 人收录。 - 直播态头像:抖音式粉红外圈脉冲 + 头像呼吸动画;有
live_url(或将来is_live)时点击头像进直播间;角标「直播」。
Changed
- 上分帝 Web「主播」卡片改版:抖音式资料区(昵称行 + 全宽元信息/签名)、 约 880px 宽、元信息竖线分隔、放大英雄标签;右侧仅「关注」;不显示视频标题。
[0.5.51] - 2026-07-28
Changed
- 上分帝 Web 英雄详情:定位标签从标题下方移到「技能」Tab 中间列顶部(技能图标上方)。
[0.5.50] - 2026-07-28
Added
- 上分帝 Web 顶层「主播」
#/streamers+ 英雄详情「主播」子 Tab:手工维护直播间/主页与常用英雄,fetch_streamers.py从抖音主页补全昵称/签名/关注粉丝获赞/头像;首版仅抖音;data/streamers.json;仅 Web,不进 recommend;进refresh_webdaily 软失败刷新。
[0.5.29] - 2026-07-28
Added
- 上分帝 Web:STRATZ 走势 / 对位 Tab(见 Unreleased 明细;站点版本
0.5.29)。
[0.5.28] - 2026-07-28
Added
- 「近期比赛」出装图标叠加购买时间(MM:SS,支持负值);数据来自 OpenDota
purchase_log(未解析对局无时间)。中立装用neutral_item_history。 fetch_hero_matches.py --enrich-item-times:只补时间字段,无需全量重拉列表。
Changed
- 「近期比赛」出装布局对齐 OpenDota:主栏一行、背包第二行(背包轮廓图标),去掉竖分隔线。
[0.5.27] - 2026-07-28
Changed
- 「近期比赛」卡片头:昵称旁不再显示段位文字(如「冠绝」);保留勋章图标,排行榜 # 放进勋章 tooltip。
[0.5.19] - 2026-07-28
Fixed
- 排行页标题「Immortal 排行榜」与 info 图标保持同一行不换行。
[0.5.18] - 2026-07-28
Changed
- 排行页「Immortal 排行榜」标题旁增加与走势页一致的 info 气泡提示(官方 Immortal 地区榜 · 各区分数不可比)。
[0.5.13] - 2026-07-28
Changed
- 排行榜按视口居中(不含右侧说明);说明绝对定位贴在榜单右侧。
[0.5.12] - 2026-07-28
Fixed
- 排行表分割线错位(去掉选手列 flex)。
[0.5.11] - 2026-07-28
Changed
- 排行页右侧说明贴紧榜单(与榜单成组居中),不再贴屏幕右缘。
[0.5.10] - 2026-07-28
Changed
- 排行页国籍列显示中文国名(未知代码仍回退为原代码)。
[0.5.9] - 2026-07-28
Changed
- 排行页战队 / 国籍无数据时留空,不再显示「—」。
[0.5.8] - 2026-07-28
Changed
- 排行页:榜单单独居中,右侧说明贴屏幕右缘(不再与榜单成组居中)。
[0.5.7] - 2026-07-28
Changed
- 排行页新增「战队」列(原选手行内战队标签拆出)。
[0.5.6] - 2026-07-28
Changed
- 排行页新增「国籍」列(原选手行内国旗代码拆出)。
[0.5.5] - 2026-07-28
Changed
- 排行页去掉官方榜说明文案。
[0.5.4] - 2026-07-28
Changed
- 排行页副标题去掉地区名与「Top 100」,仅保留更新时间。
[0.5.3] - 2026-07-28
Changed
- 排行页:榜单居中,标题 / 地区切换 / 说明贴在右侧。
[0.5.1] - 2026-07-28
Added
- 上分帝 Web「排行」页(
#/rankings,插在英雄之后):Valve Immortal 四区榜 Top 100(中国 / 欧洲 / 美洲 / 东南亚);fetch_leaderboards.py→data/leaderboards.json(仅排名+昵称等,无 MMR/账号 ID)。
[0.5.0] - 2026-07-28
Added
- 上分帝 Web「走势」Tab(
#/heroes/<key>/trends):OpenDota 近约 7 天各段位 胜率 / 上场率 / 场次;顶部勋章条(先锋→冠绝)切换段位。 fetch_hero_stats.py→data/hero_stats.json(含totals/window_*); 仅 Web 站点,不进relations.json/ 局内推荐。- 核心装备图标显示列表内相对使用率 %(OpenDota popularity 归一化)。
- 冠绝勋章旁说明:样本过小则与超凡合并展示。
Changed
- 走势布局居中:勋章条 + 三卡,无段位列表 / 被禁率;勋章约 90px。
- 静态资源增加
/rank/与assets/rank_icons/rank_icon_1..8.png。
[0.4.2] - 2026-07-27
Changed
- 上分帝 Web静态图标(头像 / 装备 / 技能 / 属性等)改由阿里云 OSS 同桶托管;
config.js新增STATIC_ASSET_BASE,生产 Pages 包体约 2 MB(仅 HTML/JS/data),换机部署无需本地 fetch 图标。同步脚本_oss_static_assets.py upload。
Added
- 新增
_oss_static_assets.py:将 portrait/item/ability 等图标同步到 OSS。
[0.4.1] - 2026-07-27
Changed
- 线上上分帝 Web技能演示视频改由阿里云 OSS 托管(桶
climperor,https://climperor.oss-cn-shanghai.aliyuncs.com/ability-video/...),不再打进 Cloudflare Pages;本地serve_relations.py仍读assets/ability_videos/。 导出写入config.js的ABILITY_VIDEO_BASE(export_relations_site.py --ability-video-base/deploy_relations.py默认 OSS 地址)。
Added
- 版本页底部居中显示站点版本号(
config.js的SITE_VERSION,如v0.4.1)。
Fixed
- 版本页熊灵(spirit bear)头像:静态导出包含
portrait/spirit_bear.png。
[0.4.0] - 2026-07-27
Added
- 新增
deploy_relations.py:一键把上分帝 Web静态站点部署到 Cloudflare Pages —— 串联导出(export_relations_site.py)→ 资产完整性预检(缺图则中止) →wrangler pages deploy直传dist/relations/→ 绑定自定义域名。凭据 经 keyzoo 注入(refining/cloudflare的 Global API Key)或手动CLOUDFLARE_EMAIL/CLOUDFLARE_API_KEY环境变量;默认项目climperor-relations、域名dota2.refining.dev,均可参数覆盖。 - 新增
_cf_status.py:只读查询 Cloudflare Pages 项目 / 部署 / 自定义域名 状态(凭据经 keyzoo 注入),部署后核对用;另有一次性辅助脚本_cf_domain.py(探测域名/ DNS 记录)与_cf_add_cname.py(补建缺失的 CNAME,幂等)。 - 物品页搜索框进 URL:
#/items?q=...,刷新保状态、可分享;英雄页与物品页 搜索各用独立 debounce 计时器,互不干扰。 - 版本页支持非英雄单位:Valve patchnotes
heroes[]中的熊灵(id 1961)等 伪英雄 id 现解析为中文名 + 本地头像(fetch_patches.py的UNIT_NAMES, 静态导出一并拷贝头像)。
Fixed
- 修复
serializeHash生成#heroes(缺/)导致刷新后路由解析异常的 问题,现统一为#/heroes形态。 - 版本日志中未知单位 id 不再显示
# 1961原始数字,回退为「其它单位」。 - 本地开发服务
serve_relations.py增加 CSP 响应头(default-src 'self'等), 限制资源只从本站加载。 data.json加载失败时显式抛出 HTTP 状态错误,不再静默进入异常渲染。
Performance
- 上分帝 Web缓存英雄技能条目(
skillEntriesFor)与血蓝条量程 (resourceBarScale)计算结果,数据重载时失效,减少重复遍历。
[0.3.0] - 2026-07-27
Added
- 上分帝 Web「版本」页改为默认展示最新版本的完整改动详情(综合 / 物品 / 中立物品 /
英雄),顶部下拉可切换近一年内的其它版本;
fetch_patches.py重写为抓取近一年 (默认 365 天,--days/--since可调)版本列表 + 逐版本patchnotes详情, 构建lookup(ability_id / hero_id → 名称 + 图标 key)并下载引用到的物品 / 技能 图标到assets/,静态导出与本地开发服务均自包含、不联网。 - 版本页排版对齐官网:左大标题「游戏性更新 {版本}」+ 右选择框,内容居中窄列;
物品图标按 Steam CDN 88×64 比例(66×48)显示(修复正方形框上下黑边);英雄头像
复用英雄页 16:9 宽卡(
?v=wide、object-fit:contain)不再裁切面部;图标放大 (物品 56、技能 48、头像 112,对齐技能页 68 / 商店 70)。 - 英雄详情区新增 版本变更 标签:列出该英雄近一年各版本的改动(版本号 + 日期 + 属性 chip + 各技能改动),内容居中、可滚动;与版本页共用技能块渲染逻辑。
- 版本日志先天技能图标修复:先天技能(如剑心犹在、狙击瞄准)CDN 404,现复用英雄
技能页 bundled
innate.png(从hero_abilities.is_innate构建先天 key 集合判断), 覆盖 117 个被引用的先天技能。 hero_notes属性标签补全movement→ 「移速」(修复原始英文movement漏显示)。- 新增
export_relations_site.py:一键导出上分帝 Web为纯静态站点(dist/relations/), 内含data.json快照 + 前端 + 图片资源,可直接部署到任意静态托管;--with-videos可选拷贝技能演示视频(体积数 GB)。 - 上分帝 Web前端资源路径改为相对路径(
data.json/attr//portrait//item/等), 静态托管在子路径下也能正常工作;serve_relations.py同时提供/data.json路由, 本地开发服务行为不变。 - 上分帝 Web技能详情:左侧播放官网技能演示视频(
assets/ability_videos/本地缓存,/ability-video/<英雄>/<技能>.webm路由),右侧为技能名与描述(对齐官网左右分栏); 未缓存的技能自动隐藏视频,描述列占满整行。 - 英雄详情的装备详情区不再重复显示大图(上方装备行已有图标)。
- 上分帝 Web技能详情新增「施法前摇」「吟唱时间」两行(取自 Valve
cast_points/channel_times,逐级相同则合并为单值);fetch_hero_abilities.py全量重抓后生效。 - 上分帝 Web技能详情按 dota2.com.cn 版式重排:移除右上重复的技能大图标(上方技能列表
已高亮选中项);属性值(技能/伤害类型/免疫/驱散/施法距离等)双列网格、特殊数值
自适应多列网格(消除右列大片空白);冷却/蓝量移到带图标的底栏——冷却用官方
cooldown.png(新增assets/ui_icons/+/ui-icon/路由,静态导出一并拷贝), 蓝量沿用官方 CSS 渐变方块;serve_relations.py字段投影补齐cast_point/channel_time。 - 技能详情布局适配
.detail定值高度链:视频改height:100%+object-fit:cover自适应填满可用高度(align-self:stretch无法压过被替换元素的 16:9 固有高度,曾 导致视频下方留白 / 顶出滚轮),main钉到列高、内容超高时仅在详情列内细滚,视频 不再被牵连出滚轮;压缩参数行距使典型技能在高屏零滚轮(无头 Chrome + CDP 实测scrollHeight == clientHeight验证)。整块宽度上限 1000→1320px、视频 700→820px、 详情列 720→760px。 - 上分帝 Web顶栏左上角新增 Dota 2 logo +「上分帝」标题(
assets/ui_icons/dota2_logo.png透明 emblem),经/ui-icon/路由与静态导出统一分发;窄屏自动隐藏标题或整组标识, 不影响居中分页布局。 - 上分帝 Web新增 Hash 路由:顶层标签(英雄 / 物品 / 版本)、选中英雄 + 详情子标签
(技能 / 核心装备 / 被克装备 / 版本变更)、物品页选中物品、版本页选中版本均同步进
URL;英雄页的定位标签筛选与搜索框文本以 query 参数(
?tags=核心,辅助&q=axe)进 URL。形态如#/heroes/axe/core、#/items/black_king_bar、#/patches/7.41(#/patches= 最新版,序列化时省略与最新同名的版本号)。刷新保状态、可分享 / 深度链接、浏览器前进后退还原;搜索框 300ms debounce +replaceState(不刷历史栈), 标签筛选用replaceState,其余离散选择用pushState。坏链接(未知英雄 / 物品 / 版本)优雅降级为丢弃该项。新增web/relations/router.js(parseHash/serializeHash/installRouter),app.js在main()装载并首屏applyUrlToState;export_relations_site.py静态导出列表补入router.js,静态站点深度链接同样可用 (可部署 GitHub Pages,无需 rewrite)。Hash 路由不命中后端路径,serve_relations.py零改动。
Fixed
fetch_hero_abilities.py:has_scepter/has_shard不再or bool(scepter_loc/shard_loc)。 Valve 移除某项升级后仍保留旧scepter_loc/shard_loc文案,但ability_has_scepter/ability_has_shard已变为False;旧 fallback 把残留文案 当成「有升级」,导致本地数据与 dota2.com 不一致。改为只信显式 flag 并清空残留 文案,全量重抓后修正 10 个过期 A 杖 + 20 个过期魔晶(主宰/剑刃风暴、 影魔/支配死灵、幻影长矛/灵魂之矛、斯拉达/鱼人碎击、术士/暗言术、哈斯卡/沸血之矛、 殁境神蚀者/奥术天球、熊战士/灵魂链接、玛尔斯/护身甲盾、破晓辰星/熠熠生辉; 剃刀/静电连接、沙王/尾刺、暗影萨满/禽戏 等)。fetch_ability_videos.py:A 杖/魔晶赋予的技能(granted_by_scepter/granted_by_shard)CDN 视频名是<hero>_aghanims_scepter/<hero>_aghanims_shard而非技能 key(如juggernaut_swift_slash→juggernaut_aghanims_scepter.webm)。 之前脚本用技能 key 拼 URL 导致 69 个赋予技能视频全部 404。新增_cdn_name()映射,本地文件名仍用 ability key(前端app.js按 ability key 请求,无需改动)。 重抓后 69 个视频全部到位(迅风斩、水晶克隆、雷云 等)。
[0.2.0] - 2026-07-27
Changed
- 代码审查重构:提取
http_utils.py公共模块,统一所有 fetch 脚本的 HTTP 请求、 UA、超时与图标下载逻辑;移除requests依赖(requirements.txt)。 - 合并
fetch_stratz_matchups.py+fetch_synergies.py→fetch_stratz.py --mode matchups|synergies。 fetch_cdn_templates.py/fetch_hero_portraits.py改用http_utils(不再依赖requests)。loc_format.py新增导出strip_html,统一 HTML 清理逻辑(fetch_hero_abilities.py/fetch_items_meta.py原各有一份重复实现)。- fetch 脚本 JSON 输出统一为
indent=2(原indent=1/ 紧凑separators混用)。 fetch_hero_abilities.py主循环改为每 10 个英雄写一次 JSON(原每英雄写一次,O(n²) I/O)。fetch_hero_items.py循环内collect_used_ids改为增量更新(原全量重算)。data/relations.jsonmeta 中本机路径C:\Users\...脱敏为dota2.xlsx。
Fixed
fetch_items_meta.py:删除strip_html死代码(未导入unescape,若被调用会NameError)。audit_relations.py:删除重复missing_cache死代码块;JSON 加载加 try/except 防文件损坏崩溃。app.js:renderBoard加state.datanull 守卫(防 fetch pending 期间搜索触发崩溃)。relations.py:删除EXTRA_NAMES中"圣堂/TA"重复项(与"圣堂/ta"归一化后相同) 及"axe":"axe"等冗余自映射项。hero_tags.py:注释「幻想系」→「幻象系」(与代码TAG_ORDER一致)。item_fears.py:enrich_override_items中not isinstance(row, dict)分支的cost死条件简化。import_relations_xlsx.py:"a仗" in t.lower() or "A仗" in t冗余条件简化。
Removed
web/relations/style.css:删除未引用的.item-row/.item-phase/.item-phase-fear规则。web/relations/app.js:删除死回退函数onItemClick、死类名(hero-stats-left/shop-group-*/shop-column-*)、合并state.selectedSkillId到state.inspect。
Added
- 上分帝 Web英雄详情:基础属性条(力量/敏捷/智力 + 成长、初始生命/魔法与恢复;
附攻击/护甲/移速/攻击距离)。数据来自 OpenDota(
fetch_cdn_templates.py→data/heroes.json),主属性高亮。 fetch_ability_videos.py:从 Steam CDN 批量拉取官网技能演示(webm/mp4), 默认限速约 1.5s+抖动,支持断点续传与 404 缓存;输出assets/ability_videos/(不入库)。- 装备说明填充 Valve
%token%数值(如飓风长戟「飓风之力」);fetch_items_meta.py --reformat-desc,共用loc_format.py。 - 上分帝 Web英雄详情底部分页:技能 / 核心装备 / 被克装备。
- 上分帝 Web新增顶级 物品 页(与英雄同级):对齐 dota2.com.cn 商店物品
11 列竖排(基础分类 / 合成分类),详情在右侧;目录来自官网
itemscategory/json(fetch_item_shop.py→data/item_shop.json), 并展示合成组件(含卷轴)与「可升级为」。 - 英雄页固定上方英雄网格高度;技能 / 核心装备 / 被克装备均可点击, 详情(含装备合成)展示在下方详情区(非弹窗)。
- 「害怕」装备规则完善:莲花
spell_reflect、点目标技能自动关联莲花/林肯;data/hero_fear_overrides.json补经典克制(如剑圣→莲花)。 - 上分帝 Web技能区对齐官网:可点选技能 / 魔晶 / 神杖升级,右侧显示描述;
下方展示天赋树(25→10)。数据来自 Valve herodata(
fetch_hero_abilities.py)。 - 上分帝 Web选中英雄后展示技能(图标 + 名称;可驱散角标;悬停看描述);
数据来自
data/hero_abilities.json,图标按需缓存到assets/ability_icons/。 - 上分帝 Web「怕的装备」:
fetch_items_meta.py(Valve/OpenDota 描述 → 机制标签)、fetch_hero_abilities.py(技能驱散等汇总)、item_fears.py(规则映射)→data/items_meta.json/hero_abilities.json/hero_item_fears.json; 详情区在「核心」下增加「怕」行。例外标签见data/item_tag_overrides.json。 本阶段仅 Web 站点,无对局内出装推荐。 - 上分帝 Web选中英雄后,下方展示中文定位
tags与核心成品装备(不再分阶段);fetch_hero_items.py:OpenDota 热度合并 + Valve 中文名,Steam CDN 图标 →data/hero_items.json/assets/item_icons/(过滤消耗品/中立/廉价件; 坚韧球/夜叉等中间件若该英雄常继续合成则隐藏,停在该件则保留)。 - GSI 全量落盘:默认把每包 POST 追加到
samples/raw/<matchid>/gsi.jsonl(gsi.dump_payloads/--dump-gsi/--no-dump-gsi)。 - 前台窗口检测:
gsi.require_foreground(默认 true)。选将跟踪时若前台不是dota2.exe则跳过本帧截屏/识别,且不消耗strategy_tail_polls;切回后继续。 - 选将角色标签悬浮层:
overlay.enabled(默认 true)。跟踪过程中在顶栏已确认 英雄下方显示角色图标(Carry / Nuker / Initiator 等);点击穿透。 data/heroes.json增加roles字段(来自 dotaconstants);fetch_cdn_templates.py同步拉取。data/heroes.json增加中文口语别名aliases(如斯拉达→大鱼人、主宰→剑圣);fetch_cdn_templates.py重拉时按key合并保留,不覆盖手工收录。data/heroes.json增加英文缩写abbr(小写列表,如 nec / vs / pa); 上分帝 Web搜索支持缩写且不区分大小写;重拉模板时保留该字段。fetch_stratz_matchups.py+audit_relations.py:拉取 STRATZ 对位并与 OpenDota 交叉审计定性关系,输出data/relations_audit.json。- 定性关系库
data/relations.json(克制有向边 + 搭档 + 理由);import_relations_xlsx.py可从选将笔记导入;serve_relations.py三视图只读预览(改 JSON 后刷新)。 fetch_hero_portraits.py下载 dota2.com/heroes 竖版头像到assets/hero_portraits/, 供上分帝 Web网格使用(与匹配用templates/cdn/分离)。- 英雄中文定位标签
tags(核心/辅助/推进/逃生/爆发/先手/控制/耐久/幻象); 上分帝 Web 页可筛选,不参与推荐打分。 - 上分帝 Web属性图标改用 dota2.com 官方素材(
assets/attr_icons/),不再手绘。 - 选将 Top-3 推荐改为读定性关系:+克制敌方 / −被敌方克 / +己方搭档; 叠层左上角青方标显示名次 1/2/3。
- draft JSON / GSI
self透传accountid、steamid。
Changed
- 上分帝 Web英雄详情(
#detail):贴视口底部展示(margin-top: auto,高度仍按内容收缩); 与上方英雄选择区保留约 16px 间距;标题 / 属性条 / 分页 / 技能与装备行 / 检视区整体水平居中(最大宽约 820px),长描述在居中容器内仍左对齐。物品页布局未改。 - 上分帝 Web技能详情区不再重复放大技能图标;顶栏选中态即可识别,详情只保留名称 / 标签 / 驱散 / 描述(核心/怕装详情仍显示装备大图)。
- 上分帝 Web先天技能统一使用共用金色水滴图标
assets/ability_icons/innate.png(多数 innate 在 Steamdota_react/abilities上 404),技能行与详情区不再破图占位。 - 上分帝 Web英雄详情:技能图标与核心/怕装列表图标加大(技能 68px、装备 72×54),
便于点选;商店页
.shop-item尺寸未改。 - 物品页详情面板改为与 11 列商店并排居中集群(
sticky),贴在商店右侧约 16px, 不再固定贴视口右缘;窄屏仍堆叠置顶。 - 物品页:
#items-view限制为视口内滚动容器,避免sticky详情随窗口滚动盖住商店列; 空状态去掉过大min-height,面板高度随内容收缩。 - 上分帝 Web天赋树改为官网弹层风格(居中「天赋树」、25→10 圆形等级徽标、左右选项行)。
heroes.json迁至data/heroes.json;可再生成的对位/审计/报告文件改由.gitignore忽略。assets/role_icons/改用 Valve 游戏内选人筛选图标(filter_*);灰蓝底板 + 深色 符号,透明角填品红 chroma,叠层不再出现黑边。- 项目定名:上分帝 / Climperor(目录
climperor),由dota2-draft-vision迁出独立仓库。 - 放弃 real 实拍模板库:删除
build_library.py、templates/real/;匹配仅使用 CDN 层。 - 移除
match.cdn_penalty与evaluate.py --cdn-only(双层库对比已无意义)。 - 模板加载 API 简化为
(hero_key, image)。 - GSI 会话截图按对局写入
samples/raw/<matchid>/。 - 运行产物纳入
.gitignore:preview/、results/、failures/、samples/raw/。 - 文档拆分为
README(操作)、DESIGN(决策)、AGENTS(协作)、CHANGELOG(变更)。 DESIGN.md/AGENTS.md补录原型会话结论:顶栏皮肤时机、决策禁改判原因、 real 库审计结论、无法靠 GSI 卡「皮肤前」单帧等。- 本人顶栏槽位只使用 GSI
team_slot;移除截屏名字亮度识别「自己是第几格」。
Removed
- real 库补充流水线与相关验收指标。
- 仓库内历史
preview/、results/调试产物。 roles._detect_self视觉认槽位备用路径。
Fixed
- 上分帝 Web英雄卡片 title 垃圾清理:
data/relations.json的 counters 被relations_patch_draft.json注入 100 条 reason 为opendota_adv/stratz_adv胜率数值的边(违反meta.note: no winrate与 AGENTS.md「不要用胜率/场次表达 机制克制」),拼进 hover title 显示为「opendota_adv=0.13; stratz_adv=4.47」 之类。删除这 100 条 numeric-reason 边(含水人 axe/hoodwink/windrunner → morphling 三条),保留 5 条定性 + 149 条空 reason counters + 11 条 synergies(空 reason 经.filter(Boolean)不进 title)。 - 上分帝 Web英雄页:
#detail不再flex: 1撑满网格下方剩余视口(短内容时大片黑底空白); 改为按内容收缩(fit-content),并用max-height限制长文案在面板内滚动。 - 上分帝 Web技能行对齐官网:左起「天赋树图标 → 先天圆形图标 → 方形技能」;天赋详情改为
悬停/点击浮动弹层(不再内联占高);图标见
assets/ability_icons/talent_tree.png。 - 上分帝 Web天赋树数值修复:天赋
name_loc的{s:bonus_<sv>}token 原全部 显示为+?/-?(format_loc只读values_float、talent_rows只传天赋 自身空special_values)。改为跨技能按 talent key 索引bonuses+ sv 名 /单 token 配对两层兜底填bonus.value;重生成data/hero_abilities.json, 1016 条全部恢复。naga_siren「捕捞速度」上游缺 bonus,经data/talent_overrides.json手工补+125。 - 上分帝 Web核心装备「阿哈利姆福佑」→「阿哈利姆神杖」:
ultimate_scepter_2(id 271) 是神杖 (id 108) 的激活形态,OpenDota 分开计数导致 37 个英雄 核心装备列表出现「福佑」甚至神杖+福佑并存。fetch_hero_items.py新增fold_blessing_into_scepter把 blessing 计数按 max 合并入 scepter, 重生成data/hero_items.json统一显示「阿哈利姆神杖」。 - (继承自原型)CDN 头像按顶栏窗口裁切,而非中心正方形;CDN-only 即可高准确率。
- (继承自原型)天梯段位条 / 勋章遮罩匹配;选人多帧 + 决策禁改判规避皮肤; best 帧优先选人阶段;本人英雄以 GSI 覆盖。
[0.1.0] - 2026-07-25
Added
- 决策时间顶栏 10 格模板匹配识别。
- 相对坐标 ROI、自动标定(玩家颜色条)。
- Steam CDN 全英雄模板拉取(
fetch_cdn_templates.py)。 - GSI 触发的选将会话跟踪(
gsi_watch.py/draft_session.py)。 - 位置文字、禁用网格、模式字辅助识别。
- 天梯 UI 遮罩与会话层皮肤策略。