《舰队收藏 肝帝模拟 改》使用说明

另有《已知问题与FAQ》可供查阅


给新手用户的使用说明

新手用户指刚接触本脚本,仅会单独使用名叫“基础××”甚至“关联××”的执行单元,实现固定执行流程的用户。

用对脚本的简单操作替换大部分对游戏的单调操作。

安装

浏览器插件

使用前必须安装浏览器插件。浏览器插件用于协助脚本操作游戏。

现仅开发了poi浏览器的插件。该插件开源于Github。本体稳定前不会开发其他浏览器的插件,如果你急用可以对照这个自己开发。

该插件详细内容及安装方法见→这里

运行环境

脚本需要最低.net Framework 4.7.2运行环境。

没有安装或者不知道安没安的话点这里下载安装包,选择Runtime那一项。系统最低要求win7 SP1。若安装失败请打完系统补丁后再试。当然,要是你打开程序没报错,那也说明装过要求版本的运行环境了。

本体

zip压缩包直接解压后就能用。运行KancollePlayerSimulatorKai.exe。

远征

使用“基础远征”执行单元。每个执行单元负责一个舰队的远征。有3个远征舰队,就要使用“执行单元”中的“添加”按钮,添加3个“基础远征”执行单元并分别设置。设置好后“触发”执行单元才会开始执行。对于“基础远征”,默认情况下直接点“全部启用”就行了。

对于第一次使用本程序的用户,用到这一步就可以先挂着远征干别的去了,本文后续的内容等多用一会找到感觉了再慢慢研究。

配置入门

要灵活运用本脚本的功能,就需要了解为什么这一代程序要新增“关联执行单元”这个机制。过往几代的脚本,都是把可以设置的功能分页显示的,如“远征”、“入渠”、“编成”、“出击”,用户进入选项卡分别设置就可以按照既定的流程执行脚本。但很多用户会来问我,可不可以同时套用两套“入渠”的策略,可不可以同时执行两套出击策略这类高度个性化设置问题。显然,过去的脚本是做不到的,因为各个功能的执行流程是写死了的,设置项也是固定的,灵活度被严重限制住了。为了解决这个问题,我这次使用了模块化的设计,把不同的常用功能封装成“执行单元”,然后按照需求结合这些执行单元就可以突破过去设计的限制。当然灵活的代价,就是你现在要自己决定要用哪个执行单元,以及如何组合这些执行单元了,这两步是过去程序设置环节中没有的。除了多了这两步之外,这一代脚本的设置都做得足够“傻瓜化”,多用几次就可以上手。因为用户的要求太多样,所以功能选项做得很细致,第一次用就不要管那些“高级设置”、复杂的执行单元,以免打击自信。设置的时候需要你静下心来认真看完选项说明文字,对新手来说设置一整套配置一次成功不太可能,运行遇到问题先去看FAQ。实在没头绪也可以参考我给的那些“范例配置”,在它们的基础上修改。

决定使用哪些执行单元非常简单,新建一个配置,然后根据需要“添加”需要功能对应的执行单元并设置即可。基本取用“基础××”里的“补给”、“入渠”就可以了,出击要用“单次出击”。

第二步要结合这些执行单元。为了方便大家使用,我制作了一些可以“关联执行单元”的执行单元(如“关联出击”、“串联(定时)”),用它们可以把你已经设置好了的执行单元组合起来,起到了“胶水”的作用。在同一个配置里再添加个这种执行单元。这类执行单元预设了一些步骤,你需要选取相应步骤相关的那些执行单元。可以选择多个,用不上某一步骤也可以空着,甚至可以设置和步骤名称作用不相关的执行单元。然后触发这个作为“胶水”的执行单元,这个执行单元就会在固定的步骤,触发被关联的执行单元,程序会开始执行一整套功能。

刷闪

刷闪涉及到游戏几乎全部的功能。要把所有功能都配置一遍才能工作。开始前要做好折腾的心理准备。

