Coder Social home page Coder Social logo

maaassistantarknights / maax Goto Github PK

View Code? Open in Web Editor NEW
361.0 8.0 74.0 82.55 MB

MAA GUI with Electron & Vue3

Home Page: https://www.maa.plus

License: GNU Affero General Public License v3.0

TypeScript 50.85% JavaScript 1.26% Less 0.44% Dockerfile 0.14% HTML 0.08% Vue 47.15% Batchfile 0.06%
electron maa vue

maax's Introduction

MaaX

更好,更强大的Maa

Build Status platform license commit

UI 特点

  • Windows,Maclinux都可以用(一个不落,我全都要
  • 使用了全新的设计语言(好看就完事辣
  • 适配系统的浅色/深色模式(熬夜党狂喜
  • 活动更新再也不用重启app了(好耶↖(^ω^)↗
  • 全新的掉落物显示(妈妈再也不用担心我看不懂日志了
  • 任务现在带有进度条时间显示(他卡了吗,戳戳 !?(・_・;?
  • 任务配置被丢到了任务卡片里面,而且可展开/收起(辣么多设置,我眼花了,我不看了
  • 一个设备对应一组任务配置,保存在app中(继续刷1-7

下载

  • 点击前往最新Release下载

  • 或者自行编译以获取最新版本/dev分支 (以下代码针对于linux用户, 请先使用包管理器确保安装好 cross-env, zip):

    git clone https://github.com/MaaAssistantArknights/MaaX.git
    cd MaaX/
    git submodule update --init --recursive  # 更新`submodule`
    npm install -g pnpm  # 安装`pnpm`
    pnpm install
    pnpm run make
    chown -R $(whoami) out/maa-x-linux-x64/

    MaaX/out/maa-x-linux-64/maa-x 即为可执行文件

开发相关

调试(以 VSCode 为例)

  • 依赖安装

    git submodule update --init --recursive  # 更新`submodule`
    npm install -g pnpm  # 安装`pnpm`
    pnpm install
  • 调试 main 进程:

    1. Ctrl/Command+Shift+P 呼出命令面板
    2. 输入 Debug,找到“Debug: Toggle Auto Attach”(切换自动附加)
    3. 选择“Only with flag”(仅带有标志)
    4. 重启终端,输入pnpm dev
  • 调试 renderer 进程:

    1. 按照上述步骤启动即可,会帮你打开 Chrome Devtools,且带有最新的 Vue Dev 插件

QQ 群

开发群:655031753
内测用户体验群:232785290

maax's People

Contributors

alisaakiron avatar annangela avatar bakashigure avatar chingcdesu avatar dragove avatar equt avatar hchenzi avatar hmydgz avatar horror-proton avatar huabanlu avatar jedsek avatar jonesau avatar lhhxxxxx avatar lstmxx avatar misteo avatar mochamapleaf avatar neko-para avatar qiutongxue avatar soundofautumn avatar weblate avatar whitecodes avatar zhangchi0104 avatar zhangweijian97 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

maax's Issues

模拟器连接问题

https://github.com/MaaAssistantArknights/MaaAsstElectronUI/blob/8aaa64b1c9692871b30b76c2807dd13be2f39ba7/packages/main/hooks/emulator.ts#L162

如果 adb_path 带有空格的话(如 E:/Program Files/Nox/...),Powershell 就比较傻,以为 E:/Program 和 Files/Nox/ 是两个东西,所以可能要改成

  const exp = `& '${e.adb_path}' devices`;

但是我不清楚 Linux 会不会有这个问题。。


另外获取不到 uuid(夜神模拟器),service call iphonesubinfo 1 输出的是下面这玩意(真的就是 8 个点..)

Result: Parcel(00000000 ffffffff   '........')

https://github.com/MaaAssistantArknights/MaaAsstElectronUI/blob/8aaa64b1c9692871b30b76c2807dd13be2f39ba7/packages/main/hooks/emulator.ts#L290-L295

多设备切换bug

三个模拟器分别备注A1,A2,A3
image
在这个界面点击A1,变成下边的样子,看起来正常。
image
再点A2,变成下边的样子,看起来好像有些不正常了,A1没了
image
再点当前设备里的A2,发现备注名是A1,adb的端口号也是A1的
image

image
image

环境配置失败

如题 折腾了挺长时间 结果就这样了……
PS E:\MaaAsstElectronUI> yarn
➤ YN0000: ┌ Resolution step
➤ YN0000: └ Completed in 0s 373ms
➤ YN0000: ┌ Fetch step
➤ YN0000: └ Completed in 5s 518ms
➤ YN0000: ┌ Link step
➤ YN0007: │ electron@npm:17.1.2 must be built because it never has been before or the last one failed
➤ YN0007: │ ref-napi@npm:3.0.3 must be built because it never has been before or the last one failed
➤ YN0007: │ @seorii/win32-displayconfig@npm:0.1.1 must be built because it never has been before or the last one failed
➤ YN0007: │ esbuild@npm:0.14.27 must be built because it never has been before or the last one failed
➤ YN0007: │ vue-demi@npm:0.12.4 [4f0a8] must be built because it never has been before or the last one failed
➤ YN0007: │ es5-ext@npm:0.10.59 must be built because it never has been before or the last one failed
➤ YN0009: │ es5-ext@npm:0.10.59 couldn't be built successfully (exit code 1, logs can be found here: C:\Users\yltx\AppData\Local\Temp\xfs-3aa34e92\build.log)
➤ YN0009: │ electron@npm:17.1.2 couldn't be built successfully (exit code 1, logs can be found here: C:\Users\yltx\AppData\Local\Temp\xfs-1d9e7e59\build.log)
➤ YN0009: │ esbuild@npm:0.14.27 couldn't be built successfully (exit code 1, logs can be found here: C:\Users\yltx\AppData\Local\Temp\xfs-f40c5451\build.log)
➤ YN0009: │ ref-napi@npm:3.0.3 couldn't be built successfully (exit code 1, logs can be found here: C:\Users\yltx\AppData\Local\Temp\xfs-1a17aedd\build.log)
➤ YN0009: │ vue-demi@npm:0.12.4 [4f0a8] couldn't be built successfully (exit code 1, logs can be found here: C:\Users\yltx\AppData\Local\Temp\xfs-864ba569\build.log)
➤ YN0009: │ @seorii/win32-displayconfig@npm:0.1.1 couldn't be built successfully (exit code 1, logs can be found here: C:\Users\yltx\AppData\Local\Temp\xfs-c677d184\build.log)
➤ YN0007: │ electron-acrylic-window@npm:0.5.11 must be built because it never has been before or the last one failed
➤ YN0007: │ ffi-napi@npm:4.0.3 must be built because it never has been before or the last one failed
➤ YN0009: │ electron-acrylic-window@npm:0.5.11 couldn't be built successfully (exit code 1, logs can be found here: C:\Users\yltx\AppData\Local\Temp\xfs-166c50b5\build.log)
➤ YN0009: │ ffi-napi@npm:4.0.3 couldn't be built successfully (exit code 1, logs can be found here: C:\Users\yltx\AppData\Local\Temp\xfs-c322350b\build.log)
➤ YN0000: └ Completed in 15s 467ms
➤ YN0000: Failed with errors in 21s 523ms

小提示Tips征集

我们计划在ui右下角显示小提示Tips,让加载和刷关的时候也变得有趣。

开始征集一些有趣的小提示Tips。不过有以下一些要求

  • 尽可能简短,在25字以内
  • 只能是文字形式,不能用表情包、图片等形式
  • 可以是动态的,随各种因素变化,比如时间变化(“今天周一,剿灭又刷新了哦”)

全新UI设想与任务规划系统

maa core应该是可以支持远比现在更强大的任务管理系统。

现在的任务管理,点击连接之后,固定死了,执行连接adb和勾选的任务。

我设想的任务管理。是,点击连接,就只是连接adb。然后maa core就处于始终运行的状态,任务监听系统也在持续监听,直到被添加任务

需要一个添加任务的UI,目前的这些任务,可以添加任意数量,比如,开始唤醒,然后还能继续开始唤醒。任务执行的时间有两种,立即执行和定时执行。为了达到这个目的,需要一个选择任务区域,和一个确定任务区域。

在选择任务区域,选中任务,选择执行时间(立即,or,定时),点击添加,任务就被添加到确定任务区域。

等添加完任务,确定任务区域的样子,就和目前maa的UI样子一样,然后点击确定,这时候任务就被发送给maa的任务监听系统。

对于立即执行的任务,maa core会立即执行。对于定时执行的任务,会有一个额外的线程来暂时保存,等到了时间再发送给maa。这部分应该和3.9.0 beta-8的逻辑差不太多。

有了上述添加系统,还可以继续做任务监控系统,再有一个task monitor界面,一个show status按钮,点击之后可以看到目前正在执行的任务,即将执行的任务(即立即执行但还没执行),还有之后定时执行的任务。

对于已经添加的定时执行的任务,不能随意修改,但可以用一个stop来把当前的waiting的任务链全部取消,和目前一样。

对于定时的任务,可以选中之后取消。想修改的话,就回去之前的界面重新添加。和上面的区别是,立即执行的任务只能全部一起取消,定时任务可以单独一个取消。另外,可以持续添加定时任务,来到这个界面的时候,会自动按时间顺序排列。

有了上述界面之后,就可以再继续做一个任务规划系统。

比如,之前也讨论过的,指定目标材料数,自动计算出需要打的关卡,得到一系列战斗计划。根据这个计划,自动安排定时任务。

日常任务和剿灭也用上述定时任务添加方式来添加。

综上所述,使用流程就是,打开maa,点击连接(连接到模拟器),添加任务(包括立即执行的任务,和,或是每天执行的任务,或是接下来好几周要执行的任务),确定添加任务

好了,之后几周都不用动了。

同时还有好处,如果打开发现卡了,也可以马上添加一串立即执行的任务。不会打乱后续的计划。

bug: 读取本地配置未生效

task.vue line32-34 中,尝试读取连接过的设备配置,但历史设备配置没有被正确读取,因此每次连接都会使用 defaultTask 覆盖掉 config.json 中的任务信息,这个过程中写入是正常的,只有读取可能有点问题。

目前状态: 未连接时 taskStore 始终为空,因此连接后会创建一份 defaultTask 覆盖掉本地 config.json 中的配置。

期望结果: 未连接时 taskStore 或者其他地方存储了历史设备任务信息,在连接时能过读取历史信息而不是新创建。

卡片功能更新

defaultTask 我准备改成与 core 文档严格一致的形式,将默认参数放在卡片 vue 内,然后每个卡片都提供一个 check 以验证当前配置是否合法。大概周末去做这个。

作战任务卡片需要改动的比较多,详见 mastergo @ChingCdesu

卡片按照之前讨论的形式,需要cc做成可以增加与删除的形式,多可以,但是不能删除只有一个的卡片。

关卡选择

目前支持的关卡是硬编码在代码中,大概长这样

      levels: [
        {
          code: 'CE-6', // 龙门币
          times: 0
        },
        {
          code: 'AP-5', // 红票
          times: 0
        },
        {
          code: 'CA-5', // 技能书
          times: 0
        },
        {
          code: 'LS-6', // 作 战 记 录
          times: 0
        },
        {
          code: '1-7', // 1 - 7 // BUG!
          times: 0
        },
        {
          code: 'SN-8',
          times: 0
        }
      ],

然后UI回去读code,拿到关卡名然后展示在UI上,大概长这样
image
由于支持的关卡可能会经常变动,硬编码可能不太合适,考虑比如core通过回调返回一个关卡支持列表? @MistEO
然后是CE-5/6这种混合的关卡支持,还有剿灭,UI现在的结构是没法展示的,cc康康 @ChingCdesu

启动过程中出错

分支:dev
Error occurred in handler for 'main.CoreLoader:load': TypeError: Cannot read properties of undefined (reading 'close')
图片

Error occurred in handler for 'main.ComponentManager:getStatus': TypeError: Cannot read properties of undefined (reading 'AsstGetVersion')
图片

Error occurred in handler for 'main.ComponentManager:install': TypeError: Cannot read properties of undefined (reading 'close')
图片

并且界面的Loading一直显示,未关闭
图片

并且运行过程中报错: Passthrough is not supported, GL is disabled, ANGLE is
图片

8.27 bug总结

  • 在设备任务进行时,跳转到任意一个其他页面(如设置页),再跳回正在进行任务的设备任务页,TaskCard会有错误的排序,数量和状态
  • SubTaskExtraInfo回调无法正常写入到task.results中

[BUG] watch 无法正确监听设备状态变更

DeviceCard.vue#53

let connectShow: MessageReactive | undefined
watch(() => device.value?.status, (newStatus) => {
  logger.info('device status changed', newStatus)
  if (connectShow) connectShow.destroy()
  connectShow = undefined
  switch (newStatus) {
    case 'connecting':
      connectShow = show(`${deviceDisplayName.value}正在连接...`, {
        type: 'loading',
        duration: 0
      })
      break
    case 'waitingTask':
      connectShow = show(`${deviceDisplayName.value}正在连接并等待执行任务...`, {
        type: 'loading',
        duration: 0
      })
      break
    case 'connected':
      connectShow = show(`${deviceDisplayName.value}已连接`, {
        type: 'success',
        duration: 3000
      })
      break
    case 'disconnected':
      connectShow = show(`${deviceDisplayName.value}已断开连接`, {
        type: 'info',
        duration: 3000
      })
      break
  }
}, { deep: true })

image
设备状态已经变成 connected, 但是没有触发watch

MaaX多设备检索出错

Snipaste_2023-04-20_23-40-24
雷电模拟器的ADB我已经替换成了Android Platform Tools原版的ADB,并且每个连接点都手动连接过一次,无效

maa 任务系统设计(新)

说说你遇到的问题?

现有的任务系统过于简单,不能满足需求

有什么好的想法?

设计思路

任务,任务组,监视器

任务配置页面

这个页面的目的是设置每个单一任务的具体参数。

这是一个可以切换显示内容的页面。页面中间是主要内容。页面下面是上一步和下一步。

第一个页面的目的是引导两个主要功能。页面包含一个列表,列表包含两个选项,一个是新建任务,一个是更改已有任务。选择一个功能,点击下一步进入下一个页面。

第二个页面的目的是选择一个任务。页面包含一个列表。如果选了新建任务,列表包含开始唤醒,基建换班,刷理智,自动公招,访问好友,收取信用及购物,领取日常奖励。如果选了更改已有任务,程序会读取已经配置好的任务,展示在列表中。用户从列表中选择一个任务,进入下一个页面。

第三个页面的目的是配置相应的任务。如果是新建任务,那么会显示默认配置。如果是已有任务,那么会读取并显示已经配置的参数。用户在修改完之后,点击保存。需要注意的是,可以自定义最终任务名。比如刷理智任务,可以设置为刷当前任务,刷剿灭,刷芯片等。所有任务名不能重复。成功保存之后,返回第一个页面。

任务组配置页面

这个页面的目的是添加任务组,并配置重复情况。

包含 3 个子页面。总体设计类似于任务配置页面。

第一个页面选择新建任务组,或者更改已有任务组。如果是新建任务组,则直接跳到第三个页面。如果是更改已有任务组,则进入到第二个页面。

第二个页面要选择一个已配置的任务组。选择好之后,点击下一步进入第三个页面。

第三个页面的左侧是一个列表,列表下方是一个刷新按钮。列表的内容是已经配置好的,可供添加的任务。在新建任务之后需要点击刷新按钮重新加载。页面中间是一个列表,显示任务组当前所包含的若干任务,运行顺序为从上到下。页面右侧用来配置重复。重复配置的相关规则可以参考日历应用,即几点运行,重复一次,每天重复,每周重复,等。同样需要配置任务组的名字。不能重复。成功保存之后返回第一个页面。

任务组配置好后不会直接执行,需要到任务监视页面进行下一步管理。

任务监视页面

这个页面是用来配置和监视任务执行情况。

实时更新?(每分钟更新一次)(可行性存疑)

左侧列表显示已经配置好的若干任务组。左下方按钮“确认执行任务组”,有两个选项,“立即执行一次”,“在配置的时间执行”。

中间列表会显示下一个要执行的任务和执行的时间。

右侧显示当前运行的任务组的运行情况,内容和一键长草页面的右侧类似。当运行一个新任务组,回调信息清空重来。

使用逻辑

用户首先在任务配置页面配置若干任务。然后在任务组配置页面配置若干任务组。然后到任务监视页面确认执行任务组。然后就等着就可以了。

使用技巧/优点

可以自由地添加各种任务组合。比起单一任务来说要更为强大。

缺点

没搞明白一种情况,比如9点设置了一个任务组,他要运行半个小时。但是我又在9点10分设置了另一个任务组。会发生什么情况?

其他内容

No response

feat: 可用设备列表与自定义连接的 ADB

Windows: 左侧可用设备列表使用模拟器自带的adb,右侧自定义连接使用下载的adb
Linux | macOS: 左侧可用设备列表和自定义连接均使用下载的 adb

可以在 UI 第一次打开的时候把 adbcore 一起下载。

  • 自动下载 adb
  • Windows 左侧设备列表
  • Windows 右侧自定义连接
  • #52
  • Linux 右侧自定义连接
  • macOS 左侧设备列表
  • macOS 右侧自定义连接

启动时报错: A JavaScript error occurred in the main process

曾经成功启动过,但在下载安装里面的各种依赖时失败,重启软件后就这样了。重新下载安装 MaaAsstElectronUI 仍然无法解决。谢谢

image

系统信息:
版本 Windows 11 专业版
版本 22H2
安装日期 ‎2022/‎7/‎17
操作系统版本 22621.1265
体验 Windows Feature Experience Pack 1000.22638.1000.0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.