HVAA优化及BUG修复#155
Conversation
|
最近转法发现一个问题: |
@Qiyue0515 现在这个应该就是先we再im的啊 |
你好,能分享一个法系的设置给我导入吗? |
|
法师好像不能正确的释放im 只会释放weaken 在给每个怪都上完weaken之后就卡在这里了 |
|
@DreamSeeker08 @SakuyaSaki 之前的debuff逻辑有条件判断时可能会有点问题,分支新上传了一版(2.90.22.22),可以测试看下还有没有问题 |
|
@WayneFerdon 2.90.22.22 imp正确释放了 但是全部上好imp之后不会自动释放攻击,但是鼠标移动到对应的怪上后才会攻击 且有的时候只会用普通攻击 不会释放t123法术 |
@SakuyaSaki |
|
@WayneFerdon 确实是因为中途才开启脚本导致的 如果在一开始就开启然后再进入战斗的话就能正常释放t123 |
|
AR好像是ok 的但是GF不行 不知道为什么 |
@SakuyaSaki 有bug,修复了(2.90.22.24) |
|
发现现在的全部上debuff好像逻辑和之前的相比 不一样 之前会优先释放258这3个位子然后再释放没有释放到的 |
|
@SakuyaSaki |
|
@WayneFerdon 感谢 现在自动gf 已经正常工作了 但是debuff顺序释放好像还是没生效 现在还是按照权重来释放的 |
@SakuyaSaki 应该修复了(2.90.22.26) |
|
@WayneFerdon 观察了一下 现在的释放 第一次 释放目标1 会给 123上(可能是机制?给第一位上会顺延到后面) 第二次就会释放4 但是这个时候只会给45上debuff 这样3的位置会被重复上debuff 浪费了一个轮次 感觉还是应该改为给2 5 8位置轮流释放 |
让GPT写了一下 我试了一下这样是ok的 可以正确的释放到正确的258的位置() |
@SakuyaSaki 原来的是按照顺序从上往下选需要释放的
不过这个也有问题,新的版本已经改为:
|
|
新版这个 选择权重好像还是有点问题 在8个怪的时候 有时候会先在2或者6释放,这样123 567都会上上debuff 然后就会空下来4和8 这样会多放一次imp 这里的逻辑感觉如果是要按照释放的debuff到底有没有赋予 然后再对应的改变逻辑好像有点复杂() |
|
想到一个逻辑大概是就是重下往上检测第一个带debuff的 然后+2就是下一个需要释放的目标 |
|
@SakuyaSaki 遍历的时候忘记按照顺序遍历了,导致还是按照权重遍历,后面权重高,先遍历到被记录了,然后遍历到前面的低权重的时候,算出来有效范围都一样,不大于先记录的,所以没覆盖掉
从下往上找这个如果之前手动选了最后一个,就会变成直接补漏,所以还是得上面这个修复( |
|
@WayneFerdon 试了一下好像好像正常工作了 感谢更新 |
|
@WayneFerdon 这个有没有什么办法能导出log之类的吗 |
|
给个权重建议[不知道实现难度如何……感觉太麻烦可以无视,甚至不清楚方案可不可行] 默认规则不能确定一定会打某个目标,特别是debuff多起来的情况下计算更复杂 如果可以自定义设置一个连续怪的范围(范围形式分组)并设置权重的话就能更轻松调节 或者有更简单粗暴的方案:1-10位置可自定义追加权重 |
2.90.200~2.90.204:
例如这个:
公式可配置为: PS:理论上可以用公式完全自定义权重计算( |
这边直接用这个公式会报错
脑袋不灵光,想着权重顺序忘了全体debuff的按顺序释放功能 所以正确的问题所在应该是没挂上debuff导致需要分成两段释放 只要分组能识别特定debuff让分组权重增加 应该就能解决了 可是权重计算看上去是线性的...大佬辛苦了! |
公式兼容有点问题( |
@@ -3652,8 +3652,42 @@
const getBuffTurn = (t, i) => getBuffTurnFromImg(getBuff(imgArray2img(i), getMonsterID(t)));
let param = ['min', 'max', 'count', 'sum'].includes(img[0]) ? img.shift() : undefined;
return switchMaxMin(param, t=>getBuffTurn(t, img));
},
+ targetGroupBuffTurn(...img) {
+ const buffName = img[0];
+ const currentTarget = targetGetter();
+ if (!currentTarget) return 0;
+
+ const getBuffTurn = (t, i) => getBuffTurnFromImg(getBuff(imgArray2img(i), getMonsterID(t)));
+
+ // 1. 提取后续所有用于数值计算的参数
+ const numArgs = img.slice(1).map(x => parseInt(x));
+
+ // 如果参数个数不是3和4,或者提取出的数值中有任何一个不是有效数字(NaN),直接失效返回 0
+ if (![3, 4].includes(img.length) || numArgs.some(isNaN)) return 0;
+
+ if (img.length === 4) {
+ // 模式A:精细分组判定 (4个参数.例子:_sleep_0_2_100)
+ const [startOrder, endOrder, weight] = numArgs;
+
+ // 检查当前评估的怪物是否在区间内
+ if (currentTarget.order < startOrder || currentTarget.order > endOrder) return 0;
+
+ // 检查该区间内是否有活怪带有此 Buff
+ const rangeTargets = g().battle.monsterStatus.filter(t => !t.isDead && t.order >= startOrder && t.order <= endOrder);
+ let hasBuff = rangeTargets.some(t => getBuffTurn(t, [buffName]) > 0);
+ return hasBuff ? weight : 0;
+
+ } else {
+ // 模式B:自动分组判定 (3个参数,例如 _sleep_3_100)
+ const [groupSize, weight] = numArgs;
+
+ // 使用switchMaxMin进行动态除法分组
+ let hasBuff = switchMaxMin('max', t => getBuffTurn(t, [buffName]), groupSize, currentTarget) > 0;
+ return hasBuff ? weight : 0;
+ }
+ },
targetOrder(param) {
return switchMaxMin(param, t=>t.order);
},
targetWeight(param) {
@@ -3737,18 +3771,26 @@
return switchMaxMin(param, t=>t.spNow);
},
};
- function switchMaxMin(param, defaultResult) {
+ function switchMaxMin(param, defaultResult, groupSize) {
+ let targets = g().battle.monsterStatus.filter(t => !t.isDead);
+ if (groupSize) { // 按目标位置(order)进行分组筛选
+ const currentTarget = targetGetter();
+ if (currentTarget) {
+ const groupIndex = Math.floor(currentTarget.order / groupSize);
+ targets = targets.filter(t => Math.floor(t.order / groupSize) === groupIndex);
+ }
+ }
switch (param) {
case 'count':
- return g().battle.monsterStatus.filter(t => !t.isDead).map(defaultResult).reduce((acc, cur) => acc + Math.sign(cur), 0);
+ return targets.map(defaultResult).reduce((acc, cur) => acc + Math.sign(cur), 0);
case 'sum':
- return g().battle.monsterStatus.filter(t => !t.isDead).map(defaultResult).reduce((acc, cur) => acc + cur, 0);
+ return targets.map(defaultResult).reduce((acc, cur) => acc + cur, 0);
case 'max':
- return Math.max(...g().battle.monsterStatus.filter(t => !t.isDead).map(defaultResult));
+ return targets.length > 0 ? Math.max(...targets.map(defaultResult)) : 0;
case 'min':
- return Math.min(...g().battle.monsterStatus.filter(t => !t.isDead).map(defaultResult));
+ return targets.length > 0 ? Math.min(...targets.map(defaultResult)) : 0;
default:
return defaultResult(targetGetter());
}
}尝试增加了个targetGroupBuffTurn。正在用这个额外权重公式测试(数字大是因为方便测试) 分成两种模式控制存在某种buff的权重 测试了一段时间看着权重应该没问题。当个参考 |



Uh oh!
There was an error while loading. Please reload this page.