AzurLaneAutoScript icon indicating copy to clipboard operation
AzurLaneAutoScript copied to clipboard

Feature: Keep common rarity CVs when retire ships

Open GodofTheFallen opened this issue 1 year ago • 19 comments

#3533 添加了一个设置项: image

效果演示如下:

https://github.com/LmeSzinc/AzurLaneAutoScript/assets/15105315/b4f80cc3-7591-40c8-89d5-e180fc60464a

GodofTheFallen avatar Mar 06 '24 08:03 GodofTheFallen

修复了一个BUG,该BUG会导致白皮航母积攒过多,而卡住挂机。 现在在白皮航母积累过多时,会退役到每种剩一支 同时优化了退役功能,增加了对满破船额外留1的选项识别,但未加入设置

GodofTheFallen avatar Mar 07 '24 08:03 GodofTheFallen

仅为了一点点的功能而进行的游戏操作过多,且与现有实现重复 https://github.com/LmeSzinc/AzurLaneAutoScript/blob/1243936f52f5540269fbea0995ed0f80621bb4da/module/retire/retirement.py#L485-L489

LmeSzinc avatar Mar 07 '24 09:03 LmeSzinc

仅为了一点点的功能而进行的游戏操作过多,且与现有实现重复

https://github.com/LmeSzinc/AzurLaneAutoScript/blob/1243936f52f5540269fbea0995ed0f80621bb4da/module/retire/retirement.py#L485-L489

这不是我写的,以及这个功能我早觉得没用了

GodofTheFallen avatar Mar 07 '24 09:03 GodofTheFallen

仅为了一点点的功能而进行的游戏操作过多,且与现有实现重复 https://github.com/LmeSzinc/AzurLaneAutoScript/blob/1243936f52f5540269fbea0995ed0f80621bb4da/module/retire/retirement.py#L485-L489

这不是我写的,以及这个功能我早觉得没用了

这个功能我不知道是谁写的,反正目前的实现存在严重问题,其本来的目的是退役已经达到30多级的白皮航母,但其并不能匹配上这些航母,这些30多级的航母会无限在船坞囤积,好消息是囤积速度很慢,只要不是挂着一个月不管都不会出问题

GodofTheFallen avatar Mar 07 '24 09:03 GodofTheFallen

仅为了一点点的功能而进行的游戏操作过多,且与现有实现重复

复读。现在的实现是 在最后弹出的确认界面中反选掉一个保留角色,是最佳实现;正选N次会带来大量多余游戏操作,不接受。

LmeSzinc avatar Mar 20 '24 08:03 LmeSzinc

这个功能会推送出来吗?好想要

clark1091 avatar Mar 21 '24 09:03 clark1091

优化了一下退役逻辑,现在一次退役会尽可能多的退役船,直到保留每种白皮航母各一只,避免因为船坞空间不足经常卡住

GodofTheFallen avatar Mar 29 '24 02:03 GodofTheFallen

对于这个问题我有一个操作次数更少的解决方案: 在刷委托任务里添加一项配置“船坞中已锁定的1级白皮轻航数量”(下称“该配置”),它应该是自动更新的,非特殊情况无需手动修改。 每次更换刷委托队的旗舰时,如果被换上的船是已锁定的1级白皮轻航,则将该配置的值减一,并将被换上的船解锁,然后检查该配置的值: 如果该配置的值小于特定值(例如5艘),则去船坞里尝试锁定一些1级白皮轻航,使已锁定的1级白皮轻航总数达到(或尽可能接近)另一特定值(例如10艘),并根据成功锁定的船的数量自动更新该配置。 反之如果该配置的值不小于该特定值,则无需额外操作。 退役时也无需额外操作,甚至都不用再检查退役确认窗口里有没有1级白皮轻航,因为都已经锁定了不会被选中。

这个方案只需要每次更换旗舰时额外点击游戏4次(如果同时还换装备甚至只需额外点击1次),每更换旗舰一定次数(按照上面的例子,是每更换5次)去船坞锁定一些1级白皮轻航即可。

ec7529a2 avatar Apr 25 '24 00:04 ec7529a2

