Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[feature] 额外添加JS脚本编写战斗策略(自动战斗)的功能 #1195

Open
xiaohuohumax opened this issue Feb 20, 2025 · 2 comments

Comments

@xiaohuohumax
Copy link

功能:使用JS脚本编写战斗策略(自动战斗)
好处:

  1. 战斗流程可以精细操控
  2. 战斗过程高效减少罚站(后续搭配角色技能冷却检查 自动识别队伍与战斗功能优化 #361
  3. 战斗策略可以实现位置适配(比如:盾位,奶位)

大概类似于:

manifest.json

{
  "manifest_version": 1,
  "name": "钟离自动打本队",
  "version": "1.0",
  "description": "钟离自动打本队",
  "roles": [
    ["钟离", "托马", /* ... */], // 盾
    ["芙宁娜","芭芭拉"], // 奶
    // ...
  ],
  "main": "main.js"
}

main.js

(async function () {
    let roles: string[] = 获取当前队伍全部角色名称()

    do {
        if (roles.includes('钟离')) {

            let flag: boolean = 切换角色("钟离")

            if (!flag) {
                // 角色切换失败
            }

            keyDown("e")
            await sleep(1500);
            keyUp("e");

            // 角色技能冷却状态
            let e_time: number, q_time: number, q_full: boolean = 获取当前角色技能状态信息()

            if (q_time === 0 && q_full) {
                // 钟离Q冷却完成 且 充能完成
                keyPress("q")

                // 高伤害技穿插结束判断
                if (是否结束战斗()) {
                    break;
                }
            }
        } else if (roles.includes("托马")) {
            // ...
        }

        // 其他角色战斗
        // ...

    } while (!是否结束战斗())
})()
@Scarlet1ssimo
Copy link
Contributor

理论上应该可以使用Jint作为js的动态解释器,然后把C#的函数注册到JS环境。这样甚至能加入开书吃球的逻辑。届时动态执行python也并非不可。
但允许用户精细化使用bgi,特别是战斗方面感觉是个很后期的事情。起码得建立在实现了 #361 技能冷却判断的feature之上,否则用起来依旧蹩脚,和bgi现在支持的功能别无二致。估计一时半会儿不考虑

@Scarlet1ssimo
Copy link
Contributor

在我们目前还没有合理的Q技能冷却完成判断逻辑的情况下,你剩余的功能可以通过编写一个战斗脚本生成器解决,根据你的盾奶角色模板化生成战斗脚本,一股脑全部拖进脚本库里就行,BGI会按照文件夹的脚本自动匹配你当前的配队。

但我个人感觉现阶段引入一个战斗脚本内判断战斗结束的指令是现实的。

// 高伤害技穿插结束判断
if (是否结束战斗()) {
    break;
}
// 可能是下面这种感觉
// 钟离 e(hold),q,checksafe, ...

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

No branches or pull requests

2 participants