AzurLaneAutoScript icon indicating copy to clipboard operation
AzurLaneAutoScript copied to clipboard

求求了,支持自定义模拟器的重启

Open lbpdfs opened this issue 3 years ago • 7 comments

你的功能请求是否与问题有关?

手动填个路径重启的那种就够用了!夜间挂机可太需要重启模拟器的功能了 明明看着emulator.py里一堆雷电的代码为什么跑起来就不支持呢_(:3J∠)_

解决方案

No response

其他内容

No response

lbpdfs avatar Aug 21 '22 22:08 lbpdfs

代码里实际上是给自定义模拟器预留了空间的,但是因为路径识别不是很优雅就砍掉了 如果你想要,可以给alas pr一个雷电模拟器的支持(很简单的,但是需要自己测试过)

SaiCateDoan avatar Aug 22 '22 04:08 SaiCateDoan

我该怎么做_(:3J∠)_

lbpdfs avatar Aug 22 '22 10:08 lbpdfs

module\device\emulator.py,在SUPPORTED_EMULATORS中加入雷电模拟器的各种参数,在UI上加入雷电模拟器的选项,然后测试没问题就行

SaiCateDoan avatar Aug 23 '22 07:08 SaiCateDoan

module\device\emulator.py,在SUPPORTED_EMULATORS中加入雷电模拟器的各种参数,在UI上加入雷电模拟器的选项,然后测试没问题就行

加入了 'ld_player_9': EmulatorInstance( name="LDPlayer9", root_path=".", emu_path="./dnplayer.exe", vbox_path="./vms", vbox_name='*.vbox$' ), 然后出现的报错我已经看不懂了 log.txt 大概是vbox_name我最终还是没写对?

lbpdfs avatar Aug 23 '22 12:08 lbpdfs

我注意到雷电的配置的后缀名是.config而不是.vbox,你可能需要进行对应的修改,然后alas需要从配置文件里面找到serial对应的端口,具体查找的东西在注释里有,你可以人工检查一下

SaiCateDoan avatar Aug 27 '22 13:08 SaiCateDoan

我注意到雷电的配置的后缀名是.config而不是.vbox,你可能需要进行对应的修改,然后alas需要从配置文件里面找到serial对应的端口,具体查找的东西在注释里有,你可以人工检查一下

所以说雷电需要的是./vms/config下的"leidian0.config"这一类文件而不是./vms/leidian0下的“leidian.vbox”这类文件吗?

根据注释我在上文的./vms/leidian0目录下找到leidian.vbox和leidian-1.15-windows.vbox中均有以下文本 <NAT> <!-- use it when needed <Forwarding name="Rule 1" proto="1" hostport="2222" guestport="2222"/> --> </NAT> 但是在新建的多开模拟器./vms/leidian1目录下存在相同文件,内容也相同,似乎并不能区分多开与否

lbpdfs avatar Aug 28 '22 16:08 lbpdfs

我注意到雷电的配置的后缀名是.config而不是.vbox,你可能需要进行对应的修改,然后alas需要从配置文件里面找到serial对应的端口,具体查找的东西在注释里有,你可以人工检查一下

冷静了一个下午,我现在依靠写死设定完成了本机的雷电9模拟器1启动,没有思考多开的问题。以下为相关代码 新建了雷电9类

class LDPlayer9Instance(EmulatorInstance):
    @cached_property
    def id_and_serial(self):
        """
        Returns:
            list[str, str]: List of multi_id and serial.
        """
        vbox = []
        for path, folders, files in os.walk(os.path.join(self.root, self.vbox_path)):
            for file in files:
                if re.match(self.vbox_name, file):
                    file = os.path.join(path, file)
                    vbox.append(file)

        serial = []
        for file in vbox:
            with open(file, 'r') as f:
                serial.append([os.path.basename(file).split(".")[0], f'127.0.0.1:5555'])

        return serial

无论在雷电9的.config文件还是.vbox文件中都找不到serial相关的描述,毕竟雷电本身serial就在emulator-555* 或 127.0.0.1:555*横跳,所以直接用我自己最常用的serial写死了。 SUPPORTED_EMULATORS中添加了雷电9相关文本

'ld_player_9': LDPlayer9Instance(
            name="LDPlayer9",
            root_path=".",
            emu_path="./dnplayer.exe",
            vbox_path="./vms/leidian0",
            vbox_name='.*.vbox$'
        ),

因为没有从文件找serial,所以vbox_name估计完全没用。 最后在detect_emulator进行了更改

for emulator in self.SUPPORTED_EMULATORS.values():
                try:
                    serials = emulator.id_and_serial
                    if emulator.name == 'LDPlayer9':
                        for cur_serial in serials:
                            if cur_serial[0] == 'leidian':
                                emulators.append([emulator, cur_serial[0]])
                    else:
                        for cur_serial in serials:
                            if cur_serial[1] == serial:
                                emulators.append([emulator, cur_serial[0]])
                except FileNotFoundError:
                    pass

因为serial是写死的,所以用id来保证打开的是我自用的第一个模拟器。实机测试可以正常运行

INFO     21:02:42.804 │ <<< EMULATOR RESTART >>>                                   
INFO     21:02:42.807 │ Detect emulator from all emulators installed               
INFO     21:02:42.811 │ Detected emulators:                                        
INFO     21:02:42.814 │ Name: LDPlayer9, Multi_id: leidian                         
INFO     21:02:42.817 │ Find the only emulator, using it                           
INFO     21:02:42.820 │ Start emulator                                             
INFO     21:02:42.822 │ Execute: "D:/leidian/LDPlayer9/dnplayer.exe"   

记事本的极限就到这里了,py代码我也确实第一次接触,每一个函数都得百度一遍用法。我甚至压根找不到UI文件在哪里,也无法在UI里专门加上一条雷电模拟器9,不然或许能少走很多弯路。我准备保留这个文件依靠反复覆盖满足自身使用,如果您愿意伸出援手,整合这些代码并加上UI方便单开雷电9的玩家使用,那么我将感激不尽。若是无暇那也无妨,可以直接将此feature关闭,我已着实无力再进一步完善代码和功能了。 emulator.zip

lbpdfs avatar Aug 29 '22 13:08 lbpdfs