对于这个问题我有一个操作次数更少的解决方案: 在刷委托任务里添加一项配置“船坞中已锁定的1级白皮轻航数量”(下称“该配置”),它应该是自动更新的,非特殊情况无需手动修改。 每次更换刷委托队的旗舰时,如果被换上的船是已锁定的1级白皮轻航,则将该配置的值减一,并将被换上的船解锁,然后检查该配置的值: 如果该配置的值小于特定值(例如5艘),则去船坞里尝试锁定一些1级白皮轻航,使已锁定的1级白皮轻航总数达到(或尽可能接近)另一特定值(例如10艘),并根据成功锁定的船的数量自动更新该配置。 反之如果该配置的值不小于该特定值,则无需额外操作。 退役时也无需额外操作,甚至都不用再检查退役确认窗口里有没有1级白皮轻航,因为都已经锁定了不会被选中。

这个方案只需要每次更换旗舰时额外点击游戏4次(如果同时还换装备甚至只需额外点击1次),每更换旗舰一定次数(按照上面的例子,是每更换5次)去船坞锁定一些1级白皮轻航即可。

很好的想法,但我感觉我不知道怎么操作进入船坞锁定舰船

GodofTheFallen avatar Apr 25 '24 01:04 GodofTheFallen

对于这个问题我有一个操作次数更少的解决方案: 在刷委托任务里添加一项配置“船坞中已锁定的1级白皮轻航数量”(下称“该配置”),它应该是自动更新的,非特殊情况无需手动修改。 每次更换刷委托队的旗舰时,如果被换上的船是已锁定的1级白皮轻航,则将该配置的值减一,并将被换上的船解锁,然后检查该配置的值: 如果该配置的值小于特定值(例如5艘),则去船坞里尝试锁定一些1级白皮轻航,使已锁定的1级白皮轻航总数达到(或尽可能接近)另一特定值(例如10艘),并根据成功锁定的船的数量自动更新该配置。 反之如果该配置的值不小于该特定值,则无需额外操作。 退役时也无需额外操作,甚至都不用再检查退役确认窗口里有没有1级白皮轻航,因为都已经锁定了不会被选中。 这个方案只需要每次更换旗舰时额外点击游戏4次(如果同时还换装备甚至只需额外点击1次),每更换旗舰一定次数(按照上面的例子,是每更换5次)去船坞锁定一些1级白皮轻航即可。

很好的想法,但我感觉我不知道怎么操作进入船坞锁定舰船

理想很美好,但實際上涉及解鎖/鎖定會有二次密碼的問題,不建議朝這方向發展

bookbug666 avatar Apr 25 '24 02:04 bookbug666

很好的想法,但我感觉我不知道怎么操作进入船坞锁定舰船

在船坞界面中,已锁定的舰船的头像右上方有一个小锁图标,未锁定的则没有。 而alas目前能自动找到1级白皮轻航。 所以只要在船坞里找头像右上方没有小锁图标的1级白皮轻航即可。

理想很美好,但實際上涉及解鎖/鎖定會有二次密碼的問題,不建議朝這方向發展

即使有二次密码导致不能解锁舰船,我提出的方案也不是完全不能用。 可以添加一项配置“是否允许解锁舰船”,如果用户不让alas解锁舰船,则在换旗舰时优先选则未锁定的1级白皮轻航,同时在退役时尽可能注意不要退役1级白皮轻航,并让用户不定期手动解锁升级过的白皮轻航即可。 我认为这样比alas目前使用的方案和这个pr里使用的方案更好一些。 目前的方案由于每次一键退役的船可能多于10艘以及alas对退役确认窗口里的船的识别容易出错,导致经常无船可用。 这个pr里使用的方案对游戏的额外操作太多。 而我提出的方案即使不解锁舰船也至少可以防止无船可用,且对游戏的额外操作很少。 实在不行也可以添加配置选项让用户来选择适合自己的方案。

ec7529a2 avatar Apr 25 '24 02:04 ec7529a2

我的想法是在退役时先点一下一键退役然后取消,此时将被退役的船会是“已选中”状态。然后再筛选白皮轻航进行反选。但我没想好怎么识别“已选中”,以及没有验证card变亮时现在的模板识别有没有问题,有没有哪个区域不受影响

Air111 avatar Apr 25 '24 03:04 Air111

我的想法是在退役时先点一下一键退役然后取消,此时将被退役的船会是“已选中”状态。然后再筛选白皮轻航进行反选。但我没想好怎么识别“已选中”,以及没有验证card变亮时现在的模板识别有没有问题,有没有哪个区域不受影响

也可以先选中白皮轻航再点一键退役,此时被手动选中的白皮轻航会出现在退役确认窗口最前面,然后把前面的这几艘船取消掉即可,这样就不用识别已选中的船。

ec7529a2 avatar Apr 25 '24 10:04 ec7529a2