对于已注册用户,这里有个范例配置文件直接可用。下载下来后点击“打开”按钮读取这个配置(该按钮注册后才会显示),先在叫“待刷”的那个执行单元里设置一下要给哪些船刷闪,然后“触发”那个叫”总控”的执行单元就能开始刷闪了。其中候选船舰船ID可以直接在舰队里配好,然后用导入舰队的按钮添加。全刷完了之后脚本会报错说没有可以更换的船,就自动停止出击了。当然,这是单舰刷闪的配置,我的账号船多,等级都不低,入渠了也不影响啥,你要是矫情非要带狗粮,那你在这个框架上自己改。

对于没注册的用户,基本套路就是添加“关联出击”执行单元,设置好每一项。“基础编成舰队”执行单元要注意正确设置换船的条件。

出击

和上面的刷闪类似。建议理解了程序的整套逻辑后再自行搭配。

对于已注册用户,可以在这里找到范例配置,你可以在此基础上按自己的习惯修改。(不知道怎么在Github上下载配置的话,也可以去发布页面百度云的下载链接下载)


给普通用户的使用说明

普通用户指理解了本脚本的组成,并使用“模板”设置各执行单元的“附加触发条件”灵活组合已有执行单元以实现一定程度自定义脚本执行流程的用户。

利用存取配置功能,一次配置重复使用,一键完成想做的事情,可以省下大量脑力和时间。

注册

试用版本有少量功能限制(单次运行时长、自动手动存取配置)。购买并使用注册码后可解除限制。

注册后,软件设置(包括注册码)保存在config.json文件中;未关闭的配置保存在default.json文件中。更新本体时保留这两个文件可以避免重新设置。

试用功能限制很少,非刚需用户没必要购买注册码。另外因为自动发货且虚拟商品不可退货,务必能稳定运行后再购买。

这一代脚本的注册码改为购买时长模式,可以换电脑登录。不会再有买断模式,因为自由登录需要服务器支持,而注册服务器是月租的,我不可能永远租下去。

PayPal付款请邮件联系orzfirst@vip.qq.com。接受任意币种,参考价格为淘宝价格120%(含手续费、人工费),实时汇率。建议使用淘宝购买。

使用建议

  • 不要依赖自动保存功能。设置好的配置记得手动“另存”一下,用到哪个配置“打开”哪个配置。
  • 跑短远征每天停止几小时,否则容易被发猫。可以通过设置实现自动停止和自动开始。
  • 用到陆航的话,poi插件里改用“使用基于Windows操作系统API的鼠标模拟机制”可以解决选不中被陆航面板遮住的点的问题。

架构

简述

要进一步使用本程序,需要理解本程序的组成部分。

该程序包含以下几大功能模块:执行单元、组件、任务、事件。

最一般的工作流程是:执行单元向组件提交任务、组件处理任务后广播事件、执行单元被指定事件触发。当然,事件发出方是任意的,执行单元也可以发送事件,比如“关联出击”执行单元自动停止后会发出事件。

组件是实际操作游戏的部分,只包含控制游戏完成任务的逻辑,比如如何为指定舰队更换指定舰船。

执行单元中的逻辑较为复杂,它会根据设置和实际状况提交不同的任务、设置任务的值,比如决定换编成时该换哪些船。

本程序中,用户主要可以控制的,是执行单元如何响应事件,即使用“触发条件”功能。不怕麻烦的话用python编写自己的执行单元也是可以的。“触发条件”处的代码还可以修改“执行单元”的成员,也算是某种意义的自定义已有的执行单元。

触发条件

每个启用了的执行单元都会监听所有的事件,并在接收到指定消息时触发执行单元。“带默认触发条件”的执行单元默认已经有了对一些事件的反应能力,在首次触发后会自动根据内部状态和收到的事件执行一系列的动作。用户也可以使用“附加触发条件”额外设置条件,“附加触发条件”仅在“默认触发条件”不生效时执行判断。

