Skip to content

About

NOVA 第三方 Tauri 客户端

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

9 Commits

Folders and files

Repository files navigation

NovaLauncher | 星塔旅人启动器

单文件 Rust 工具,替代《星塔旅人》PC 客户端(bilibili 联运渠道,内部代号 NOVA / xtlr_bilibili)的官方启动器。 只做三件事:把游戏本体的登录凭证搬出 %TEMP%、直接启动本体、以及告诉你现在到底有没有可复用的登录票。

✨ 核心特性

以下每条都是官方启动器做不到、或者做错的事:

  • 🔑 凭证不再被清掉:B 站 SDK 把登录票写在 GetTempPath()\gamecache_* 下,Windows 存储感知会随时清理它——"过几天要重登"其实是缓存丢失,不是凭据到期(客户端二进制里没有任何 TTL 常量)。本工具给游戏进程单独设 TMP / TEMP,把整个目录挪到不会被清理的地方
  • 🛡️ 不再被自己的启动器拉起来:本体启动时会派生 "...\StellaSora Game\AntiCheatExpert\ACE-Helper.exe",路径没加引号,目录名里的空格把命令行截断后正好命中同目录的官方启动器。本工具在游戏运行期间以独占句柄按住它,或把它改名禁用
  • 📦 凭证目录可迁移:一键把现有 gamecache_* 复制到你指定的目录并立刻改用。是复制不是移动,填错只损失一点磁盘;历史目录会被记住,换回系统 TEMP 后也找得到那张票
  • 💾 下载前先算账:只读比对包版本,并按「下载 + 解包 + 2 GiB 余量」预检磁盘。官方那种朴素算法会在"余 0.40 GiB"时放行,然后在下到一半写满盘;空间不够时这里下载按钮根本不渲染
  • ⏬ 断点续传:依赖 206 与 Content-Range 续传(GET 的 206 不带 Accept-Ranges),包落在游戏目录旁而不是 %TEMP%;差分包版本不适用时据实标"版本不匹配",而不是让用户白下 5.5 GiB
  • 📂 解包先看计划:只读压缩包目录,报告条目数、顶层结构与会写到哪里。真正写入默认关闭,要过配置开关 + 面板二次确认两道闸
  • 🪟 一个够用的小面板:760×460 无边框窗口,凭证 / 启动 / 更新 / 日志四页,底部三枚 chip 直接给出登录态、启动器占用与游戏进程状态
  • 🔒 可逆:不注入、不改写游戏文件、不碰反作弊。唯一会写游戏目录的动作是"改名禁用",且文件名本身就是状态,一键还原

🛠️ 技术栈

  • 语言:Rust 2021(rust-version = 1.80) / 纯静态 HTML + CSS + JS
  • 框架:Tauri 2(Win11 自带 WebView2 运行时,无需额外安装;bundle.active = false,交付物就是一个 exe)
  • 依赖:serde / serde_json(配置)、rusqlite(bundled,只读探 account.db)、reqwest(blocking + system-proxy,查版本接口)、md5
  • 解包:系统自带 tar.exe(bsdtar / libarchive,实测能读 solid LZMA2 的 7z 容器)
  • 打包:opt-level = "s" + LTO + panic = "abort" + strip → 约 5.4 MB 单文件

📦 构建

需要 Rust(MSVC 工具链,即 Visual Studio Build Tools 的「使用 C++ 的桌面开发」);前端是纯静态文件,不需要 npm / 打包器。

cd src-tauri
cargo build --release
# 产物:src-tauri\target\release\novalauncher.exe

改了 src-tauri/icons/ 下的图标后要 touch src-tauri/build.rs 再编译:tauri-build 不监听 icons/,否则 exe 里嵌的还是旧图标。

⚙️ 使用说明

日常用法:给 novalauncher.exe --start 建一个快捷方式,替代官方启动器的图标。

  • 登录凭证:票在本目录 / 别处 / 已失效一目了然,一键迁移到固定目录,或改回跟随系统 TEMP
  • 启动:官方启动器处置(不处理/主动占用/改名禁用,三者互斥)、游戏路径、启动参数、面板关闭时机
  • 更新:版本检查、磁盘预检、断点续传下载、解包写入计划
  • 日志:SDK 日志 / 游戏日志 / 本面板操作记录,同一视图切换

命令行

novalauncher.exe                        打开面板
novalauncher.exe --start                无界面直接进游戏(进程会一直活着以持有锁)
novalauncher.exe --start --no-wait      启动后立即退出(放弃持锁)
novalauncher.exe --start -- -window-mode borderless -screen-width 1920
                                        -- 之后的参数原样传给 xtlr.exe
novalauncher.exe --migrate D:\MyCache    把现有 gamecache_* 复制进该目录并改用之
novalauncher.exe --status | --config    打印状态 / 解析后的配置 JSON
novalauncher.exe --set-cache-dir D:\Temp --set-game-dir D:\Game --set-launcher D:\L.exe
                                        临时覆盖配置(也会用于本次启动)
novalauncher.exe --set-launcher-mode off|lock|rename
                                        处置官方启动器并写入配置
novalauncher.exe --no-block             本次不处置官方启动器
novalauncher.exe --check-update         查版本接口,打印比对结果 JSON
novalauncher.exe --plan-disk DL UNPACK  预检一个 DL+UNPACK 字节的包需要多少空间
novalauncher.exe --download             下载适用的更新包(可续传)
novalauncher.exe --cancel-download      让正在跑的 --download 停下,保留已下部分
novalauncher.exe --plan-extract         只读压缩包目录,报告写入会发生什么

--set-* 与 --no-block 在任何窗口出现之前生效,所以快捷方式可以直接带配置。

配置

novalauncher.json,就在 exe 旁边(面板里可改路径)。整个文件夹拷走就是全部设置;早期版本放在 %APPDATA%\NovaLauncher\config.json,启动时会自动读一次并搬过来。

{
  "game_dir": "D:\\bilibili Game\\StellaSora\\StellaSora Game",
  "game_exe": "xtlr.exe",
  "official_launcher": "D:\\bilibili Game\\StellaSora\\StellaSora.exe",
  "cache_dir": "",
  "launcher_mode": "lock",
  "allow_update_write": false,
  "close_after_start": false,
  "game_args": [],
  "cache_history": ["D:\\BLGameCache\\Temp"]
}

cache_dir 就是"登录凭证放哪",留空表示跟随系统 %TEMP%,也就是官方启动器的原始行为;只有想躲开存储感知清理时才填一个固定目录。launcher_mode 取 off / lock / rename,旧配置里的 block_official_launcher: true/false 仍然读得进去,分别按 lock / off 解释,老配置不用手改。

📚 说明

本 README 文档由 AI 辅助生成。如有问题,请提交 Issue 或与我联系!

About

NOVA 第三方 Tauri 客户端

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages