使用说明 - KanaHayama/KanCollePlayerSimulator GitHub Wiki

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


给新手用户的使用说明

新手用户指刚接触本脚本,仅使用最基本的“基础远征”执行单元,实现简单自动远征的用户。

安装

本程序分两部分,浏览器插件和本体。

浏览器插件

使用前必须安装浏览器插件。注意,这里说的是浏览器的插件,而不是浏览器自身。浏览器插件用于协助脚本操作游戏。请根据自己使用的舰C专用浏览器选择插件。

  • 我仅开发了poi浏览器的插件。该插件详细内容及安装方法见→这里。(该插件开源于Github。本体稳定前我自己不会主动开发其他浏览器的插件,如果你急用可以对照这个自己开发。)
  • 有热心用户贡献了74EO 拡張版用的插件。该插件详细内容及安装方法见→这里使用体验与poi版插件有一些差别,包括但不限于不同的报错内容,导致无法参考《已知问题与FAQ》,因此新用户请谨慎选择本插件。了解KCPS调性的老用户的话可以试试,这插件还是很好用的。

浏览器选择:我主要用poi,所以会依据poi开发。我的理解是,poi的优势是功能全、操作简单;74EO的优势是资源占用少、定制化能力强、可以多开。

相关提示:

  • poi和74EO最小化后会停止渲染游戏画面,所以使用期间游戏不可以最小化,嫌碍事的话可把游戏窗口放到虚拟桌面里(win10 称此功能为Task View)。

本体

zip压缩包解压到任意文件夹。运行KancollePlayerSimulatorKaiDesktop.exe即可使用。

如果你尝试启动程序却没有反应或者弹出一个全是英语的窗口,则说明该电脑没有安装本程序要求的最低.net 8运行环境。那么需要在这里下载Run desktop apps下的Download x64安装包,安装后再启动程序。若安装失败请打完系统补丁后再试。

远征

自动远征很简单,只要照着以下步骤做就可以了。

  • 切换到程序最左侧显示的“功能”选项卡,选中“配置”中的“默认配置”,可以看到右侧已经有了一个名为“基础远征”的执行单元。
  • 因为每个“基础远征”执行单元仅负责收发一个舰队的远征,有3个远征舰队就需要3个“基础远征”执行单元。点击“执行单元”下方的“添加”按钮会弹出窗口让你选择要添加的执行单元类型。多次选中并添加“基础远征”执行单元。
  • 分别设置这几个“基础远征”执行单元。只设置舰队号和远征号就行了,其他的选项不用管。
  • 设置好后“触发”执行单元才会开始执行,对于“基础远征”,直接点下方的“全部启用”就大功告成了(这么做可行是因为“启用执行单元时立即触发”选项默认是勾上的)。

做到这里已经可以自动远征了。如果遇到了问题,请查阅《已知问题与FAQ》。对于第一次使用本程序的用户,强烈不建议立即尝试后续内容。


给普通用户的使用说明

因为加图片有点麻烦,所以该文章目前没有图片,以后我有空会加上。文字叙述已经足够清楚,阅读需要耐心。

普通用户指理解了本脚本的设计,并能灵活组合已有执行单元以实现一定程度自定义执行流程的用户。用对本程序的简单操作替换大部分对游戏的单调操作。

注册

试用版本可以使用几乎所有的功能。 是真的,这么设计是为了让更多人免受游戏无聊部分的折磨,我最初也是实在被恶心到了才做的这个软件。 使用注册码(需购买)后可解锁仅有的两个付费功能:①可(自动和手动)存取配置;②不限制单次启动运行时间。利用存取配置功能,一次配置重复使用,一键启动既定流程,后续可以省下大量脑力和时间。此外还可以载入我提供的“范例配置”极大地降低使用本程序的心智负担,甚至连配舰队都可以是全自动的,你要做的只是读取这些配置。读取配置按钮在注册后才会显示。

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