“附加触发条件”有三种选项。“使用模板”是通过一些设置自动生成Python代码,这些设置是给定的,虽然不灵活但对于常规使用是完全足够的。自动生成的代码的第一行的注释用来区分代码是否是自动生成的,你甚至可以把代码复制到“使用代码”并进行修改。“使用代码”需要会写Python代码,好处是更灵活,可以判断更多事件的属性(比如“使用模板”里没提供设置的),甚至可以修改被附加的执行单元的属性。具体可以参考选中“使用代码”时显示的样例。

出击

跨配置触发

关联执行单元仅允许关联本配置内的执行单元,做这一限制是为了保证“配置”能独立使用,避免用户滥用造成混乱。如果想跨配置触发执行单元,需要使用“触发条件”系统。原理是,附加在执行单元上的Python脚本发现收到的事件是正在关注的事件后触发该执行单元。事件是全局的,所以可以做到跨配置触发。

选中想要被触发的执行单元,点击“设置条件”,选择“使用模板”,选择合适的事件并设置条件(如果可以设置),点击“确定”,“启用”执行单元,即可。如果需要更强的控制力,可以选择“使用代码”并编写逻辑。

远征队自动补闪

使用“关联远征”执行单元可以给远征队换船。但“关联远征”这个执行单元只能换船,想要给远征队补闪需要另外设置“关联出击”执行单元,直接套用刷闪的设置即可。然后需要让这两个执行单元互动起来,以实现自动给从远征队换下来的没闪了的船刷闪。要注意的是,这里不是给远征队中的船刷闪,因为那样刷的时候跑不了远征,效率极低。目前换装备功能没有实装,如果你跑的远征必须带闪带装备你还没有多套装备,那这里的方法暂时用不了。大致的思路就是,“关联出击”换编成成功后会有一个事件,“关联出击”响应这个事件并触发,就可以实现这两者的联动:换了编成就代表有船被换下来了,这时启动刷闪。该事件类型为OrganizeChangeFinishedEvent。它有一个“Fleet”属性,代表更换完成的舰队,应使用这个属性区分事件是关于哪个舰队的。想用一个刷闪配置同时对应多个远征队的自动补闪,请使用模板时多次“添加要响应的事件”,分别设置匹配的舰队。

同舰队多目标出击

如果你想用同一个舰队做不同的出击任务,最大化利用疲劳恢复时间。最好不要同时运行两个“关联出击”执行单元(除非你有把握调教好优先级)。可以把几个“关联出击”执行单元用“自动停止后触发执行单元”功能串联起来,并首尾相接。还要把这一串里每个执行单元的“自循环触发”关掉。如果想控制这一整串出击的循环次数,可串入“串联(××)”执行单元。

期间限定海域

要让脚本支持选取期间限定海域,需要额外向脚本提供一些有关期间限定海域的信息。我虽然会发布做好的数据,但由于我每次活动都是等到结束前几天抄攻略的,我发布我做的数据时肯定已经很晚了。所以着急出击期间限定海域的用户要么自己制作数据,要么用别人做好的数据。

以下介绍一下怎么自己制作数据,不爱动手动脑的用户就不需要接着看下去了。整个过程相对旧版(《肝帝模拟》)的改期间限定海域lua的代码简单得多(但不支持旧版那种固定几个连续的点击坐标,至于以后会不会加进去,以后有空我再考虑)。

