Skip to content

HVAA优化及BUG修复#155

Open
WayneFerdon wants to merge 353 commits into
dodying:masterfrom
WayneFerdon:master
Open

HVAA优化及BUG修复#155
WayneFerdon wants to merge 353 commits into
dodying:masterfrom
WayneFerdon:master

Conversation

@WayneFerdon
Copy link
Copy Markdown
Contributor

@WayneFerdon WayneFerdon commented Aug 21, 2025

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

@Qiyue0515
Copy link
Copy Markdown

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

@WayneFerdon
Copy link
Copy Markdown
Contributor Author

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

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

@DreamSeeker08
Copy link
Copy Markdown

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

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

@Kotone-Hikaru
Copy link
Copy Markdown

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

@WayneFerdon
Copy link
Copy Markdown
Contributor Author

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

@Kotone-Hikaru
Copy link
Copy Markdown

@WayneFerdon 2.90.22.22 imp正确释放了 但是全部上好imp之后不会自动释放攻击,但是鼠标移动到对应的怪上后才会攻击 且有的时候只会用普通攻击 不会释放t123法术

@WayneFerdon
Copy link
Copy Markdown
Contributor Author

WayneFerdon commented Oct 23, 2025

@WayneFerdon 2.90.22.22 imp正确释放了 但是全部上好imp之后不会自动释放攻击,但是鼠标移动到对应的怪上后才会攻击 且有的时候只会用普通攻击 不会释放t123法术

@SakuyaSaki
我这里测试是正常的,普通和高级的都能够释放,不确定是什么原因
不过推测可能是战斗中途启用新脚本,导致ability数据未初始化,战斗中读取技能范围数据出错,这个节点刚好是点击完技能还没选目标(在算范围),如果有mb等脚本的话刚好移上去就选中了?
新的版本(2.90.22.23)增加了非空检测,可以再看下

@Kotone-Hikaru
Copy link
Copy Markdown

@WayneFerdon 确实是因为中途才开启脚本导致的 如果在一开始就开启然后再进入战斗的话就能正常释放t123
不过这个 自动闲置竞技场好像有点问题 还是说逻辑改变了

@Kotone-Hikaru
Copy link
Copy Markdown

AR好像是ok 的但是GF不行 不知道为什么

@WayneFerdon
Copy link
Copy Markdown
Contributor Author

AR好像是ok 的但是GF不行 不知道为什么

@SakuyaSaki 有bug,修复了(2.90.22.24)

@Kotone-Hikaru
Copy link
Copy Markdown

Kotone-Hikaru commented Oct 23, 2025

发现现在的全部上debuff好像逻辑和之前的相比 不一样 之前会优先释放258这3个位子然后再释放没有释放到的
现在是按照优先级来释放的 大部分时候是乱序 会导致有的时候会多1t 理论上来说假如敌人是8个的话 第一次释放 2 5 7 这样应该是最好的 (有机会补到6号位没有上到debuff的情况)其他的按照258释放 一遍然后补漏掉的 比较好

@WayneFerdon
Copy link
Copy Markdown
Contributor Author