也可以先选中白皮轻航再点一键退役,此时被手动选中的白皮轻航会出现在退役确认窗口最前面,然后把前面的这几艘船取消掉即可,这样就不用识别已选中的船。

你说得对,可以先筛选白皮可强化轻航,点一键退役,点取消;选上(2, 100)级的;筛选全部;点一键退役,选一艘白皮轻航,点确定。这样增加的操作很少。

这样可以解决后排是“任意”的情况,若不是任意仍有可能不在一键退役的第一页出现

演示:

https://github.com/LmeSzinc/AzurLaneAutoScript/assets/54128005/53f93cc2-a471-487c-b30a-edb2b01400e6

Air111 avatar Apr 25 '24 12:04 Air111

你说得对,可以先筛选白皮可强化轻航,点一键退役,点取消;选上(2, 100)级的;筛选全部;点一键退役,点确定。这样增加的操作很少。

这样可以解决后排是“任意”的情况,若不是任意仍有可能不在一键退役的第一页出现

我认为你没有完全理解我的上一条comment,我需要解释得更详细一些。 先说明一些用语以防歧义: 退役选择界面:是点击主界面右下的建造按扭,然后点击左侧的退役按扭后进入的界面。在刷图时弹出的“船坞已满”弹窗中点击整理按扭也会进入这个界面。这个界面通常被称为退役界面,但为了与退役确认界面区分,我们在此称之为退役选择界面。 退役确认界面:是在退役选择界面中(能)选中至少一艘船时,点击确定或一键退役按扭后弹出的界面。 然后说明一些游戏机制: 在退役选择界面和退役确认界面中,游戏会暂时记住被选中的船,这个记录是有顺序的,而且它的运作方式可以理解为一个python列表(list) 进入退役选择界面时,创建一个空列表(或清空之前用过的列表)(下称“选中列表”) 在退役选择界面中点击一艘未选中的船时,将其添加到选中列表的末尾(append) 在退役选择界面中点击一艘已选中的船时,将其从选中列表中移除(remove) 点击一键退役按扭时,将所有符合一键退役条件且符合当前筛选条件的船按照特定排序规则排序,并全部添加到选中列表的末尾(extend) 划重点:点击一键退役按扭不会从选中列表中移除任何现有内容,也不会改变现有内容的顺序 (注:该“特定排序规则”对于四艘白皮轻航来说总是竞技神-突击者-兰利-博格,不受筛选按扭中设置的排序规则影响) 进入退役确认界面时,游戏会按顺序显示选中列表中的船(print) (注:退役确认界面中的船没有闪烁的“已选中”字样) 在退役确认界面中点击一艘船时,将其从选中列表移动到排除列表中(remove append) (并根据更改后的选中列表的内容重新显示选中列表中的船,或者如果更改后选中列表为空,关闭退役确认界面) 排除列表是什么/有什么用?划重点:点击一键退役按扭不会选中排除列表中的船 点击退役确认界面的取消按扭时,选中列表的内容不会被改变,无论其内容是否由一键退役功能添加。 点击退役确认界面的确定按扭或离开退役选择界面时,清空选中列表(clear) 离开退役选择界面时,还会同时清空排除列表(clear)

然后讲一讲我的上一条comment是什么意思: 首先进入退役选择界面,筛选白皮轻航。 然后点击一键退役按扭来快速选中所有白皮轻航,如果使用下述的选项1,则还需点击退役确认界面的取消按扭。 或者如果指定旗舰,找到并通过逐个点击来选中所有需要保留的白皮轻航。 以上操作会将需要保留的白皮轻航放在选中列表开头。 (注:找指定旗舰的方法可以抄刷委托任务换船用的方法,也就是说可以处理指定旗舰的情况) (注:逐个点击的方法可以抄传统退役的点击方法) (注:指定旗舰时使用一键退役按扭来加速操作的方法等一会再说) 然后有两个选项: 选项1:取消筛选,点击一键退役,进入退役确认界面。 此时,根据上述游戏机制,需要保留的白皮轻航一定在退役确认界面最靠前的位置,通过逐个点击将其从选中列表中移除即可。 选项2:直接点击退役选择界面的确定按扭,进入退役确认界面。 此时,退役确认界面中只有需要保留的白皮轻航,通过逐个点击将其移动到排除列表中。 然后取消筛选,点击一键退役,此时一键退役不会选中排除列表中的白皮轻航。

以上操作都不需要识别闪烁的“已选中”字样。