要告诉程序,如何选择期间限定海域,这涉及到程序的导航模块。支持这个功能的数据保存在data文件夹下的那些json文件里,使用“数据工具”可以修改这些数据,该工具用法见本文相应小节。现在的问题是,这些数据里没有新的期间限定海域的数据,脚本就识别不出来相应的页面。在“数据工具”中,页面在“页面”中定义,我预定义了3个页面(Sortie_SeaEvent_Page1 等),代表期间限定海域的3页。这3页之间的跳转规则我也预定义好了,在“链接”中有形如Sortie_SeaEventPage1ToSeaEventPage2的几项。当然,如果期间限定海域多到有了第4页、第5页的话,需要再照葫芦画瓢再分别添加几项。以上的内容都是我做好了的,一般来说不需要改,要改的是“模板”图片,用于识别图像。“数据工具”切换到“模板”,有形如Sortie_SeaEvent_Page1_A的项目,选中后可以看到详细信息,通常是过往活动的数据。替换data/images下对应文件名的png图片,并修改“阈值”即可。这里的模板要选用能够准确表明页面特征的区域,先截图(注意分辨率是1200*720,无损格式),后用photoshop选中特征区域,反选删除剩余区域并保存成同名png。我选的区域是那一页第一个海域的图片(因为显示一页时第1个海域肯定是开放了的,就省得再做不开放的模板了),并排除了可能会被遮住的区域(翻页按钮、通关等级图标)。我还分了A、B,A是正常情况下的模板、B是鼠标悬停时的模板,任意一个匹配成功就算页面匹配成功,这样可以保证任何情况下都能成功匹配。自用的话单改A就可以了(因为要鼠标悬停时截图需要点技巧,我以前用触摸屏这么截问题不大,后来不用了就写了个python脚本延时截图)。替换模板图片需要关闭“数据工具”,否则文件会被占用,然后需要打开“数据工具”修改对应模板的“阈值”。页面跳转的识别也需要模板,模板名称形如Sortie_SeaEvent_Page2Avaliable,图片是翻页的按钮,不过可能不需要修改。识别页面做完后还要做各个期间限定海域的点选范围,“数据工具”切换到“坐标”,有名称形如Sortie_EventSea_Page1_Area1Button的项目,是我预设的。设置每个海域合适的点击坐标。要注意避开基地航空队按钮和通关后可能会开放的翻页按钮。关闭“数据工具”,来修改最后一个文件,这个文件需要使用文本编辑器修改,建议使用能够高亮json语法的编辑器。打开data文件夹下的ExtraData.json,修改sea.event.area里面的内容。1、2、3…代表E1、E2、E3…,照着以前数据的格式修改page和point字段,告诉脚本这些海域都在哪个页面上,点选的时候点哪。项数不够的自己添加。注意json格式列表最后一项末尾不可以加逗号,改完后保存。然后打开本体就可以开始用了。如果你想发布你修改的数据,你至少需要发布ExtraData.json、Patterns.json、Points.json、images文件夹下替换过的模板图片,如果你还加了其他页面,还需要发布SimplePages.json、SimpleLinks.json,总之就是改了啥发啥。

隐藏设置

简介

程序的部分设置项通常不需要修改,为了让程序界面更清爽,对新手更友好些,所以这些设置项不能在用户界面中修改。需要关闭程序后修改config.json。改的时候要注意格式,是和否用“true”和“false”(不包含引号),字符串用半角引号括起来,之类的。

此外,log.xml是log4net的配置文件,修改它可以改变logger的行为,比如修改log等级(Debug可以看到更多信息、默认Info),修改该文件中的设置不需要重启程序即可生效。详见log4net配置文件指南,本文不再介绍。

设置项

  • LogConfigurationFilePath:log4net配置文件路径,默认是log.xml。
  • EmulatePointerMovement:模拟指针移动。开启后会模拟指针的移动过程,但会增加网络开销。指针“移动速度”设定得过快的话会看不到效果。不开启的话,就是类似于电磁笔的操作模式。
  • MoveAwayPointerAtHomePort:每次返回母港后是否再把指针移走。如果指针悬停在某个按钮上的状态让你看着难受,那就打开这个选项吧。
  • LoopCheckIntervalMilliseconds:内部每循环最小间隔(毫秒)。增大可以减少等待时截图的网络开销,但程序反应会更迟钝。
  • ShowErrorDialog:出现内部错误后是否弹窗提醒。
  • AllowChangeShipSelectorSortMethod:是否允许选择舰船时切换舰船排序方法,允许后选择舰船的鼠标点击次数更少,但计算点击步骤的时间可能会变短或变长。
  • AllowChangeShipSelectorFilter:是否允许选择舰船时切换单个过滤器,允许后选择舰船的鼠标点击次数更少,但计算点击步骤的时间可能会较大幅变短或变长。游戏中仅“编成”功能提供了过滤器。
  • CheckEscortShipBeforeFormation:选择阵型前是否检查伴随舰。启用,选择阵型时如果发现任意伴随舰大破且没带损管,就会报错。该功能是一个防止意外大破进击的保险措施。