注册后,软件设置(包括注册码)保存在config.json文件中;未关闭的配置保存在default.json文件中。更新本体时保留这两个文件可以避免重新设置,也可以采用直接解压覆盖的方法更新程序。

这一代脚本的注册码改为购买时长模式,可以换电脑登录。不会再有买断模式,因为自由登录需要服务器支持,而注册服务器是月租的,我不可能永远租下去。PayPal付款请邮件联系[email protected]。接受任意币种,参考价格为淘宝价格120%(含手续费、人工费),实时汇率。建议使用淘宝购买。只提供90天注册码且不可以累积时长,这是考虑到:本程序的开发受游戏本身限制,我不吹牛,所以不会做永远可用的保证。预付费时长越短我的违约风险和损害就越小,但用户用起来会麻烦,需要权衡。

出击

出击是舰C的关键环节,由于过程中有很多细节,为了尽可能满足各种用户的需求,过程中会有极大量的设置项。为了不一下子给刚接触本程序的用户过大的心智负担,出击的设置方法并没有包含在上方给新手的使用说明中。直接载入范例配置可以免去此处复杂的设置过程。此处给出最基本的出击的设定方式:

  • 点击“配置”框中的“新建”按钮,新建一个配置。 此时增加了一个名为“未命名配置”的配置,你可以修改它的名称。本程序中,“配置”用于组织用户定义的一批工作流程。付费开通存取配置功能后可以通过保存和读取配置复用用户定义的流程。
  • 选中该配置,点击右侧“执行单元”框下方的“添加”按钮,会弹出“选择执行单元类型”窗口。 此窗口列出了本程序目前可用的各种执行单元。每个执行单元用于执行某项具体的功能。每种执行单元都有自己的设置项,可在添加后设置。一个配置由一个或多个执行单元组成。可以看到执行单元的名称主要有“关联××”、“基础××”、“单次××”、“串联××”,每类的区别会在本文后续给出解释,目前并不需要关注。
  • 选中窗口中名为“关联出击”的项目,点击下方“确认”按钮(也可直接双击该项目)。 此时配置中添加了一个类型为“关联出击”的执行单元。若要在本程序中设置出击配置,必须要有一个“关联出击”执行单元。此执行单元用于组合数个“基础××”执行单元,实现一套出击流程。此“关联出击”执行单元在添加后默认被选中,程序右侧显示了它的设置项。设置项分为三组,最上方的“启用”选框和中间的“触发条件”框是每个执行单元的设置中都有的。而下方“设置”框里的才是被选中执行单元独有的设置项。可以看到“关联出击”设置中有一套①②③④......的选项卡。每一个选项卡代表了一次出击过程中的一个步骤,接下来你只需要设置你需要的步骤,不需要的可以不用管。执行完一次该顺序的所有步骤称作一个循环。其中“⑨出击”这个步骤指去某个海域,它之前的步骤可以看做每次出击前的整备步骤,它之后的步骤就是每次出击后回来的整备步骤。
  • 再次点击“添加”按钮,在弹出的窗口中(按住Ctrl键)多选“基础补给舰队”、“基础入渠”、“基础编成舰队”、“基础变更装备”、“单次出击”几项,然后点击下方“确认”按钮。 可以看见这几种执行单元都被加入到了配置中。为了不搞得太复杂,本次设置只设置几个常用的步骤,刚刚添加的几种执行单元就是用来执行每个步骤的。
  • 选中此配置中之前添加的那个“关联出击”执行单元,点击“④编成”选项卡,点击选项卡下方出现的“添加”按钮,在弹出的窗口中双击“基础编成舰队”项目。 这一步操作的目的是将刚刚添加的那个“基础编成舰队”执行单元“关联”到“④编成”这个出击步骤中。即当“关联出击”执行单元执行到步骤“④编成”时,会去执行那个“基础编成舰队”执行单元。
  • 点击“⑤入渠”选项卡,点击下方出现的“添加”按钮,在弹出的窗口中双击“基础入渠”项目。
  • 点击“⑥改装”选项卡,点击下方出现的“添加”按钮,在弹出的窗口中双击“基础变更装备”项目。
  • 点击“⑧补给”选项卡,点击下方出现的“添加”按钮,在弹出的窗口中双击“基础补给舰队”项目。
  • 点击“⑨出击”选项卡,点击下方出现的“浏览”按钮,在弹出的窗口中双击“单次出击”项目。 因为“⑨出击”只允许关联一个执行单元,所以设置窗口和之前几项长得不一样。
  • 假设要出击的是1-1,请手动在游戏中的第一舰队配置好舰队编成以及舰船装备。 因为之后要把这些信息录入到本程序中。录入后以后再运行此配置时会自动恢复舰队编成和装备。如果不需要恢复舰队和装备(即出击前和出击过程中这些内容不会被打乱,而且你也不想复用这个配置)的话,“基础编成舰队”和“基础变更装备”这两个执行单元其实就是没有必要的,但本教程中包含了这两项,因为它们在付费用户使用过程中确实很常用。
  • 选中“基础编成舰队”执行单元,点击出现的“载入第1舰队”按钮。 你可以看到下方出现了大量的设置项可以修改,因为此教学教的是最基本的固定舰队设置方法,所以你并不需要管那些设置。但如果你需要自动换船,你就需要去研究下方的设置内容了。
  • 选中“基础变更装备”执行单元,点击出现的“追加第1舰队当前的装备”按钮。 同样的,下方出现的各种设置项并不需要修改,但在需要自动配置装备时需要设置。
  • 选中“基础入渠”执行单元,选中“限定舰队”复选框,选中“限定剩余血量”复选框,将右侧出现的“100.0%”改为“25”。勾选下方“强制入渠”和“使用高速修复”复选框。 默认的“单次出击”执行单元设置中,如果出击前发现舰队中有大破的船会拒绝出击并报错,上述设置可以保证出击前的大破船都被高速修复。
  • 选中“单次出击”执行单元,可以看到当前海域设定的是1-1,选中出现的“出击中”选项卡,将显示为“手动选择”的那几项设置为各自合适的值。 留着“手动选择”不改的话,会在运行到对应步骤时等待用户手动在游戏中做出选择,可以实现半自动出击。因为此处只教最最基础的出击设置方法,所以现在不讨论更复杂的针对不同战斗点设置不同的阵型、入夜等设置。选中“显示所有设置项”复选框,可以看到额外的平时不常用的选项。基地航空队、支援远征、分歧点选择这些和海域相关的选项,在设置了需要它们的海域后才会显示。
  • 选中“关联出击”执行单元,选中“⑰循环”选项卡,修改“执行1个循环后停止”为3个循环。 “⑰循环”选项卡还有一些其他设置项,超出了此教学讨论范围,此处不讨论。
  • 选中“关联出击”执行单元,点击右侧上方的“立即触发”按钮,就会开始连续出击。 点击“立即触发”才是手动启动一个执行单元的方法,之前远征设置教程中可以使用“全部启用”开始执行是因为“启用时立即触发”选项被选中。
  • 如果遇到了问题,请查阅《已知问题与FAQ》。
  • 如需在当前出击循环后停止出击,可以选中“本次循环结束后自动停止”复选框,如需立即停止执行,可以点击“全部禁用”按钮。
  • 请及时保存配置。更复杂的设置,请参考范例配置。设置配置时,建议在范例配置的基础上修改。 我经常能遇到有用户所有配置都是自己根据上面这些步骤做的,废了很多精力做出来发现效果或者效率远不如范例配置。比如制作出击活动海域的配置,用户自己做的配置经常就记不得去实现出击返回后把陆航翻牌到休息。

对于以上步骤抽象的解释:

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

执行单元:

执行单元是“配置”的基本组成部分。每种单元实现某个功能。

执行单元主要分为以下几种:

  • “关联××”:配合其他执行单元,共同实现指定功能的一类执行单元。对于某个功能,它可以给出一个流程框架,这个框架可以起到胶水的作用把各个环节细小琐碎的功能组成部分结合起来。“关联”就是这里起到结合效果的动作。
  • “基础××”:对应游戏中基本的功能单元,可以完整执行对应游戏中的功能。不过在大多数情况下,这些功能只是出击或远征的一个环节,单独使用意义不大。
  • “单次××”:单次执行某个功能。除了个别的几个外,一般来说根本用不到。和“基础××”的区别在于,它只是机械地去执行一个功能,不会去管执行成功或是失败,没有内部复杂的状态转换。这其实就是把底层“组件”暴露出来的接口简单包装一下而已。很多用不到也做出来了是因为觉得这样简单直接暴露属性的执行单元方便附加Python脚本直接修改。
  • “串联××”:关联其他执行单元,并有条件地执行被关联的执行单元。可以起到根据条件控制执行流程的作用。

使用建议

  • 设置好的配置记得手动“另存”一下。建议用到哪个配置“打开”哪个配置,配置用完了就“关闭”。这样做的好处有,①看着清爽②不会因设置不规范导致配置间误触发③可以随时根据需求在已保存配置的基础上修改某些设置而不用记得用完改回来
  • 每天停止操作大概6-8个小时,否则容易被发猫。可以通过设置(“关联××”执行单元中的设置,或定时类执行单元)实现自动停止和自动开始。
  • “限制多核加速并行度”选项,最高建议设置到CPU核心数(不含超线程出来的核心),最低就是1。程序里没法判断哪些核心是超线程出来的,所以超线程出来的假的核也会当成真的核用上,结果就是导致电脑卡顿,表现就是游戏画面明显有卡顿感。

