2026-09-11 20:47:20
一个多语言的生存战争(SurvivalCraft)社区网站,提供游戏资源下载、联机服务器信息、Mod 开发工具、社区交流等功能。
src/
mod.json
web
live-server
克隆项目
git clone https://cnb.cool/SurvivalcraftTool/scweb.git cd scweb
启动开发服务器
src/ 是纯静态站点,任选一种方式即可(在 src 目录下执行):
src
cd src python -m http.server 8000 # 最简(无 Range 请求 / 无缓存控制) python tools/serve.py 8000 # 推荐:自带脚本,支持 Range(HTTP 206) + 禁用缓存 + 多线程 npx live-server --port=8000 # 自动刷新
Windows 下可双击以下脚本一键启动:
src/用Npm启动开发服务器.bat
npx live-server
src/用Python启动开发服务器.bat
python tools/serve.py 8000
src/扫描BGM目录.bat
上面三个是纯静态服务:只托管页面,不连数据库、不加载 mod。需要后端能力时见下一节。
访问网站
http://localhost:8000
http://localhost:8000/online_server.html
http://localhost:8000/dashboard.html
http://localhost:8000/about.html
http://localhost:8000/mod-dev-kit.html
http://localhost:8000/mesh-reader.html
静态服务器打开时是 web 模式(只读,导航读 src/scweb_res/nav/nav-default.js)。 要让导航与站点设置能在页面上登录、编辑、导入导出,并支持「同步到静态文件」,需要启动 src/server 下的后端:
src/scweb_res/nav/nav-default.js
src/server
cd src/server npm install npm start # 监听 127.0.0.1:8000,同时托管 src/ 与 /api/*,并加载已启用的 mod
Windows 下也可以直接双击 src/启动主页(带数据库).bat(自动装依赖并打开浏览器); 要同时打开主页与导航站,双击 src/启动双数据库.bat 即可 —— 两者启动的是同一个后端进程。
src/启动主页(带数据库).bat
src/启动双数据库.bat
src/server/config.json
127.0.0.1:8000
127.0.0.1:3306
root / root
scweb
admin / admin
server/
key/
.github/workflows/static.yml
scweb/ ├── src/ # 纯静态站点(可直接部署) │ ├── index.html # 首页 │ ├── online_server.html # 联机服务器列表 │ ├── dashboard.html # 信息仪表板 │ ├── about.html # 关于我们 │ ├── mod-dev-kit.html # Mod 开发工具包 │ ├── mesh-reader.html # 模型 Mesh 读取器 │ ├── site-config.js # 站点出厂默认(BGM / 看板娘 / 主题 / 导航来源) │ ├── proxy.php # API 代理(解决跨域,CORS 回退) │ ├── bgm/ # 背景音乐(多文件夹) │ │ ├── bgm-manifest.json # 自动生成的音乐清单 │ │ └── AlbumName/ # 每个子目录 = 一张专辑 │ │ ├── cover.jpg # 专辑封面 │ │ └── *.mp3 # 音乐文件 │ ├── live2d/ # Live2D 看板娘(本地部署) │ │ ├── autoload.js # 入口(配置 + 编排) │ │ ├── waifu.css / waifu-tips.js # 核心资源 │ │ └── chunk/ # 渲染器模块 │ ├── tools/ # 开发/构建脚本(非页面) │ │ ├── bgm-scan.mjs # BGM 目录扫描器(Node.js) │ │ └── serve.py # 开发服务器(Python,支持 Range) │ ├── downloads/ # 下载资源 │ ├── error/ # HTTP 错误页面(400-510) │ ├── sczz/ # 生存战争相关资料 │ ├── scweb_res/ # 静态资源(按页面 / 共享分组) │ │ ├── shared/ │ │ │ ├── css/ │ │ │ │ ├── base.css # 基础样式 │ │ │ │ ├── grid.css # 网格系统 │ │ │ │ ├── components.css # 组件样式 │ │ │ │ ├── layout.css # 布局样式 │ │ │ │ ├── theme.css # 四主题变量 │ │ │ │ ├── nav-editor.css # 导航编辑器样式 │ │ │ │ └── bgm-player.css # BGM 播放器样式(四主题) │ │ │ └── js/ │ │ │ ├── app.js # 组合根 SCApp(创建并注入各管理器) │ │ │ ├── utils.js # 通用工具 SCUtils(含统一接口基路径) │ │ │ ├── toast.js # 轻提示 SCToast │ │ │ ├── dropdown-manager.js # 下拉菜单互斥管理器 │ │ │ ├── theme-manager.js # 主题管理器 │ │ │ ├── language-manager.js # 语言管理器 │ │ │ ├── site-language-config.js # 站点级语言配置 │ │ │ ├── site-info.js # 站点信息(标题/描述,依赖语言管理器) │ │ │ ├── analytics.js # 百度统计 │ │ │ ├── bgm-player.js # BGM 播放器(Player/Store/Audio/UI) │ │ │ ├── settings-store.js # 站点设置数据层(个人 / 全局) │ │ │ ├── settings-manager.js # ⚙️ 设置下拉界面 │ │ │ ├── account-manager.js # 账号面板(登录 / 退出 / 改密) │ │ │ ├── nav-api.js # 导航后端接口封装 │ │ │ ├── nav-store.js # 导航数据层(web / db 双来源) │ │ │ ├── nav-render.js # 导航渲染 │ │ │ ├── nav-panel.js # 导航数据面板 │ │ │ └── nav-editor.js # 导航可视化编辑器 │ │ ├── nav/ │ │ │ └── nav-default.js # 默认导航数据(web 模式数据源,由后端导出) │ │ ├── index/ # 首页专用(脚本 / 语言 / 样式) │ │ ├── about/ # 关于页专用 │ │ ├── online_server/ # 联机服务器专用(API/缓存/延迟/列表视图/工具) │ │ ├── dashboard/ # 信息仪表板专用 │ │ └── tools/ │ │ ├── mesh-reader/ # Mesh 读取器脚本 / 样式 │ │ └── mod-dev-kit/ # Mod 工具包脚本 / 样式 │ ├── yylmzxcweb/ # mod:YYLMZXC 导航站(自带前端 + 可选后端) │ │ ├── mod.json # mod 清单(名称 / 入口 / 接口前缀 / 默认开关) │ │ ├── yylmzxc.html # 导航站页面 │ │ ├── res/ # 页面资源(脚本 / 样式 / 出厂数据 / 上传图片) │ │ └── server/ # mod 后端(独立运行入口 + 接口 + 数据层) │ ├── server/ # 后端:静态托管 + /api/* + MySQL 持久化 + mod 加载 │ │ ├── server.js # Express 入口与 /api/* 路由 │ │ ├── mods.js # mod 加载器(扫描 mod.json,把 mod 后端挂进本进程) │ │ ├── db.js # MySQL 连接池 │ │ ├── account.js # 登录 / 会话 / 改密 │ │ ├── settings.js # 站点设置(site_settings 表) │ │ ├── sitenav.js # 站点导航(读写 + 同步到静态文件) │ │ ├── config.js / config.json # 服务端口、数据库、账号、mod 开关 │ │ └── package.json │ ├── 用Npm启动开发服务器.bat # Windows 一键启动(npx live-server) │ ├── 用Python启动开发服务器.bat # Windows 一键启动(serve.py) │ ├── 启动主页(带数据库).bat # 启动主页 + 后端(MySQL,并加载 mod) │ ├── 启动双数据库.bat # 同上,并额外打开导航站(库:scweb + yylmzxc_nav) │ └── 扫描BGM目录.bat # BGM 目录扫描脚本 └── README.md
无构建、无框架:<script> 按顺序加载,各模块挂到 window 上,由组合根 SCApp.create() 统一装配并注入依赖。
<script>
window
SCApp.create()
SCApp.create() ← 组合根:创建并注入各管理器(app.js) ├── DropdownManager ← 下拉菜单互斥(主题 / 语言 / 设置共用一个开合逻辑) ├── ThemeManager ← 主题切换(localStorage 持久化) ├── LanguageManager ← 四语言切换 ├── SiteInfoManager ← 站点信息(依赖 LanguageManager) ├── SettingsStore ← 站点设置数据层:个人覆盖 > 全局值 > site-config.js 默认 ├── SettingsManager ← ⚙️ 设置下拉(含导航数据面板、账号分区) ├── AccountManager ← 登录 / 退出 / 改密(会话由 HttpOnly Cookie 承载) └── NavStore ← 导航数据:web(静态文件,只读)/ db(数据库,可编辑) ├── NavApi ← 后端接口封装(含统一基路径) ├── NavRender ← 渲染到页面 ├── NavPanel ← 面板状态与入口 └── NavEditor ← 可视化编辑
设计约定:
SettingsStore
new
AccountManager.isLoggedIn()
index_script.js
online_server_script.js
nav-default.js
/api/health
/api/clientinfo
proxy.php?action=clientinfo
/api/mods
/api/site-nav
/api/site-nav/to-static
/api/site-settings
/api/login
/api/session
/api/logout
/api/account
mod 自己的接口挂在 mod.json 的 apiPath 下,与主站接口共用一个进程。例:导航站(mod yylmzxcweb) 的接口全部位于 /yylmzxcweb/api/*(nav / health / rss / upload / login / session / logout / account), 另有 /yylmzxcweb/api/nav/to-static 用于把数据库数据导出为静态文件。
apiPath
yylmzxcweb
/yylmzxcweb/api/*
nav
health
rss
upload
login
session
logout
account
/yylmzxcweb/api/nav/to-static
src/ 下的每个一级子目录只要带一份 mod.json,就是一个 mod: 它自带前端页面(由主站静态托管自动生效),可选自带后端;加载与否只是配置上的一个开关。
mods.enabled
mods.overrides.<名称>
true / false
enabled
<mod>/server/index.js
init(ctx)
router(ctx)
close(ctx)
express
mysql2
ctx.log
node_modules
/<名称>/api
server/server.js
src/server/
*.key
*.pem
config.json
GET /api/mods
以导航站(mod yylmzxcweb)为例:
src/server/mods.js 扫描 src/*/mod.json └── yylmzxcweb(已启用) ├── 前端 /yylmzxcweb/yylmzxc.html ← src/ 本来就是静态根,目录即访问目录 └── 后端 /yylmzxcweb/api/* ← require 该 mod 的 server/index.js 后挂载 数据落库 yylmzxc_nav(见 yylmzxcweb/server/config.json)
于是一个后端进程同时连 scweb 与 yylmzxc_nav 两个库:主页与导航站共用一个端口。
yylmzxc_nav
Windows 用户: 双击 src/扫描BGM目录.bat 一键扫描。
BgmPlayer(编排层) ├── BgmStore — 持久化(localStorage) ├── BgmAudio — 音频引擎(Web Audio API 自动播放解锁) └── BgmUI — 界面渲染(封面/进度/播放列表)
添加新音乐:
# 1. 把音乐文件放进 src/bgm/新专辑名/ # 2. 运行扫描脚本 node src/tools/bgm-scan.mjs
Live2DInit(编排层) ├── Live2DConfig — 配置中心(路径/模型/功能开关) └── Live2DLoader — 资源加载器(CSS/JS/Image CORS)
src/site-config.js
live2d.enabled
src/live2d/autoload.js
Live2DConfig
index.html
online_server.html
dashboard.html
about.html
mod-dev-kit.html
mesh-reader.html
yylmzxcweb/yylmzxc.html
error/*.html
最后更新:2026年9月11日
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
生存战争社区网站
一个多语言的生存战争(SurvivalCraft)社区网站,提供游戏资源下载、联机服务器信息、Mod 开发工具、社区交流等功能。
🌟 项目特性
src/下带mod.json的目录即为一个 mod,前端随主站静态托管、后端按配置挂进主进程,可随时加载 / 不加载web模式数据源)🚀 快速开始
环境要求
live-server)安装步骤
克隆项目
启动开发服务器
src/是纯静态站点,任选一种方式即可(在src目录下执行):Windows 下可双击以下脚本一键启动:
src/用Npm启动开发服务器.bat—npx live-server(自动刷新)src/用Python启动开发服务器.bat—python tools/serve.py 8000src/扫描BGM目录.bat— 扫描 BGM 目录生成音乐清单访问网站
http://localhost:8000http://localhost:8000/online_server.htmlhttp://localhost:8000/dashboard.htmlhttp://localhost:8000/about.htmlhttp://localhost:8000/mod-dev-kit.htmlhttp://localhost:8000/mesh-reader.html带数据库运行(站点导航 / 设置可编辑,并加载 mod)
静态服务器打开时是
web模式(只读,导航读src/scweb_res/nav/nav-default.js)。 要让导航与站点设置能在页面上登录、编辑、导入导出,并支持「同步到静态文件」,需要启动src/server下的后端:Windows 下也可以直接双击
src/启动主页(带数据库).bat(自动装依赖并打开浏览器); 要同时打开主页与导航站,双击src/启动双数据库.bat即可 —— 两者启动的是同一个后端进程。src/server/config.json(HTTP127.0.0.1:8000;MySQL127.0.0.1:3306,默认root / root,库名scweb)。src/scweb_res/nav/nav-default.js填充初始导航数据。admin / admin(会话有效期 8 小时),登录后请在页面 ⚙️ 设置下拉的「账号」里修改。web模式运行(CI 发布前会剔除server/、key/等后端目录,见.github/workflows/static.yml)。📁 项目结构
🏗️ 前端架构
无构建、无框架:
<script>按顺序加载,各模块挂到window上,由组合根SCApp.create()统一装配并注入依赖。设计约定:
SettingsStore负责读写,主题键也复用它定义的常量,避免多处各持一份。new,由组合根创建后传入;跨模块状态通过公开方法(如AccountManager.isLoggedIn())而非直读内部字段。index_script.js/online_server_script.js等只负责自身页面的渲染,共享的设置与导航数据统一向上述管理器索取。nav-default.js。🔌 后端接口
/api/health/api/clientinfoproxy.php?action=clientinfo提供)/api/mods/api/site-nav/api/site-nav/api/site-nav/to-staticsrc/scweb_res/nav/nav-default.js(需登录)/api/site-settings/api/site-settings/api/login/api/session/api/logout/api/accountmod 自己的接口挂在
mod.json的apiPath下,与主站接口共用一个进程。例:导航站(modyylmzxcweb) 的接口全部位于/yylmzxcweb/api/*(nav/health/rss/upload/login/session/logout/account), 另有/yylmzxcweb/api/nav/to-static用于把数据库数据导出为静态文件。🧩 Mod 机制
src/下的每个一级子目录只要带一份mod.json,就是一个 mod: 它自带前端页面(由主站静态托管自动生效),可选自带后端;加载与否只是配置上的一个开关。src/server/config.json的mods.enabled是总开关,mods.overrides.<名称>可逐个指定true / false;两者都没写时看mod.json里的enabled。改完重启后端即可。<mod>/server/index.js,导出init(ctx)/router(ctx)/close(ctx); 宿主会把express、mysql2与ctx.log交给它 —— 因此 mod 目录**不需要自带node_modules**, 整个进程里也只有一个express实例。接口挂在mod.json的apiPath下(默认为/<名称>/api)。server/server.js仍可单独启动,把该 mod 当作一个独立站点来跑。/api/mods里会写明原因),主站照常运行。server/目录(已随代码移入src/server/)、 各 mod 的server/目录,以及key/、*.key、*.pem,避免config.json里的数据库账号密码被下载。GET /api/mods,或看后端启动日志里列出的已加载 mod。以导航站(mod
yylmzxcweb)为例:于是一个后端进程同时连
scweb与yylmzxc_nav两个库:主页与导航站共用一个端口。🎵 背景音乐系统
Windows 用户: 双击
src/扫描BGM目录.bat一键扫描。添加新音乐:
🤖 Live2D 看板娘
src/site-config.js的live2d.enabled。src/live2d/autoload.js中的Live2DConfig即可。🛠️ 技术栈
📄 页面说明
index.htmlonline_server.htmldashboard.htmlabout.htmlmod-dev-kit.htmlmesh-reader.htmlyylmzxcweb/yylmzxc.htmlerror/*.html🙏 致谢
最后更新:2026年9月11日