PerfectBlock
Auto-perfect-block assist inspired by Dark and Darker parries and WoW's Parrot combat text. Learns each creature's timing, blocks just before impact without touching vanilla rules, and adds Parrot-style floating damage numbers and parry flashes.版本记录
1.6.8
代码审计后的一次集中清理,默认值全部改为作者实测配置(Font/Label Font = Norsebold、Base Font Size = 30、Animation Style = Static、Detect Range = 10、Flash 6 / 0.216 / 2s、Temp Buff 0.624 / 0.4、Buff Scale 1.5、Buff Max Rows 1、English Labels = true)。
- 修复
Line Spacing完全无效:行距变量算了没用,现在真正作用于叠放行距 Static2不再是Static的复制品,改成真正的「固定向下」- Sprinkler 的角度扇只剩 2 个角度(公式恒为 0):改用
Max Lines决定扇面切片 - Sprinkler 不再被左右翻转二次镜像
- Toggle 模式下不再每帧强制
m_blocking,与「只发边沿」的设计一致 - 手动完美格挡也会弹 PERFECT BLOCK 闪字(统计与后摇仍只针对自动格挡)
- 格挡数值只记录玩家/宠物那一侧,避免被怪物格挡的数字串台
- 普通格挡的日志不再谎称「按早了」,改报 blockTimer 与格挡武器
- 配置节顺序整理为 General / Feedback / Buff Panel / Combat / Learning,cfg 不再出现重复节标题
- 补上缺失的 yml 键
PatchBlocked、PatchObjects;删掉废弃的PatchVanilla、CancelAttack - 删除死代码
ReportShowTextDamage及其专用字段;learned.json版本号改为真实版本 - 术语与描述修正:
Scroll Size(像素)、Max Lines(仅 Static)、Show Vanilla Numbers(挖矿也归我们管)、Show Block Text(当前格式) - 反击窗口改用独立样式,不再和 BUFF 面板共用同一个 GUIStyle
- 字体查找改为可重扫 + 字形缓存;
SeenEffects加上上限
1.6.6
- 修复战斗数字完全不显示:
PatchVanillaDamageText在 1.6.2 删补丁时连注册一起删了,导致Show Vanilla Numbers控制的是个不存在的开关,我们的数字也从未被创建 - 修复数值捕捉时机:原版在这版是在
Character.ApplyDamage内部就调DamageText.ShowText,而我们在 postfix 才记 pending,永远晚一步。改为在 ApplyDamage 前缀记录,ShowText前缀消费 Test All UI只在进入世界后生效,主菜单不再刷测试文字- 启动日志改为显示真实版本号(之前硬编码 0.3.3)
- 新增诊断日志:
damage text/blocked number/block text(受Log Attempts控制)
1.6.5
- 伤害类型标签改用游戏自己的词条(
$inventory_*),和武器面板逐字一致,并跟随游戏语言:劈砍 / 戳刺 / 锤击 / 切剁 / 镐 / 火焰 / 冰霜 / 闪电 / 蛊毒 / 精神 - 修正之前自编的词:Slash 是「劈砍」不是 Chop,Pierce 是「戳刺」,Poison 是「蛊毒」
- 括号改全角并加空格:
+12 (劈砍),与格挡行+ 格挡 (0.5)同一套写法 - 主伤害类型判定补上镐(Pickaxe)
1.6.4
- 挖矿/砍树/砸建筑也使用我们的文字与动画:
[图标] +12 (劈砍) - 标签取该击的主伤害类型,不拆分多类型伤害
- 只接管玩家自己的伤害,环境伤害保留原版
1.6.3
- 格挡提示并入受伤区:
+ 格挡 (0.5),数值取自游戏自己的格挡数字 - 完美格挡按暴击处理:更大字号 + Punch 动画
- 删除独立的格挡/招架位置开关
1.6.2
Show Vanilla Numbers移到[General]- 修正隐藏逻辑:只隐藏被我们替换的那条伤害数字,治疗/制作奖励/“太硬了”等文本恢复显示
- 挖矿、砍树的原版数字保留(我们的数字依赖 Character 命中信息)
1.6.1
- 修复伤害数字不显示(ApplyDamage 与 ShowText 的时序搞反,改为先记录后由 ShowText 用原版数值创建)
- 修复原版数字没被隐藏(1.6.0 的属性错位导致
隐藏原版数字补丁失败) - 格挡/招架文本改为
+格挡/+招架 Test All UI改为每 0.8 秒生成真实条目,改动画样式立即生效
1.6.0
- 伤害数字改为直接取原版
DamageText.ShowText的数值,与游戏显示逐位一致 - 移植 Parrot 全部 15 种滚动动画 + 方向/滚动距离/行距/层数/淡出/时长配置
- 新增格挡与招架提示(左侧,抄 Parrot avoid 事件):
格挡/招架! Test All UI移到[General],一次画出全部 UI- 删除常驻 BUFF 列与相关配置;BUFF 面板只显示格挡临时 BUFF + 肾上腺素
1.5.1
Flash Animation默认改为Punch并排在第一顺位- BUFF 面板拆成常驻 / 临时两列,位置分开可调;无持续时间的效果不再显示负数倒计时
- 肾上腺素必定显示在临时列,不受“只显示格挡带来的 buff”影响
- 新增
Hide Vanilla Buff Icons:面板开启时隐藏原版(含 My Little UI)状态图标 - 伤害数字改为向右上缓出滑动并淡出;暴击/连击终结使用 Punch 缩放
1.5.0
反馈 UI 与格挡 BUFF 提示(战斗逻辑未改动):
- 完美提示可调 位置 X/Y、字号(屏幕高度百分比)、颜色、停留时长,新增 5 种动画:Pop / Punch / Slam / Slide / Shake
- 新增 BUFF 面板:完美格挡后出现的状态效果逐个显示(图标 + 本地化名称 + 剩余时间 + 层数),并显示肾上腺素增量
- 新增反击窗口:进度条显示强制格挡剩余时间(连击保持段位的窗口),并显示当前连击段数
- 新增诊断开关 Log Perfect Block Buffs
- 新配置项全部带中英文说明
0.3.3
⚠️ 从 0.3.2 及更早版本升级的玩家:请手动把
Hold After Perfect (ms)改成500(配置里原来是多少就改成 500)。 升级不会重写你已生成的 cfg,旧值留在 0 的话格挡会失效/挡不住——这个值必须手动改。 全新安装的玩家不用管,默认已经是 500。
参数调整(默认值改成实测最顺手的一套):
Enable Auto Block默认开启Detect Range25 → 5 米Log Attempts默认开启Min Samples3 → 5Hold After Perfect (ms)0 → 500(升级用户请手动改,见上)Show Vanilla Numbers默认开启Lead Ms 70/Press Tail Ms 150/Base Font Size 27/Big Hit Scale 2.4/ 数字位置0.2,0.6与0.7,0.6保持上一版
0.3.2
- 文档:README 封面图改到 jsDelivr(固定 commit 地址),解决 GitHub / Thunderstore 页面上演示 GIF 裂图的问题(原图 19–38MB,超出图片代理与 CDN 的 20MB 上限,已重新编码到 2–4MB)
- 文档:标题标注实测成功率,中英双语补齐实测数据与「关闭切换格挡最佳」的说明
- 无功能改动
0.3.1
首次公开版本。
- 学习:hook 非玩家实体的
OnAttackTrigger,按(预制体, 动画状态)记录命中瞬间的动画进度,存BepInEx/config/PerfectBlock/learned.json;样本数与离散度达标后才开始自动格挡 - 自动格挡:命中点前
Lead Ms(70)按下,命中后按满Press Tail Ms(150);固定值,不做自适应(自适应会把提前量推到 0.25 秒窗口之外) - 两种格挡模式:自动识别游戏的「切换格挡」;长按模式实测 91% 完美率、0 漏挡,切换模式约 4% 漏挡
- 手动格挡取消挥刀(等价 AttackCancel):只对你手动按下的格挡生效,自动格挡不会打断挥击
- Reliable Perfect Block:只在完美格挡那一下忽略「大伤害破防」规则
- 完美提示:屏幕中央
PERFECT BLOCK !!!,连续触发向上叠加 - 战斗数字:
武器图标 + 数字 + (伤害类型),承伤红色在左、输出黄色在右;位置/字号/字体/武器图标可调,带常显测试开关 - 中英双语 yml,按游戏语言自动加载;配置项带完整说明
- 修复早前版本:
Release Delay语义写反导致每次格挡后主动卸防 250ms;战斗数字取血量差值的位置错误(Character.Damage只发 RPC,血量在Character.ApplyDamage里改)