@SakuyaSaki
给全体放debuff的两个各加了选项,可以选是按照位置还是权重释放
按位置还是用权重的逻辑,但是统一权重为-1而非按状态计算,保留结合用死亡、已有debuff等的特殊权重进行排除
本来想直接改了,但是We给高权重的先放有时也能降低自己受到的伤害,所以各自处理了(

@Kotone-Hikaru
Copy link
Copy Markdown

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

@WayneFerdon
Copy link
Copy Markdown
Contributor Author

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

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

@Kotone-Hikaru
Copy link
Copy Markdown

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

@Kotone-Hikaru
Copy link
Copy Markdown

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
Copy Markdown
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. 然后再进行补漏(失败或者未释放到的)

@Kotone-Hikaru
Copy link
Copy Markdown

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

@Kotone-Hikaru
Copy link
Copy Markdown

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

@WayneFerdon
Copy link
Copy Markdown
Contributor Author

WayneFerdon commented Oct 25, 2025

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

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

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

@Kotone-Hikaru
Copy link
Copy Markdown

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

@Kotone-Hikaru
Copy link
Copy Markdown

Kotone-Hikaru commented Oct 27, 2025

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

@WayneFerdon
Copy link
Copy Markdown
Contributor Author

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

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

@Kotone-Hikaru
Copy link
Copy Markdown

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

@Kotone-Hikaru
Copy link
Copy Markdown

Kotone-Hikaru 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

@JKU533
Copy link
Copy Markdown

JKU533 commented Apr 23, 2026

  1. 增加了对jpx的兼容(上面那个问题应该解决了)

我这还是不行...估摸不是jpx的兼容问题,关了jpx也会重复释放
确认全部怪上了slow还是会被隔几回合重复上了两次
19T就去到剩余202回合(开着jpx看不到这个剩余回合)
我这配置的话 虚弱也是重复的(重复确认是存在buff还会上.不是范围重叠) 超过6个显示位在最后显示 剩余147回合
——————
关了实验性选项 只用忽略配合jpx发现也存在这问题 回到2.90.180版本单纯添加buff === "'-'" 测试了下 也是会重复释放 迷
——————
关了实验性选项的情况下配合jpx 阈值全部填0正常了

开了实验性选项会导致重复 所以是阈值方面的影响?

@WayneFerdon
Copy link
Copy Markdown
Contributor Author

WayneFerdon commented Apr 23, 2026

  1. 增加了对jpx的兼容(上面那个问题应该解决了)

我这还是不行...估摸不是jpx的兼容问题,关了jpx也会重复释放 确认全部怪上了slow还是会被隔几回合重复上了两次 19T就去到剩余202回合(开着jpx看不到这个剩余回合) 我这配置的话 虚弱也是重复的(重复确认是存在buff还会上.不是范围重叠) 超过6个显示位在最后显示 剩余147回合 —————— 关了实验性选项 只用忽略配合jpx发现也存在这问题 回到2.90.180版本单纯添加buff === "'-'" 测试了下 也是会重复释放 迷 —————— 关了实验性选项的情况下配合jpx 阈值全部填0正常了

开了实验性选项会导致重复 所以是阈值方面的影响?

@JKU533
189 修复了一个turnDelta的问题,可能会导致重复放,但是表现又应该有点不一样才对(显示的数量?):

  • 正常是 100 / (加速百分比 + 100),但是写成了 100 / (加速百分比 ?? 100)
  • 在没有加速的时候会正常(因为都是每次操作-1turn)
  • 但是有加速的情况下,每次操作减的会更多了
  • 例如原来是100 / (25 + 100) = 0.8,但是变成了100 / 25 = 4(技能的加速buff的情况)
  • 这就会使得补全的buff的推算剩余turn减得异常快
  • 在阈值是0的时候,因为即使记录的剩余turn是0,也不会从记录中移除(因为移除只看log),所以不会直接再放(因为是 阈值 >= 0 且 当前 > 阈值 的时候 判断为不用再放)
  • 但是阈值不是0的时候,记录的剩余turn低于了实际的turn,所以会再放一次
  • 显示数量不对的情况,是否有可能是:
    • 正常是持续 15 * 4 = 60(满熟练、被动的情况),刚放完可能是59(因为系统计时机制,显示上可能会少1turn)
    • 如果阈值是20,有技能的加速buff(有bug的情况下,记录的turn变成每次操作减4)
    • 那么就会记录上变成 59 - 4 * 10 = 19 (实际应该是 59 - 10/1.25 = 51
    • 然后此时因为错误的记录再放一次,就变成 错误记录 19 + 60=79 实际 51 + 60 = 111
    • 再就会是:79 - 4 * 15 = 1951 + 60 - 15/1.25 = 99
    • 错误记录开始在79和19之间摆动(14turn左右放一次,因为放buff本身也会占用),每次放会比上一次增加 60 - 15/1.25 = 48
    • 实际剩余大概就是 99 -> 147 -> 195 -> 243 (受到被开始当做隐藏buff的起始位置等在上下偏移一点,如果刚好放的时候被移到前6个的位置(正常显示),那么持续时间就会按照实际的来显示)
    • 不过如果是 之前配置的阈值不是20 之类的情况,上面的可能还是无法解释显示的差异
    • 而且这样的话180版本只开忽略不开实验性的问题可能是其他因素导致的

@JKU533
Copy link
Copy Markdown

JKU533 commented Apr 23, 2026

@JKU533 189 修复了一个turnDelta的问题,可能会导致重复放,但是表现又应该有点不一样才对(显示的数量?):

  • 正常是 100 / (加速百分比 + 100),但是写成了 100 / (加速百分比 ?? 100)

估摸还有其他因素还存在
现在把slow阈值设置成10 slow就会CD好了就补 很容易观察到 是否开启实验性功能都一样
不太好观察剩余回合数的变化...jpx也就显示个- 在关了jpx的状态下观察过数值 看上去是正常每回合-1的?

@WayneFerdon
Copy link
Copy Markdown
Contributor Author

估摸还有其他因素还存在 现在把slow阈值设置成10 slow就会CD好了就补 很容易观察到 是否开启实验性功能都一样 不太好观察剩余回合数的变化...jpx也就显示个- 在关了jpx的状态下观察过数值 看上去是正常每回合-1的?

@JKU533
我这里调成10也没有看到这个情况,可以发下配置看看(

@JKU533
Copy link
Copy Markdown

JKU533 commented Apr 23, 2026

@JKU533 我这里调成10也没有看到这个情况,可以发下配置看看(

折叠配置 {"version":"2.90.189","lang":"0","channelSkillSwitch":true,"buffSkillSwitch":true,"debuffSkillSwitch":true,"dropMonitor":true,"isekaiTime":"","pauseButton":true,"pauseHotkeyCode":"","stepInButton":true,"stepInHotkeyCode":"","altHotkeyCode":"","alert":true,"notification":true,"delay":0,"delay2":0,"attackStatus":2,"battleOrderName":"Pause","battleOrder":{"autoPause":true},"turnOnSS":true,"turnOnSSCondition":{"0":["oc,1,249"]},"turnOffSSCondition":{"0":["oc,2,120"],"1":["_isCd_1111,5,0","oc,2,180"]},"autoPause":true,"pauseCondition":{"0":["roundType,5,\"ba\""],"1":["sp,4,60","_buffTurn_sparklife,5,0"]},"nativeNewRound":true,"ExitBattleWaitTime":10,"battleUnresponsiveTime":{"Alert":20,"Reload":20,"Alt":""},"encounterDisplay":true,"idleArenaTime":"","idleArenaLevels":"1,10,20,30,40,50,60,70,80,90,100,110,120,130,140,150,165,180,200,225,250,300","idleArenaValue":"1,3,5,8,9,11,12,13,15,16,17,19,20,21,23,24,26,27,28,29,32,33","arLevel":{"1":true,"10":true,"20":true,"30":true,"40":true,"50":true,"60":true,"70":true,"80":true,"90":true,"100":true,"110":true,"120":true,"130":true,"140":true,"150":true,"165":true,"180":true,"200":true,"225":true,"250":true,"300":true},"staminaEncounter":10,"staminaLow":30,"repairValue":"","repairValueGF":"","itemOrderName":"HG,Cure,HP,FC,HE,MG,MP,ME,SG,SP,SE,Mystic","itemOrderValue":"10005,311,11195,313,11199,10006,11295,11299,10007,11395,11399,10008","itemOrder":{"FC":true,"HE":true,"HG":true,"HP":true,"Cure":true,"MG":true,"MP":true,"ME":true,"SG":true,"SP":true,"SE":true,"Mystic":true},"item":{"FC":true,"HG":true,"HP":true,"Cure":true,"MG":true,"MP":true,"ME":true,"SG":true,"SP":true,"Mystic":true},"itemFCCondition":{"0":["hp,4,45"]},"itemHPCondition":{"0":["hp,4,50"]},"itemCureCondition":{"0":["hp,4,65"]},"itemMPCondition":{"0":["mp,4,48"]},"itemMECondition":{"0":["mp,4,20"]},"itemSPCondition":{"0":["sp,4,68"]},"itemSECondition":{"0":["sp,2,45"]},"channelThreshold":{"AF":300,"Re":200},"channelSkill":{"Re":true,"AF":true},"channelSkill2OrderName":"AF,Re","channelSkill2OrderValue":"432,312","channelSkill2Order":{"Re":true,"AF":true},"channelRebuff":true,"buffSkillOrderValue":"Re,AF","buffSkillOrder":{"Re":true,"AF":true},"buffSkill":{"HD":true,"MD":true,"SD":true,"AF":true,"Re":true},"buffSkillHDCondition":{"0":["hp,2,70"]},"buffSkillMDCondition":{"0":["mp,2,75"]},"buffSkillSDCondition":{"0":["sp,2,85"]},"buffSkillSLCondition":{"0":["hp,2,35"]},"buffSkillSSCondition":{"0":["hp,2,60"]},"buffSkillAFCondition":{"0":["mp,1,40"]},"buffSkillHeCondition":{"0":["mp,1,40"]},"debuffAutoFill":true,"debuffSkillTurnAlert":2,"debuffSkillOrderAllValue":"Sle,We,Si,Bl,Slo,MN,Im","debuffSkillOrderAll":{"Sle":true,"Bl":true,"We":true,"Si":true,"Slo":true,"Im":true,"MN":true},"debuffSkillSleAll":true,"debuffSkillSleAllCondition":{"0":["_targetBuffTurn_weaken,5,0","_targetBuffTurn_silence,5,0","turn,4,15"],"1":["turn,1,15","_targetRank != 0"]},"debuffSkillBlAll":true,"debuffSkillBlAllCondition":{"0":["_targetBuffTurn_sleep,5,0","turn,2,5"],"1":["turn,1,5"]},"debuffSkillWeAll":true,"debuffSkillWeAllCondition":{"0":["_targetBuffTurn_sleep,5,0","_targetBuffTurn_silence,5,0","turn,4,5"],"1":["turn,1,5"]},"debuffSkillSiAll":true,"debuffSkillSiAllCondition":{"0":["_targetBuffTurn_sleep,5,0","_targetBuffTurn_weaken,5,0","turn,4,5"],"1":["turn,1,5"]},"debuffSkillSloAll":true,"debuffSkillSloAllCondition":{"0":["_targetBuffTurn_sleep,5,0","turn,4,20"],"1":["turn,1,5"]},"debuffSkillImAll":true,"debuffSkillImAllByIndex":true,"debuffSkillImAllCondition":{"0":["turn,1,1"]},"debuffSkillMNAll":true,"debuffSkillMNAllCondition":{"0":["turn,1,1"]},"debuffSkillThreshold":{"Slo":10},"debuffSkillDrCondition":{"0":["monsterAlive,5,1","bossAlive,5,1"]},"skillOrderValue":"T1,T2","skillOrder":{"T2":true,"T1":true},"skillOFCCondition":{"0":["bossAll,3,1","monsterAlive,3,3"],"1":["monsterAlive,3,5"]},"skillT3Condition":{"0":["_targetBuffTurn_bleed,6,0","targetHpDecimal,2.0.25"]},"skill":{"T2":true,"T1":true},"skillT2Condition":{"0":["_targetBuffTurn_stun,6,0","_targetBuffTurn_imp,6,0"]},"skillT1Condition":{"0":["_targetBuffTurn_stun == 0","_targetBuffTurn_imp,6,0","_isCd_2202"]},"scrollRoundType":{"iw":true,"tw":true},"scrollFirst":true,"scroll":{"Sw":true,"Pr":true,"Ab":true,"Sh":true,"Li":true},"scrollAvCondition":{"0":["turn,2,20"]},"audio":{"Common":"undefined","Error":"undefined","Defeat":"undefined","Victory":"undefined"},"audioEnable":{"Riddle":true},"weight":{"We":-4,"Bl":3,"Slo":3,"Si":-4,"Sle":5,"Im":-5,"PA":-4,"BW":-4,"Co":-1,"Dr":-4,"MN":-4,"Stun":-4,"CM":-5},"displayWeight":true,"weightBackground":{"0":["undefined"],"1":["undefined"],"2":["undefined"],"3":["undefined"],"4":["undefined"],"5":["undefined"],"6":["undefined"],"7":["undefined"],"8":["undefined"],"9":["undefined"]},"dropQuality":"0","record":{"turn":true,"items":true},"roundNow":1,"roundAll":1,"battleUnresponsive":{}}

@WayneFerdon
Copy link
Copy Markdown
Contributor Author

@JKU533 一换配置就发现问题了(
原来是冰属性的debuff 叫 coldslow,而缓慢是slow,刚好找slow的时候找到冰属性的那个头上了
难怪我一直没触发,因为没用冰魔法(

@srnoejbnyvi
Copy link
Copy Markdown

用的2.90.162版本
暫時還沒更新不知道新版有沒有這問題,先提一嘴
在特定的場數的競技場會顯示為遭遇戰,很神奇,目前我只能50會見到這個bug
image

@JKU533
Copy link
Copy Markdown

JKU533 commented May 20, 2026

现在的次要攻击,蹭熟练度还是太难设定了.设置turn <= 5不能确实丢出来,或者影响首轮攻击导致生存受到影响.
设置monsterAlive == 1的话又会过多释放或者仗法输出太高直接全打死了
要不加个每轮计数条件或者简单加个限制每轮次要攻击触发次数的文本框?

@WayneFerdon
Copy link
Copy Markdown
Contributor Author

现在的次要攻击,蹭熟练度还是太难设定了.设置turn <= 5不能确实丢出来,或者影响首轮攻击导致生存受到影响. 设置monsterAlive == 1的话又会过多释放或者仗法输出太高直接全打死了 要不加个每轮计数条件或者简单加个限制每轮次要攻击触发次数的文本框?

@JKU533 看下之前另外一个功能是否有用?
#155 (comment)

每次都是按照 T3->T2->T1->物理 的顺序的,只要T3的条件和后面的不同时为真的时候就能够放后面的,例如:

  • T3: 0; T2: 0; (相当于直接跳过T2T3)T1: 具体条件

2.90.122 修正了公式读取'.'的兼容问题,且添加了攻击魔法的数据记录,临时数据技能本回合自动释放次数skillsOTOS改成了本地化 2.90.133 增加了对含'_'的键值的兼容

例如公式中可以配置:

  • skillOTOS.111表示本round火属性T1自动释放过的次数
  • (skillOTOS.111+skillOTOS.112+skillOTOS.113) <= 0表示本round没有自动用过火系技能

后面的skill的值:

  • 马炮(OFC),
  • 龙吼(FRD),
  • 武器技能(T3, T2, T1)
  • 元素攻击的法术(对应的id,[1][属性id][阶])

这个是实际是直接用的原来其他技能每回合一次的记录,之前的每回合一次记录其实没有本地化,刷新就清空了,新版本也一起修正改成本地化记录了( 但是因为这个只计算了自动释放的次数,手动释放之类的情况不会计算到,用到的场景也不多,因此没有加到下拉列表中,需要手动输入

其实在好几个版本之前(大概是改battle数据结构后几个版本),公式的参数读取就已经能支持任意的脚本本地数据和实时全局数据 .则对应逐层展开对应的键值(不过最近几个版本改成可自定义的RPN公式后忘记兼容.了,不过手册没写也没人用所以没发现会报错( 例如skillOTOS.111实际就是skillOTOS下的skillOTOS['111'],具体的尝试读取顺序是:

  1. 实时全局数据中的battle数据g('battle')[key]
  2. 本地数据中的battle数据` getValue('battle', true)[key]
  3. 全局实时数据g(key)
  4. 本地数据getValue(key)
  5. 全局配置数据g('option')?.[key]
  6. 例如:实际可以通过'version和'option.version读取到脚本的version(前两断,例如2.90.111的是2.90)
image 甚至是战斗统计和掉落统计( 例如`stats.self._monster`能得到值`4` image 但是因为种类太多了且大部分都用不到,没一一加下拉列表,看得懂的话可以在代码或者脚本的存储数据里找找(

@JKU533
Copy link
Copy Markdown

JKU533 commented May 20, 2026

看下之前另外一个功能是否有用? #155 (comment)

看了下 还是不太懂这个条件
按理说
在次要攻击 攻击模式:火 内填条件(skillOTOS.111+skillOTOS.112+skillOTOS.113) == 0 会只触发一次火法T1或T2或T3
然而实际是一直放火法

@WayneFerdon
Copy link
Copy Markdown
Contributor Author

看下之前另外一个功能是否有用? #155 (comment)

看了下 还是不太懂这个条件 按理说 在次要攻击 攻击模式:火 内填条件(skillOTOS.111+skillOTOS.112+skillOTOS.113) == 0 会只触发一次火法T1或T2或T3 然而实际是一直放火法

@JKU533 我这边触发是正常的,不太确定是什么原因
能看console的log的话,可以公式前面加个@或者变量前面加个#,2.90.194+ 有输出公式debug信息的功能,可以方便具体看下是数据/公式问题还是其他问题
@(skillOTOS.111+skillOTOS.112+skillOTOS.113) == 0(输出类似下面那条log)或(#skillOTOS.111+skillOTOS.112+skillOTOS.113) == 0(上面那条log)
image

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.