进阶远征和出击

刷闪

刷闪涉及到游戏几乎全部的功能。相比于前面基本的出击配置,至少需要加入“基础编成舰队”执行单元来实现自动换船。要注意正确设置换船的条件,比如旗舰只换上士气不够的船。

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

控制远征流程

使用“关联远征“可以详细控制远征的各个步骤如何实现。比如“范例配置”中就有几个没闪就自动停止远征的远征配置。

远征队自动补闪

范例配置中已有此类配置,如有需要请自行取用并举一反三,下面解释设置原理。

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

同舰队多目标出击

本脚本支持同时运行多个出击配置。 使用关联出击/远征执行单元的“循环内独占执行”功能(默认启用)穿插使用一个舰队出击也不会冲突,可以最大化利用等待疲劳恢复的时间。 每个配置请设置好出击前编成执行单元,因为其他执行单元可能把舰队配置改掉,所以出击前得确保改回来。

期间限定海域

要让脚本支持选取期间限定海域,需要额外向脚本提供一些有关期间限定海域的信息。这些信息每次都会变,所以每次活动都要适配过后才能出击活动图。

因为我要保持全甲记录,所以这些数据我自己肯定会做出来然后自动打活动,所以既然做了自然会发布出来。但由于我每次活动都是等到结束前几天抄攻略的,又因为等到我推到最后一张海图时才能获得全部的画面截图等信息,然后才能发布,所以等我发布出来你才进场的话肯定是来不及的。所以不要等我发布这个数据,着急出击期间限定海域的用户要么自己制作数据,要么找别人做好的数据。

以下介绍一下怎么自己制作数据,不爱动手动脑的用户就不需要接着看下去了。有的时候开荒的大佬推完全图后愿意借给我账号采集数据的话,常规规模的活动我20分钟就能完成以下步骤,如果做的粗糙一点能用就行的话可以更快完成。当然活动海域是一张一张地开的,所以你要是自己做这个数据自己用的话,每次只需要改一点,直到改到打到活动最后一张图。

  1. 打开“数据工具”切换到“模板”,能看到有形如Sortie_SeaEvent_Page1_A的项目,选中后可以看到详细信息,通常是过往活动的数据。注意这里Page几指的是活动海域第几页而不是E几,比如第一页可能会包含E1到E3。记下所有需要改动的模板图片对应的图片文件文件名后,关闭“数据工具”(否则文件会被占用导致报错),替换data/images下对应文件名的png图片,打开“数据工具”并修改对应项的“阈值”即可。友情提示:①后续步骤中有要求替换其他模板图片,你可以一并替换,避免反复开关“数据工具”。②这里的“阈值”其实不用取得像我一般弄得那样精确,在理解意义的基础上随意写个够用就行了。③这里的模板要选用能够准确表明页面特征的区域,先截图(要求截图分辨率1200*720,建议截无损格式),后用photoshop选中特征区域,反选删除剩余区域并保存成同名png文件。④我通常选的区域是那一页第一个海域的背景,并避开了可能后续会被遮住的区域(翻页按钮、通关等级勋章图标)。⑤你可以看到有_A和_B两种模板,_A是正常情况下的模板、_B是鼠标悬停时按钮高亮状态的模板,我将它们设置为任意一个匹配成功就算页面匹配成功,这样可以保证任何情况下都能成功匹配。自用的话单改_A就够用了。
  2. 页面跳转的识别也需要模板,模板名称形如Sortie_SeaEvent_Page2Avaliable,图片是翻页的按钮。比如这里Page2Avaliable指的是开出了位于第二页的海域,所以第一页多了个翻到第二页的按钮,你就截完后取那个按钮就可以了。因为每一页的翻页按钮都不一样,所以每个都要替换图片并修改阈值。
  3. 除此之外模板Sortie_SeaEvent_E1Reminder(E1大淀介绍整个活动的小黑板)每次活动也会变,也要替换和改阈值。
  4. 识别页面做完后还要做各个期间限定海域的点选范围。“数据工具”切换到“坐标”,有名称形如Sortie_EventSea_Page1_Area1Button的条目,用来指定各个海域的点击范围。注意这里Area1、2、3指的是这个Page几页面中的第几个海域,而不是整个活动的第几个海域。你要用鼠标框选每个海域合适的点击坐标范围。要注意避开基地航空队按钮和海域通关后可能会开放的翻页按钮。
  5. 关闭“数据工具”,来修改最后一个文件,这个文件需要使用文本编辑器修改,建议使用能够高亮json语法的编辑器(比如notepad++)。打开data/extra/event.json,修改area里面的内容。1、2、3…代表E1、E2、E3…,照着以前数据的格式修改page和point字段,告诉脚本这些海域都在哪个页面上,点选的时候点哪。项数不够的自己添加。注意json格式列表最后一项末尾不可以加逗号,所有标点使用半角符号,改完后保存。
  6. 然后打开程序本体就可以开始用了。
  7. 如果你想发布你修改的数据,你至少需要发布data/extra/event.json、patterns.json、points.json、images文件夹下替换过的模板图片。

做任务

请参考相关范例配置

演习

请参考相关范例配置

架构

简述

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

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

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

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

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

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

触发条件

简述

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

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

配置间联动

关联执行单元仅允许关联本配置内的执行单元,做这一限制是为了保证“配置”能独立使用,避免用户滥用造成混乱。假设已有配置A和配置B,想让配置A执行完后自动开始配置B。当然,把配置A和配置B合并成1个配置,然后关联起来是一种方案,但看起来会有些乱。以下介绍使用“触发条件”功能如何实现配置间联动。

