KanColleCacher.dll为网页游戏「舰队Collection」的工具程序「提督很忙!」(KanColleViewer,即KCV)的扩展插件。
KanColleCacher提供了在IE缓存外额外保存文件的功能(本地缓存)。 这一功能可以在一定程度上加快游戏加载速度, 并在此基础上支持魔改文件的使用。
###本地缓存
本地缓存是KanColleCacher提供的主要功能。
当IE缓存被清除后,客户端将重新从服务器下载游戏所需的文件。 KanColleCacher会在客户端向服务器请求文件之前,检查插件保存文件的“缓存文件夹”中是否存在相应的文件。
- 若文件存在且有效,则直接向客户端返回缓存文件夹中的文件,因此不需要再次下载文件。
- 若文件不存在,则客户端将下载文件,KanColleCacher将在文件下载完成后额外保存到缓存文件夹中。
###文件验证
游戏会不定期更新,更新后若客户端仍使用旧的缓存文件,则会使游戏发生异常。 为了避免出现这种情况,插件需要在返回缓存文件前对文件进行验证。
文件验证针对的是SWF文件,只有这类文件会导致游戏无法进行,并且游戏官方似乎并不会更新其他文件
文件验证功能可以通过设置开启或关闭。
- 目前KanColleCacher.dll为v2.1.0,
- 支持KanColleViewer v3.3\v3.4\v3.6,
- 理论上不支持3.0以前的KCV,
- 不确定是否支持其他版本的KCV。
- 使用MIT开源协议发布。
- 将KanColleCacher.dll复制到KanColleViewer程序文件夹中的Plugins子文件夹中
- 启动KanColleViewer
- 启动KanColleViewer并进入游戏模后
- 点击「工具」页面的「缓存工具」标签页以显示缓存工具的设置页面
- 在「缓存文件夹」标签后的文本框中输入文件夹绝对地址。
- 或者在启动KanColleViewer前
- 在设置文件
KCV文件夹\Plugins\KanColleCacher.ini
中 - 或在文件
%AppData%\grabacr.net\KanColleViewer\KanColleCacher.ini
中 - 设置
CacheFolder
选项为缓存文件夹的绝对地址。
- 在设置文件
注意:
旧文件夹中的文件并不会被移动到新文件夹中;
新的文件夹地址将在下次KanColleViewer启动时生效。
除了这个插件外还有其他的工具提供本地缓存的功能,例如岛风Go。
插件可以使用这些其他工具保存的缓存,但是(待续)
###本地缓存
插件将在浏览器下载游戏文件后,将文件额外保存到缓存文件夹中。
文件的保存位置为:`[缓存文件夹] \ [文件URL的路径]`
例如:`E:\KanColleViewer\MyCache\kcs\scenes\TitleMain.swf`
缓存功能可以通过设置「启用缓存」(`<CacheEnabled>`)来启用或禁用。
###指定缓存文件夹
缓存文件夹的默认位置为KanColleViewer程序文件夹中的MyCache子文件夹。
当文件夹不存在时自动创建文件夹。
可以通过设置「缓存文件夹」(`<CacheFolder>`)来指定缓存文件夹。
注意:
文件夹地址应当设置绝对地址;
旧文件夹中的文件并不会被移动到新文件夹中;
新的地址将在KanColleViewer下次启动时生效。
###文件分类与筛选
KanColleViewer在设置中将游戏文件分为6类:
- 入口文件:在游戏加载前,可能与用户和初始化有关的文件,包括Core.swf, mainD2.swf。
- 载入文件:在出现GameStart按钮之前载入的文件,包括commonAsset.swf, font.swf, TitleMain.swf。
- 界面文件:在按下GameStart按钮后到母港出现前载入的文件,包括PortMain.swf, sound_se.swf。
- 场景文件
- 资源文件
- 声音文件
###Hack规则
###服务器图标与标题音效的规则
###文件版本校验
###Fiddler Fiddler是KanColleViewer内嵌浏览器的代理器,KanColleViewer通过Fiddler收集游戏信息。 KanColleCacher同样通过Fiddler来实现。
###会话 每一次KanColleViewer向游戏服务器请求数据或下载文件都是一次会话。 会话流程如下:
客户端
↓ 发送请求
Fiddler
↓ 发送请求
服务器
↓ 返回数据
Fiddler
↓ 返回数据
客户端
###Fiddler规则 缓存工具共在三处添加了规则:
####BeforeRequest 客户端向Fiddler发送请求后,Fiddler向服务器发送请求前执行的规则:
这是一个下载请求?
↓ →否,继续向服务器发送请求
插件缓存包含了请求的文件?
↓ →否,继续向服务器发送请求(新的文件的下载)
这个文件需要进行验证?
↓ →否,不再向服务器发送请求,直接由Fiddler返回缓存中的文件
将客户端的下载请求修改为文件验证请求, 验证缓存中的文件是否为最新文件。 若文件为最新的,则服务器将返回304代码;否则返回200代码与新文件。
####BeforeResponse 服务器向Fiddler返回数据后,Fiddler向客户端返回数据前:
服务器返回304代码?
↓ →否,继续向客户端返回数据
缓存文件为最新可用的文件。 将服务器返回的信息修改为200代码与缓存文件。
####AfterSessionComplete 整个会话结束后
服务器返回200代码?(完成了一个下载会话?)
↓ →否,忽略
这是服务器返回的200代码,而非插件修改的200代码?
↓ →否,忽略
刚刚下载了一个新的文件。 将新文件保存到缓存文件夹中,并返回的Last-Modified信息写入到缓存文件的最后修改时间中。