数据工具

简述

本程序附带了一个小工具KancollePlayerSimulatorKaiTool.exe,用于修改程序的外部数据。该工具本来是给我自己用的,是以“能用就行”的标准开发的,所以做一些奇怪的操作后会直接挂掉。

点击范围可以在“坐标”里自行调整。UI魔改可以自己在“模板”里替换图片并设置。对于还不能识别的页面,可以参照其他页面分别自行添加。

有些用户那里会发生固定卡在某个页面、或者固定某个页面识别成别的页面。我在制作时图像匹配已经留有了足够的宽容度,即便如此也出现了前述的问题,说明游戏画面和我这里的差别太大,一定是哪里出了问题。使用“数据工具”可以临时解决,需调大或调小对应页面的“模板”阈值。

“数据工具”默认使用本体的网络设置,需要先在本体中设置好。使用时应关闭脚本本体,以避免要修改的文件被占用,“数据工具”关闭后再打开本体。更新本体时,旧的数据可能被覆盖。

坐标

坐标用于定义指针点击范围。数据以归一化的形式保存,而不是以像素保存。

模板

模板用来匹配游戏画面。“模板”中的“阈值”的作用是匹配的差异度高于阈值时匹配失败,多高的阈值会在不应该匹配成功时错误匹配,过低的阈值会匹配失败。选中“搜索最大匹配阈值(单个)”可以自动搜索阈值,过一段时间后会显示在右侧,填入的阈值应该比搜索出来的值略大。要注意的是模板用到的图片一律以游戏原生的1200*720分辨率制作,在匹配更低分辨率或图像质量更差时,合适的阈值会更高,但过高的阈值可能会导致误匹配成功,想要在其他分辨率使用的话需要考虑到这一点。

页面、链接

用于程序的导航模块,这个模块的功能就是识别当前页面、计算如何点击才能进入到指定页面。

页面通过其链接构成有向图,图可以是不完全连通的。页面根据“判断表达式”匹配,判断表达式中的内容是匹配时用到的模板,表达式支持&、|、!、(、)几种运算符。页面可以有父页面,相当于一种继承关系,会继承父页面的匹配条件、链接。

链接是通过一次点击“坐标”,到达另一个页面用到的数据。

 

其他相关内容待后续开发后补完


给高端用户的使用说明

高端用户指理解了本脚本的组成,并使用python完全自由控制脚本执行流程的用户。和“普通用户”的区别在于得写python代码。

最高可以实现长期无人值守完成人能做到的几乎所有玩法。

附加Python脚本

可以将Python脚本附加在任意一个执行单元上,以控制该执行单元的行为。

使用方法是,选中要附加Python脚本的执行单元,点击“设置条件”,在弹出的窗口选中“使用代码”。“内嵌代码”可以让代码随配置一同发布。“外链.py文件”可以复用python代码但不方便对外发布,路径可以使用相对于程序本体所在文件夹的相对路径。使用的Python标准是IronPython2(如果IronPython3正式发布,将会尽快迁移),可以引入该标准兼容的Python库,已经随本体附带了一些标准库。每个Python脚本的执行环境独立,仅在附加的脚本内容更改或者执行单元载入时初始化。附加的脚本的执行环境中有两个预定义的变量,Workflow和Logger。Workflow是脚本被附加的执行单元的实例,可以读写它的所有公开属性和函数(具体执行单元的公开属性可以参考保存配置时的json文件)。Logger是Log4Net中ILog的实例,用法详见其文档。使用本体提供的API需要先引入KancollePlayerSimulatorKaiCore模块,部分功能可能需要引入KancollePlayerSimulatorKai模块(这一部分后续将会调整)。标准输出(print)的内容可以从“关于”选项卡中的“打开控制台输出窗口”功能中看到。