关于指定旗舰时如何使用一键退役按扭来加速操作: 如果指定的旗舰是竞技神,筛选皇家阵营即可,因为另外三艘白皮轻航都是白鹰阵营。 如果指定突击者,则筛选白鹰阵营,这样突击者在一键退役的排序规则下会排第一。 如果指定博格,由于博格在一键退役的排序规则下排倒数第一,所以可以使用上述选项2,并把退役确认界面右侧的滚动条拖到底,从最后开始点击。 如果指定兰利。。。我没有想到用一键退役加速操作的方法,只能逐个点击了。

ec7529a2 avatar Apr 25 '24 22:04 ec7529a2

你说得对,可以先筛选白皮可强化轻航,点一键退役,点取消;选上(2, 100)级的;筛选全部;点一键退役,点确定。这样增加的操作很少。 这样可以解决后排是“任意”的情况,若不是任意仍有可能不在一键退役的第一页出现

我认为你没有完全理解我的上一条comment,我需要解释得更详细一些。 先说明一些用语以防歧义: 退役选择界面:是点击主界面右下的建造按扭,然后点击左侧的退役按扭后进入的界面。在刷图时弹出的“船坞已满”弹窗中点击整理按扭也会进入这个界面。这个界面通常被称为退役界面,但为了与退役确认界面区分,我们在此称之为退役选择界面。 退役确认界面:是在退役选择界面中(能)选中至少一艘船时,点击确定或一键退役按扭后弹出的界面。 然后说明一些游戏机制: 在退役选择界面和退役确认界面中,游戏会暂时记住被选中的船,这个记录是有顺序的,而且它的运作方式可以理解为一个python列表(list) 进入退役选择界面时,创建一个空列表(或清空之前用过的列表)(下称“选中列表”) 在退役选择界面中点击一艘未选中的船时,将其添加到选中列表的末尾(append) 在退役选择界面中点击一艘已选中的船时,将其从选中列表中移除(remove) 点击一键退役按扭时,将所有符合一键退役条件且符合当前筛选条件的船按照特定排序规则排序,并全部添加到选中列表的末尾(extend) 划重点:点击一键退役按扭不会从选中列表中移除任何现有内容,也不会改变现有内容的顺序 (注:该“特定排序规则”对于四艘白皮轻航来说总是竞技神-突击者-兰利-博格,不受筛选按扭中设置的排序规则影响) 进入退役确认界面时,游戏会按顺序显示选中列表中的船(print) (注:退役确认界面中的船没有闪烁的“已选中”字样) 在退役确认界面中点击一艘船时,将其从选中列表移动到排除列表中(remove append) (并根据更改后的选中列表的内容重新显示选中列表中的船,或者如果更改后选中列表为空,关闭退役确认界面) 排除列表是什么/有什么用?划重点:点击一键退役按扭不会选中排除列表中的船 点击退役确认界面的取消按扭时,选中列表的内容不会被改变,无论其内容是否由一键退役功能添加。 点击退役确认界面的确定按扭或离开退役选择界面时,清空选中列表(clear) 离开退役选择界面时,还会同时清空排除列表(clear)

然后讲一讲我的上一条comment是什么意思: 首先进入退役选择界面,筛选白皮轻航。 然后点击一键退役按扭来快速选中所有白皮轻航,如果使用下述的选项1,则还需点击退役确认界面的取消按扭。 或者如果指定旗舰,找到并通过逐个点击来选中所有需要保留的白皮轻航。 以上操作会将需要保留的白皮轻航放在选中列表开头。 (注:找指定旗舰的方法可以抄刷委托任务换船用的方法,也就是说可以处理指定旗舰的情况) (注:逐个点击的方法可以抄传统退役的点击方法) (注:指定旗舰时使用一键退役按扭来加速操作的方法等一会再说) 然后有两个选项: 选项1:取消筛选,点击一键退役,进入退役确认界面。 此时,根据上述游戏机制,需要保留的白皮轻航一定在退役确认界面最靠前的位置,通过逐个点击将其从选中列表中移除即可。 选项2:直接点击退役选择界面的确定按扭,进入退役确认界面。 此时,退役确认界面中只有需要保留的白皮轻航,通过逐个点击将其移动到排除列表中。 然后取消筛选,点击一键退役,此时一键退役不会选中排除列表中的白皮轻航。

以上操作都不需要识别闪烁的“已选中”字样。

