AzurLaneAutoScript icon indicating copy to clipboard operation
AzurLaneAutoScript copied to clipboard

Feature: Gear Code based fast equipment exchange for GemsFarming

Open guoh064 opened this issue 1 year ago • 8 comments

Closes #3243

guoh064 avatar Feb 13 '24 05:02 guoh064

目前已适配:

  • [x] CN
  • [ ] EN
  • [x] JP
  • [ ] TW

GodofTheFallen avatar Mar 01 '24 07:03 GodofTheFallen

我在bluestacks 5.13.200.1028 P64上测试发现u2.send_actionu2.send_keys(与FastInputIME有关的)均无效,研究了一整天的结果是,必须在bluestacks选择输入法设置中选择“启动屏幕键盘”(默认是“启用物理键盘”)

此外,可以使用u2(focused=True, className="android.widget.EditText").set_text()(其中selector二选一即可)进行文本输入,但也许需要测试其他模拟器。可以使用u2.clipboard获取剪贴板内容,进而实现粘贴。

如果用adb的话,可以使用input text来输入装备码。可以使用如下方式来“清空”

adb shell input keyevent 123 # KEYCODE_MOVE_END
adb shell input keyevent 67 67 67 ... # KEYCODE_DEL

而关闭输入框我试下来目前只有u2.send_action这一种比较“优雅”的办法,但我觉得点击屏幕顶部中间区域(例如(640, 20)附近)是一个可以被接受的方法,因为装备码界面中间都是不可点击的。

因此adb的缺点是:

  • 暂未发现优雅的方式进行clear_text(如果有人了解select all的方法,或者通过send event区分按键的按下和抬起等方式实现ctrl+a组合键,请告诉我),但我觉得没必要,每次进入装备码页面都是清空状态。
  • 暂未发现优雅的方式关闭输入框

u2的缺点是:

  • 可能需要修改模拟器设置
  • 如果不使用FastInputIME,使用UiObject.set_text(),则一样暂未发现优雅的方式关闭输入框

我个人的倾向是放弃u2,使用纯adb+点击关闭输入框的方式。有没有哪个模拟器默认弹出一个全屏的输入框?

~~脑子有点乱,编辑了好多次,不好意思~~

Air111 avatar Apr 03 '24 14:04 Air111

我这边发现关闭FastInputIME后(IME变成“Android 键盘(AOSP)”)回车可以关闭输入框,不知道其他模拟器如何

u2.set_fastinput_ime(True)

屏幕截图 2024-04-04 145651

u2.set_fastinput_ime(False)

屏幕截图 2024-04-04 145637

u2:

u2.press('enter')

adb:

adb shell input keyevent KEYCODE_ENTER

Air111 avatar Apr 04 '24 07:04 Air111

我在bluestacks 5.13.200.1028 P64上测试发现u2.send_actionu2.send_keys(与FastInputIME有关的)均无效,研究了一整天的结果是,必须在bluestacks选择输入法设置中选择“启动屏幕键盘”(默认是“启用物理键盘”)

感谢反馈,如果最后采用这种方案的话会写在设置里面

此外,可以使用u2(focused=True, className="android.widget.EditText").set_text()(其中selector二选一即可)进行文本输入,但也许需要测试其他模拟器。可以使用u2.clipboard获取剪贴板内容,进而实现粘贴。

如果用adb的话,可以使用input text来输入装备码。

当时不用adb的主要原因是星界链alas版自带“流氓”输入法,如果不强行切换输入法,而是使用默认输入法的话,adb input text输入的也会是乱码。这一点没有好的替代方案的话可能无法回退到单纯使用adb的模式。

而关闭输入框我试下来目前只有u2.send_action这一种比较“优雅”的办法,但我觉得点击屏幕顶部中间区域(例如(640, 20)附近)是一个可以被接受的方法,因为装备码界面中间都是不可点击的。

需要更多测试(lme语)。我之前写这些代码的时候主要用的是星界链,后来的测试则主要在mumu模拟器上完成。对于bluestacks的测试确实没有进行过,不过最近现实世界中比较忙,可能这个功能的开发测试会搁置一段时间。如果有好的思路欢迎pr。

guoh064 avatar Apr 04 '24 09:04 guoh064

我本来就是想帮忙改改的(急急急我要刷b1b3),测试中发现了这个问题,感觉似乎没有完美的方案,都有一些取舍,所以先来问问

如果能通过拼凑得到一套兼容性强的方案,也不是非要提供纯adb和纯u2两种操控方案

Air111 avatar Apr 04 '24 09:04 Air111

1a60ce9 重做了equipment_code.py、input.py和相关接口,主要改变如下:

  • 重构EquipmentCode类,只进行config的导入、修改、导出这三个功能;
  • 新建EquipmentCodeHandler类,为StorageHandler子类,包括在装备码界面的各种操作,目标是接替已有的EquipmentChange类完成装备替换。 与此对应地,在gems_farming.py中:
  • 新建GemsEquipCodeHandler类,为EquipmentCodeHandler子类,指定了对应的更换船只和装备码设置位置。
  • 删除了原来使用的EquipmentChange类,并删除相关函数调用。

另外,在确认功能性没有问题后,后期计划将分支rebase到最新dev分支(或者dev分支merge到当前分支),以解决目前的合并冲突问题(需要 @LmeSzinc 的确认)

guoh064 avatar Apr 17 '24 00:04 guoh064

@LmeSzinc 抽空看一下要不要打需要修改的标签,谢谢

guoh064 avatar Aug 18 '24 09:08 guoh064