入口函数

程序执行时会查找附加在执行单元上的Python脚本中是否包含指定名称的函数。如果找到了,就会按照下述规则调用。部分执行单元会有专用的入口函数。

  • OnEvent:参数1:Event;返回:bool。用于提供“附加触发条件”功能的支持。接收到一个事件时调用。返回是否触发被依附的执行单元。被依附的执行单元被禁用、默认触发条件已经对事件作出响应、非空闲状态时该函数不会被调用。
  • OnDispose:执行单元被用户点击“删除”时调用。

“在新线程执行脚本文件”

使用该功能可以在一个新线程中运行Python脚本,而不是附加在执行单元上,脚本中可以使用所有API,可以用来控制整个程序运行。该功能在“关于”选项卡中。可以运行多个脚本,需自行管理脚本生命周期。

本体API

见下方API一节。

 

其他相关内容待后续开发后补完


其他信息

本地化

本程序仅提供简体中文版本与简体中文支持。虽然我本人还会英语(美国读研)和日语(N1),但自知水平不怎么样,中译外肯定是不地道的,所以不会推出其他语言版本。

如果你想要翻译本软件,可以直接翻译,不需要我的许可。如果翻译版本用于公开发布,请不要夹带奇怪的私货(如破解、商业广告)。

需要翻译的部分为UI界面和字符串。

UI里的文本是直接写在XAML里的,XAML会被编译成BAML后嵌入到KancollePlayerSimulatorKai.exe的资源中。有很多工具可以提取其中的文本,允许对照翻译并重新编译,如LocBaml

字符串保存在zh-CN文件夹下的资源文件里了(*.resources.dll),使用相应工具翻译并重新编译后放到对应语言的文件夹下即可。

注意:①该程序还在开发阶段,文本内容会经常变化。②因为还在开发,有相当一部分的字符串没有移动到资源文件中,这些字符串你无法提取并翻译。我会在程序稳定后慢慢把这些字符串移动到资源文件中。

开放源代码

计划在程序稳定后开放UI部分的源代码,会用GPL协议。我自知没有前端功底,做的页面也不讲究多美观,也没时间讲究,所以看不惯的会允许自己改。

执行单元的源代码,不打算开源。目前没有独立到单独的库文件中,就在KancollePlayerSimulatorKai.exe里,也没有加密,使用类似ILSpy这种工具可以看到编译过后的代码(和源代码会有些不一样),可以用来写Python时参考内部API的用法。这一部分以后会独立做成一个库文件,要不要加密看情况,出了破解再加,没见到破解就不打算加。

KancollePlayerSimulatorEvolCore和KancollePlayerSimulatorKaiCore不开源,已加密。包含了程序框架,代码量不多。

再次提醒,请不要下载不明来源的本程序,谨防软件被挂木马。以前旧版(《肝帝模拟》)没加壳时,就有人挂了盗号木马发出来,搞得我背了黑锅洗不清,所以我后来加了壳防止程序被修改。至于防破解这事,我其实不是很上心,但请注意公开发布的小众软件的破解经常是另有企图的。


API

程序提供了一些API用于辅助Python脚本执行,它们包含在KancollePlayerSimulatorKaiCore中的一些类中,它们是静态的。

Utility

程序执行相关工具。

  • Groups:只读属性。所有打开的配置的列表。
  • AddTask:参数1:Task。提交一个任务。
  • RaiseEvent:参数1:Event。发出一个事件。

ShipUtility

舰船实例相关的封包数据处理工具。

ShipConstUtility

舰船常量相关的封包数据数据处理工具。

FleetUtility

舰队编成相关的封包数据数据处理工具。

DockingUtility

修复渠相关的封包数据数据处理工具。

EquipmentUtility

装备实例相关的封包数据处理工具。

EquipmentConstUtility

装备常量相关的封包数据数据处理工具。

BasicUtility

游戏账户信息相关的封包数据数据处理工具。

 

其他相关内容待后续开发后补完