关于指定旗舰时如何使用一键退役按扭来加速操作: 如果指定的旗舰是竞技神,筛选皇家阵营即可,因为另外三艘白皮轻航都是白鹰阵营。 如果指定突击者,则筛选白鹰阵营,这样突击者在一键退役的排序规则下会排第一。 如果指定博格,由于博格在一键退役的排序规则下排倒数第一,所以可以使用上述选项2,并把退役确认界面右侧的滚动条拖到底,从最后开始点击。 如果指定兰利。。。我没有想到用一键退役加速操作的方法,只能逐个点击了。

这样感觉和现在的方案貌似没有显著差别了,现在每次会留每种白皮各一个,点击量也不大 另外是拖动操作是一个很有风险的操作,会导致各种因为滑动的距离不符合预期而识别出错

GodofTheFallen avatar Apr 26 '24 02:04 GodofTheFallen

这样感觉和现在的方案貌似没有显著差别了,现在每次会留每种白皮各一个,点击量也不大 另外是拖动操作是一个很有风险的操作,会导致各种因为滑动的距离不符合预期而识别出错

上面那条很长的comment主要是在Air111的方案基础上进行修改,避免识别闪烁的“已选中”字样。这跟这个pr的方案的区别其实不算小。(至少一个是正选一个是反选) 并且这跟我一开始提出的利用锁定机制的方案不是同一个方案。

如果算上alas目前正在使用的方案,则一共有四个不同的方案:

方案一,alas目前正在使用的方案,在退役确认界面识别并取消一艘保留船。 优点是实现简单,操作少,缺点是无论是否指定旗舰都需要直接识别船名,我经常观察到识别出错的情况,且现在一次退役可以超过10艘船,这个方案容易留不住船。 (如果改为拖动右侧滚动条来识别退役确认界面中所有的船,则会由于滚动导致船错位,进一步增加识别出错率)

方案二,这个pr的发起者GodofTheFallen提出的方案,利用筛选机制多次退役不保留的船。 优点是利用筛选机制,不指定旗舰时基本上避免了直接识别船名,缺点是操作很多(每次退役都有一堆操作),且如果限制保留船的数量则需要多一轮退役操作。

方案三,我一开始提出的方案,利用锁定机制防止保留的船被退役。 优点是会锁定保留船,使其不被意外退役,不管是用户手动退役时忘了留船还是alas自动退役时出了问题。 以及操作很少,只需要在换船时多点4次,与方案一相比甚至还省去了每次退役时识别船的动作,每换船一定次数才需要锁定一次船。 缺点是会被二次密码干扰。

方案四,Air111提出的方案,利用退役机制的细节来避免退役需要保留的船。 我在那条很长的comment里对此方案提出了修改,以避免识别闪烁的“已选中”字样。 优点是利用游戏机制,只在指定旗舰为兰利时需要直接识别船名,且可以方便的限制保留船的数量,缺点是操作也很多。(也是每次退役都有一堆操作) 另外,方案四指定旗舰为博格时进行的拖动没那么容易导致识别出错,因为这个拖动是无脑拖到底,不会导致船错位。

总结:四个方案各有优缺点

ec7529a2 avatar Apr 26 '24 15:04 ec7529a2

@ec7529a2 我补充说明一下,我的方案是利用了“点击一键退役按扭不会从选中列表中移除任何现有内容,也不会改变现有内容的顺序”这一我以前未注意到信息,然后筛选白皮可强化轻航这一步在现有退役流程中就有,是为了退役刷委托产生的(2, 100)级的船,所以我的方案增加的操作很少,但不能解决指定的问题。

博格并不需要拖到底,只需改变排序方式即可。但是没法解决兰利的问题,在船坞中一页一页筛选是不可接受的,操作太多,还不如这个pr原本的方案。

我觉得最好不要引入解锁船的操作,识别不可能做到100%正确率,误解锁可能会造成一些严重的后果。

Air111 avatar Apr 27 '24 07:04 Air111

仅为了一点点的功能而进行的游戏操作过多,且与现有实现重复

复读。现在的实现是 在最后弹出的确认界面中反选掉一个保留角色,是最佳实现;正选N次会带来大量多余游戏操作,不接受。

您难道不知道现在的退役方法留不住1级白航母吗,自从碧蓝改了退役上限之后,第一屏就大概率不会出现白航母,根本留不住船导致换旗舰步骤卡住,船坞越大越容易导致此类现象 @LmeSzinc

GodofTheFallen avatar May 02 '24 16:05 GodofTheFallen