在配置A里加入一个“单次发出用户事件”的执行单元,在“事件附带消息”里随便写点什么东西,设置关联让配置A执行完后触发这个执行单元。然后再改配置B,选中配置B中要联动的执行单元,选择“设置脚本”-“使用模板”-“添加要响应的事件”-“UserEvent”-勾选“匹配事件信息”并填上之前随便写的一样的内容-“确认”-“确认”-“启用”,这样就设置完成了配置A和配置B的联动。注意重新启动程序后联动虽然不用全部重新设置,但需要“启用”被联动的那些执行单元。因为启动程序后所有执行单元默认不启用,不启用执行单元,该执行单元就不会去接收事件。

可以这样达到联动的目的是因为,附加在执行单元上的Python脚本发现收到的事件是正在关注的事件后会触发该执行单元自身。事件是全局的,不受配置限制,所以可以做到跨配置触发。同理你也可以设置一对多(比如一个配置放总开关,其他配置都响应这个总开关发出的事件),或者可以自己编写Python脚本做出更复杂联动的功能(可以利用各种库和脚本API做出判断还可以实时修改执行单元的设置)。

如果你要保存联动的几个配置,可以按住Ctrl选中多个配置,然后点击“另存”按钮,这样可以把多个配置存成一个文件。建议给相互联动的配置起名字时遵循一定格式,方便自己辨识。

数据工具

简述

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

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

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

“数据工具”默认使用本体的各项设置(如网络设置),需要先在本体中设置好。 数据工具中做出的修改可以实时反映到本体的执行中。

data/extra/子目录下有linkspagespatternspoints几个文件夹,放入这几个文件夹中的数据项会覆盖最基本的data/文件夹下几个JSON文件的设定。 对于有定制化需求的用户,使用这些文件夹存放数据可以避免更新后被默认数据覆盖。

坐标

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

模板

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

页面、链接

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

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

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

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


给高端用户的使用说明

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

(开发目标是)最高可以实现长期无人值守完成人能做到的几乎所有玩法。

附加Python脚本

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

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

入口点

有的执行单元的设置项中允许指定一个附加python脚本中的函数,此时填入遵循指定调用约定的函数可以在相应的位置调用函数。 还有一些入口点的名称是给定的,程序执行时会查找附加在执行单元上的Python脚本中是否包含指定名称的函数。如果找到了,就会按照下述规则调用。部分执行单元会有专用的入口函数。

  • OnEvent:参数1:Event-收到的事件;返回:bool。用于提供“附加触发条件”功能的支持。接收到一个事件时调用。返回是否触发被依附的执行单元。被依附的执行单元被禁用、默认触发条件已经对事件作出响应、非空闲状态时该函数不会被调用。
  • OnFilterEvent: 参数1: Event-收到的事件;返回:bool。用于在执行单元处理事件前决定是否把事件交由执行单元处理。返回False时事件不会被处理,返回其他值时不会对执行流程造成影响。
  • OnEnabled:被附加的执行单元被启用后调用。
  • OnDisabled:被附加的执行单元被禁用后调用。
  • OnPropertyChanged:参数1:String-改变了的属性的名称。被附加的执行单元的属性变化后调用。
  • OnProcess:被附加的执行单元被触发后实际执行执行单元的逻辑之前调用。
  • OnDispose:执行单元被用户点击“删除”时调用。
  • OnAutoStop(关联远征/出击):返回:bool。每循环结束前调用,用于返回本循环是否要自动停止。
  • OnAutoStopped(关联远征/出击):自动停止后调用。
  • OnSetTimer(关联出击):参数1:int-按照设定本次循环应当等待的秒数;返回:int-你想要设置的本循环等待的秒数。用于灵活设定等待时长。
  • OnCandidate(基础编成舰队):每次挑选编成前调用。
  • OnRenderUserControl(自定义):被附加的执行单元需要显示用户控件时调用,返回WPF的UserControl对象。用这个函数实现自定义执行单元的用户界面。

独立Python脚本

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

命令行选项

  • --script 可指定多个独立Python脚本的文件名,程序启动时会自动在后台执行

本体API

《API》一文。


其他信息

本地化

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

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

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

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

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

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

开放源代码

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

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

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

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