Skip to content

Conversation

@WayneFerdon
Copy link
Contributor

@WayneFerdon WayneFerdon commented Aug 21, 2025

  1. 增加初始闲置竞技场配置非空检测
  2. 修正其他技能的OC判断及选择范围判断,修正条件判断中iscd的值与Readme中示例不相符的问题 (修复技能可释放判断及其他技能技能排序无效问题 #154 未进行冲突处理直接覆盖了,因此按照其中实际有效的内容重新修改了)

@Qiyue0515
Copy link

最近转法发现一个问题:
// 先处理特殊的 “先给全体上buff”
let skillPack = ['We', 'Im'];
这里改成先上weaken再上Imperil会比较好,这样血线的压力会小一点

@WayneFerdon
Copy link
Contributor Author

最近转法发现一个问题: // 先处理特殊的 “先给全体上buff” let skillPack = ['We', 'Im']; 这里改成先上weaken再上Imperil会比较好,这样血线的压力会小一点

@Qiyue0515 现在这个应该就是先we再im的啊

@DreamSeeker08
Copy link

最近转法发现一个问题: // 先处理特殊的 “先给全体上buff” let skillPack = ['We', 'Im']; 这里改成先上weaken再上Imperil会比较好,这样血线的压力会小一点

你好,能分享一个法系的设置给我导入吗?
我不太会弄,更新到最新的v2.90.22.20还是不会释放陷危、虚弱等debuf

@SakuyaSaki
Copy link

法师好像不能正确的释放im 只会释放weaken 在给每个怪都上完weaken之后就卡在这里了

@WayneFerdon
Copy link
Contributor Author

@DreamSeeker08 @SakuyaSaki 之前的debuff逻辑有条件判断时可能会有点问题,分支新上传了一版(2.90.22.22),可以测试看下还有没有问题

@WayneFerdon
Copy link
Contributor Author

@WayneFerdon 感谢 现在自动gf 已经正常工作了 但是debuff顺序释放好像还是没生效 现在还是按照权重来释放的

@SakuyaSaki 应该修复了(2.90.22.26)
漏了选初始目标也要按顺序了(

@SakuyaSaki
Copy link

@WayneFerdon 观察了一下 现在的释放 第一次 释放目标1 会给 123上(可能是机制?给第一位上会顺延到后面) 第二次就会释放4 但是这个时候只会给45上debuff 这样3的位置会被重复上debuff 浪费了一个轮次 感觉还是应该改为给2 5 8位置轮流释放

@SakuyaSaki
Copy link

function getRangeCenterID(target, range = undefined, isWeaponAttack = false, excludeCondition = undefined, forceUseIndex = undefined) {
    // 静态计数器
    if (typeof getRangeCenterID.callCount === 'undefined') getRangeCenterID.callCount = 0;
    getRangeCenterID.callCount++;

    // --- 固定顺序目标 ---
    const fixedIndices = [1, 4, 7]; // 数组索引
    let msTemp = JSON.parse(JSON.stringify(g('battle').monsterStatus));
    msTemp.sort(objArrSort('order'));

    if (getRangeCenterID.callCount <= fixedIndices.length) {
        // 尝试获取固定目标,如果越界或死亡就跳过
        for (let i = getRangeCenterID.callCount - 1; i < fixedIndices.length; i++) {
            const idx = fixedIndices[i];
            if (idx >= 0 && idx < msTemp.length && !msTemp[idx].isDead) {
                return getMonsterID(msTemp[idx].order);
            }
        }
        // 如果固定顺序没有可用目标,回归正常逻辑
    }

    // ---------------- 原本逻辑 ----------------
    if (!range) return getMonsterID(target);

    const centralExtraWeight = -1 * Math.log10(1 + (isWeaponAttack ? ((g('option').centralExtraRatio / 100) ?? 0) : 0));
    let order = target.order;
    let newOrder = order;

    let unreachableWeight = g('option').unreachableWeight;
    let minRank = Infinity;

    for (let i = order - range; i <= order + range; i++) {
        if (i < 0 || i >= msTemp.length || msTemp[i].isDead) continue;

        let rank = 0;
        for (let j = i - range; j <= i + range; j++) {
            let cew = (j === i) ? centralExtraWeight : 0;
            let mon = msTemp[j];

            if (j < 0 || j >= msTemp.length || mon.isDead || (excludeCondition && excludeCondition(mon))) {
                rank += unreachableWeight - cew;
                continue;
            }

            rank += cew;
            rank += forceUseIndex ? -1 : mon.finWeight;
        }

        if (rank < minRank) {
            minRank = rank;
            newOrder = i;
        }
    }

    return getMonsterID(newOrder);
}

让GPT写了一下 我试了一下这样是ok的 可以正确的释放到正确的258的位置()

@WayneFerdon
Copy link
Contributor Author

WayneFerdon commented Oct 25, 2025

@WayneFerdon 观察了一下 现在的释放 第一次 释放目标1 会给 123上(可能是机制?给第一位上会顺延到后面) 第二次就会释放4 但是这个时候只会给45上debuff 这样3的位置会被重复上debuff 浪费了一个轮次 感觉还是应该改为给2 5 8位置轮流释放

@SakuyaSaki
gpt这个即使不是全体或按顺序也会强行按顺序,而且目标死亡往后跳一个实际也会将死亡的包含在范围内了,也是不对的

原来的是按照顺序从上往下选需要释放的
但是释放本身可能会失败(被抵抗了)
你的这个可能是放了123,然后选5放456,但是6被抵抗了
例如:

  1. 在2放完123
  2. 在5放456,5失败
  3. 此时因为5需要释放,而包含5的最优的范围为567,就会在6释放567

不过这个也有问题,新的版本已经改为:

  1. 释放全体时会遍历全部需要放的目标
  2. 然后选出包含任意目标中权重最优的(按顺序的话仍是单个权重为-1)
  3. 这样就能优先往后去释放一片目标(无论是按顺序还是实际权重,确保收益最大化)
  4. 然后再进行补漏(失败或者未释放到的)

@SakuyaSaki
Copy link

新版这个 选择权重好像还是有点问题 在8个怪的时候 有时候会先在2或者6释放,这样123 567都会上上debuff 然后就会空下来4和8 这样会多放一次imp 这里的逻辑感觉如果是要按照释放的debuff到底有没有赋予 然后再对应的改变逻辑好像有点复杂()

@SakuyaSaki
Copy link

想到一个逻辑大概是就是重下往上检测第一个带debuff的 然后+2就是下一个需要释放的目标
比如给123上好imp了 然后下一个就应该上在5
假如1和3抵抗了 就给2的+2上 那就是345 然后漏掉的之后再补?
不知道能不能实现()

@WayneFerdon
Copy link
Contributor Author

WayneFerdon commented Oct 25, 2025

@SakuyaSaki 遍历的时候忘记按照顺序遍历了,导致还是按照权重遍历,后面权重高,先遍历到被记录了,然后遍历到前面的低权重的时候,算出来有效范围都一样,不大于先记录的,所以没覆盖掉
2.90.22.29已改为要按顺序的话就会按顺序遍历,这下应该行了(

想到一个逻辑大概是就是重下往上检测第一个带debuff的 然后+2就是下一个需要释放的目标 比如给123上好imp了 然后下一个就应该上在5 假如1和3抵抗了 就给2的+2上 那就是345 然后漏掉的之后再补? 不知道能不能实现()

从下往上找这个如果之前手动选了最后一个,就会变成直接补漏,所以还是得上面这个修复(

@SakuyaSaki
Copy link

@WayneFerdon 试了一下好像好像正常工作了 感谢更新

@SakuyaSaki
Copy link

SakuyaSaki commented Oct 27, 2025

发现卷轴使用有点异常 守护卷轴好像 有点问题 同样的条件 一次 gf 其他卷轴都是15左右 守护卷轴用了150
image
且这个好像没有效果 在ar也会不停释放守护卷轴

@WayneFerdon
Copy link
Contributor Author

发现卷轴使用有点异常 守护卷轴好像 有点问题 同样的条件 一次 gf 其他卷轴都是15左右 守护卷轴用了150 image 且这个好像没有效果 在ar也会不停释放守护卷轴

@SakuyaSaki 我这里是正常的啊(
没有一直放,而且筛选也是有用的
不过原来的释放逻辑也有点问题,也稍微改了下(2.90.22.30)

@SakuyaSaki
Copy link

@WayneFerdon 这个有没有什么办法能导出log之类的吗

@SakuyaSaki
Copy link

SakuyaSaki commented Oct 27, 2025

You evade the attack from Macallan. -- Aiga Mizuki crits you for 3810 wind damage. You evade the attack from Google Dancing Israelis. You evade the attack from Hemidactylus. You evade the attack from Storyteller. Youshi153 gains the effect Imperiled. Hemidactylus gains the effect Coalesced Mana. Hemidactylus gains the effect Imperiled. Practiced Ass Spanker gains the effect Imperiled. You cast Imperil.   Cooldown expired for Storms of Njord You are healed for 11583 Health Points. You cast Cure.   You gain the effect Protection. You use Scroll of Protection.   Cooldown expired for Cure You evade the attack from Youshi153. You evade the attack from Practiced Ass Spanker. Hemidactylus gains the effect Coalesced Mana. Hemidactylus gains the effect Imperiled. Practiced Ass Spanker gains the effect Imperiled. Macallan gains the effect Imperiled. You cast Imperil.   You evade the attack from Macallan. Aiga Mizuki crits you for 3487 wind damage. You evade the attack from Storyteller. Hemidactylus crits you for 5077 slashing damage. Your spirit shield absorbs 1553 points of damage from the attack into 24 points of spirit damage. Aiga Mizuki gains the effect Imperiled. Storyteller gains the effect Coalesced Mana. Storyteller gains the effect Imperiled. Google Dancing Israelis gains the effect Imperiled. You cast Imperil.   Google Dancing Israelis hits you for 2676 wind damage. You evade the attack from Youshi153. You are healed for 11583 Health Points. You cast Cure.   Spawned Monster G: MID=282436 (Youshi153) LV=500 HP=174260 Spawned Monster F: MID=110494 (Hemidactylus) LV=500 HP=203444 Spawned Monster E: MID=153284 (Practiced Ass Spanker) LV=500 HP=183060 Spawned Monster D: MID=124000 (Macallan) LV=500 HP=183060 Spawned Monster C: MID=112618 (Aiga Mizuki) LV=500 HP=179060 Spawned Monster B: MID=194240 (Storyteller) LV=500 HP=171860 image 这是一次异常的释放保护卷轴的战斗记录

我试了几次 每次在异常释放卷轴的时候 都会放一个cure

@SakuyaSaki
Copy link

SakuyaSaki commented Oct 27, 2025

很奇怪 我怀疑是 该触发某个技能的时候 触发错误了 使用了卷轴

发现好像是cure导致的我在关闭了cure这个技能的释放之后就没有乱用过卷轴了 (在开启cure之后立刻就使用了一个卷轴)

@WayneFerdon
Copy link
Contributor Author

@SakuyaSaki 会不会是游戏设置那里设置了自动续buff,然后每个回合开始系统用了守护技能,把卷轴的覆盖了,然后hvaa里设置了卷轴优先,又自动释放了一次覆盖了系统自动上的那个

@WayneFerdon
Copy link
Contributor Author

至于战斗模式的筛选为什么没用可能是另外的问题

@SakuyaSaki
Copy link

@SakuyaSaki会不会是游戏设置了自动续buff,然后每个循环开始系统用了守护技能,把卷轴的覆盖了,然后hvaa里设置了卷轴优先,又自动释放了一次覆盖了系统自动上的那个

不 我这边测试下来好像就是和cure有关系 在我关掉cure这个技能之后 再也没有乱用保护卷轴的现象

@WayneFerdon
Copy link
Contributor Author

@SakuyaSaki会不会是游戏设置了自动续buff,然后每个循环开始系统用了守护技能,把卷轴的覆盖了,然后hvaa里设置了卷轴优先,又自动释放了一次覆盖了系统自动上的那个

不是我恐慌测试下来想要的是和治愈有关系在我关掉治愈这个技能之后再也没有乱用保护卷轴的现象

@SakuyaSaki
2.90.22.31应该修好了
原来是自动治疗的时候,搜页面元素找cure(id 311)会找到守护卷轴(id 13111),因为中间也有个311
搜的时候前后加了个括号限定了下应该行了

@SakuyaSaki
Copy link

@SakuyaSaki会不会是游戏设置了自动续buff,然后每个循环开始系统用了守护技能,把卷轴的覆盖了,然后hvaa里设置了卷轴优先,又自动释放了一次覆盖了系统自动上的那个

不是我恐慌测试下来想要的是和治愈有关系在我关掉治愈这个技能之后再也没有乱用保护卷轴的现象

@SakuyaSaki 2.90.22.31应该修好了 原来是自动治疗的时候,搜页面元素找cure(id 311)会找到守护卷轴(id 13111),因为中间也有个311 搜的时候前后加了个括号限定了下应该行了

感谢 现在好像正常工作了

@SakuyaSaki
Copy link

SakuyaSaki commented Oct 28, 2025

发现同样的设置下 神卷轴 比 化身卷轴使用的次数多很多 大概猜测是 因为神卷轴能给生命火花buff 生命火花被打掉了 (也可能是吸收buff)就会再上一个神卷轴 能不能设置一个只检测影纱的buff断掉的时候 才使用神卷轴

看了一下确实是因为火花被打掉了之后就会开一个新的

@SakuyaSaki
Copy link

SakuyaSaki commented Oct 28, 2025

我在自己的本地这边把

  Go: {
        name: 'Scroll of the Gods',
        id: 13299,
        mult: '3',
        img1: 'absorb',
        img2: 'shadowveil',
        img3: 'sparklife',
      },

改成了

  Go: {
        name: 'Scroll of the Gods',
        id: 13299,
        mult: '1',
        img1: 'shadowveil',
      },

好像是生效了 但是我不会写这种带选项的()

不过实际上来说 应该大部分人都只需要检测影纱吧

@WayneFerdon
Copy link
Contributor Author

我在自己的本地这边把

  Go: {
        name: 'Scroll of the Gods',
        id: 13299,
        mult: '3',
        img1: 'absorb',
        img2: 'shadowveil',
        img3: 'sparklife',
      },

改成了

  Go: {
        name: 'Scroll of the Gods',
        id: 13299,
        mult: '1',
        img1: 'shadowveil',
      },

好像是生效了 但是我不会写这种带选项的()

不过实际上来说 应该大部分人都只需要检测影纱吧

这个应该可以通过设置释放条件达成这个效果,不用专门改代码
_buffTurn_shadowveil,5,0表示不存在影纱buff才会释放

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants