feedback4: version 0.1.4 — package.json / package-lock.json / APP_VERSION / README / DEPLOY; CHANGELOG 0.1.4 (rules per the official game, battle, lobby, UI, music, other; contributors credited)

This commit is contained in:
sganggs committed 2026-10-06 14:48:59 +08:00
1 parent 583899d398
commit 30e7acea42
6 files changed
+61 -8

No files matched your search

+53
View File
@@ -1,5 +1,58 @@
# 更新记录 # 更新记录
## 0.1.4 — 2026-10-06
0.1.3 之后的小版本:合并了多位贡献者的 PR,修正了高台和阿戈尔的规则,并修正了文档和测试。下一个版本(0.2.0)会做一次便于维护的重构、多语言支持,以及补位和自选编队。
### 规则(按官方)
- 高台按官方特性:特性里写着「可以放置于远程位」的干员(歌蕾蒂娅、崖心、见行者等),普通和精锐、任意模组都可以放上高台(此前只有精锐歌蕾蒂娅携带淡金坠饰可以;GitHub #153,PR #69 提出,感谢 @sunstricken)。
- 五人阿戈尔的复活名额给最先被击倒的 3 名阿戈尔:没被吞噬的阿戈尔不占名额,同一名干员被多名阿戈尔吞噬只算一次,斯卡蒂等干员自己的模组复活不占名额(GitHub #105、#140)。
- 联防里阿戈尔也会吞噬身前的队友干员(站着或等待再部署),攻击和阻挡加成与单独作战一致(GitHub #140)。
- 阿戈尔吞噬获得的基础攻击力改为最终加算,不再被技能攻击力百分比放大(基础攻击力 1000、技能 +100%、吞噬 2000 时为 4000,而不是 6000)(GitHub #165、PR #176 第 2 点,感谢 @SpiritedAwayCN)。
- 开场吞噬中先倒下的阿戈尔,它付出的标记仍照常结算,击杀记在付与者名下;只取消被击倒目标身上尚未触发的标记(GitHub #165、PR #176 第 3 点,感谢 @SpiritedAwayCN)。
- 缇缇二技能每次让周围敌人陷入沉睡都算一次进入沉睡,特质很快叠到每场上限(24 层,精锐 48 层);攻击范围外的沉睡不计入(GitHub #162)。
### 战斗
- 引星棘刺一技能「度算浪波」是自动触发技能,技力满了就向友军投掷炼金单元,不再等到有敌人才放(GitHub #124)。
- 咒愈师的特性对她造成的每一次伤害都会治疗,包括技能伤害;收割者、武者的技能打中敌人也会回复自己(PR #115,感谢 @shanzhaikabi)。
- 部署后限时生效的技能(宴二技能、斯卡蒂二技能、野鬃一技能、砾、伊内丝三技能、缄默德克萨斯、耀骑士临光二技能)走正常的技能流程:部署时消耗一次、显示持续时间条、到时结束,依赖技能状态的装备和盟约效果能看到它结束(PR #109,感谢 @Sukvii)。
- 耀骑士临光二技能结束撤退后被「不屈」立即再部署时,第二次技能不再丢失「骑士戒律」;伊内丝被「不屈」立即再部署时能正常收回影哨(发布前审查发现)。
- 灵巧:被击倒的灵巧干员仍为相邻队友提供一次光环,主动撤退、商人退场和联防强制离场不再提供;调和、协防干员、独行、绝技只在界面隐藏层数,内部仍正常累计(PR #66,感谢 @sunstricken)。
### 联机与大厅
- 「观战」和「加入」按钮发出的是输入框里的密钥,不再把点击事件当成密钥;0.1.3 的观战按钮每次都会失败(PR #119,感谢 @salt-fishes)。
- 最近同盟的密钥按钮改为只填入密钥,不再直接加入。
- 复制邀请链接时附带邀请文字:「{玩家名}邀请你加入卫戍协议:盟约【难度】」(PR #103,感谢 @LongQianChen)。
### 界面与表现
- 休整期选中干员后,按 Q 撤退、按 X 出售(PR #114,感谢 @SpiritedAwayCN)。
- 盟约详情里随层数增长的概率(不屈、迅捷、奇迹)最高显示 100%,和实际效果一致(GitHub #108)。
- 查看队友时能看到装备、整备区手牌、策略和效果(PR #129,感谢 @2321Robin);手牌里有道具的队友,棋盘干员不再消失(PR #150,感谢 @2321Robin)。
- 盟约栏可以收起,手机上更容易操作棋盘(PR #149,感谢 @CELLOPOI;GitHub #142)。
- 点一下特殊地块(活性源石、沼泽、深水区、排气格栅、红门 / 蓝门、传送门)会弹出它的说明和这张地图的具体数值;活性源石在 2D 和 3D 棋盘上改为同一套材质(PR #185,感谢 @Convey123;GitHub #184)。
- 标题 / 登录画面加了设置入口,打开的是局内同一个设置窗口(PR #183,感谢 @zasx77771)。
- 只有一条技能动画、没有起手动作的瞬发技能(如德克萨斯二技能「剑雨」)会正常播放技能动画;部署时生效的被动技能也会播放(PR #160,感谢 @xcdoge)。
### 音乐
- 联防阶段播放官方逃脱关卡自己的曲目(PR #110,感谢 @Convey123)。
- 开战曲目按回合固定:1–7 回合「无畏者」,8–13 回合「骑士之日」,和官方关卡资料一致(PR #72,感谢 @Convey123)。
- 作战中按官方语音槽位播放干员语音(部署、技能、结算等),一次一条,新台词会接管(PR #73,感谢 @Convey123)。
- 敌人走进蓝门时播放原版关卡的警报声,一波连续漏怪只响一次(PR #134,感谢 @Convey123)。
### 其他
- 3D 棋盘的 12 张本地贴图改用 WebP,每位玩家第一次进入对局少下载约 4.7 MB,远程联机加载更快(PR #186,感谢 @Cloudnyco)。
- 下载素材时可以手动启用国内镜像(`node tools/setup.mjs --asset-source=mirror`,或环境变量 `SP_ASSET_SOURCE=mirror`),默认不启用;镜像失败会回到原始源,连续失败 3 次后本次不再使用镜像(PR #24,感谢 @NekoTC)。
- 灼热 / 炽焰源石虫继续使用染色别名,补充了原因说明和测试(PR #74,感谢 @Convey123)。
- 联机集成测试不再偶发失败(PR #146,感谢 @CELLOPOI;GitHub #144)。
- 0.1.3 更新记录的个别措辞更正;设计文档里遗留的章节编号改正。
- 浏览器端到端测试会确认「还有剩余资金」的提示后再准备(PR #127 的表情测试同样可以用下载的素材运行,感谢 @Convey123)。
## 0.1.3 — 2026-10-04 ## 0.1.3 — 2026-10-04
修复 0.1.2 发布后玩家和 GitHub 上反馈的问题。每一条先复现,属实的才修,修完经过独立复核再合并。规则对照官方数据和 PRTS 核对;查不到出处的标了推断,详见 [docs/DESIGN.md](docs/DESIGN.md) §23。有意和官方不同的几条写在下面。 修复 0.1.2 发布后玩家和 GitHub 上反馈的问题。每一条先复现,属实的才修,修完经过独立复核再合并。规则对照官方数据和 PRTS 核对;查不到出处的标了推断,详见 [docs/DESIGN.md](docs/DESIGN.md) §23。有意和官方不同的几条写在下面。
+3 -3
View File
@@ -2,7 +2,7 @@
《明日方舟》季节性自走棋塔防玩法「卫戍协议:盟约」的**非官方同人复刻**:浏览器即开即玩,单人或 1–4 人联机合作。 《明日方舟》季节性自走棋塔防玩法「卫戍协议:盟约」的**非官方同人复刻**:浏览器即开即玩,单人或 1–4 人联机合作。
![version](https://img.shields.io/badge/version-0.1.3-2ea44f) ![version](https://img.shields.io/badge/version-0.1.4-2ea44f)
![license](https://img.shields.io/badge/code%20license-GPL--3.0--or--later-blue) ![license](https://img.shields.io/badge/code%20license-GPL--3.0--or--later-blue)
![node](https://img.shields.io/badge/node-22%20%7C%2024-339933) ![node](https://img.shields.io/badge/node-22%20%7C%2024-339933)
@@ -37,7 +37,7 @@ English summary: [below](#english).
- **独立模拟**(单人)与**同盟模拟**(1–4 人**合作**,没有 PvP;空位可以加 AI 队友)。 - **独立模拟**(单人)与**同盟模拟**(1–4 人**合作**,没有 PvP;空位可以加 AI 队友)。
- 服务器是一个 Node.js 程序,**战斗在各玩家的浏览器里模拟**(和官方一样),服务器只管经济与回合,一台低功耗小主机就能开服。 - 服务器是一个 Node.js 程序,**战斗在各玩家的浏览器里模拟**(和官方一样),服务器只管经济与回合,一台低功耗小主机就能开服。
- 当前版本 0.1.3:修复了 0.1.2 发布后玩家和 GitHub 上反馈的问题,详见 [CHANGELOG.md](CHANGELOG.md)。仍有少数规则按推断实现,与官方不一致的地方欢迎在 Issue 里反馈。 - 当前版本 0.1.4:修复了 0.1.3 发布后玩家和 GitHub 上反馈的问题,并合并了多位贡献者的 PR,详见 [CHANGELOG.md](CHANGELOG.md)。仍有少数规则按推断实现,与官方不一致的地方欢迎在 Issue 里反馈。
## 功能一览 ## 功能一览
@@ -68,7 +68,7 @@ English summary: [below](#english).
- Windows:在 PowerShell 里运行 `winget install OpenJS.NodeJS.LTS`,或到 <https://nodejs.org/zh-cn/download> 下载安装包。 - Windows:在 PowerShell 里运行 `winget install OpenJS.NodeJS.LTS`,或到 <https://nodejs.org/zh-cn/download> 下载安装包。
- macOS:`brew install node@22`,或到官网下载安装包。 - macOS:`brew install node@22`,或到官网下载安装包。
- Linux:发行版的包管理器、nvm 或 fnm。 - Linux:发行版的包管理器、nvm 或 fnm。
2. **下载**:在 [Releases](../../releases/latest) 页面下载最新版本(v0.1.3)的整合包(zip),解压到一个路径较短的文件夹(Windows 上建议不要放在 OneDrive 同步的目录里)。 2. **下载**:在 [Releases](../../releases/latest) 页面下载最新版本(v0.1.4)的整合包(zip),解压到一个路径较短的文件夹(Windows 上建议不要放在 OneDrive 同步的目录里)。
3. **启动** 3. **启动**
- Windows:双击 **`scripts\start-windows.bat`**。如果弹出「安全警告」,点「运行」;Windows 防火墙弹窗请勾选「专用网络」并允许。 - Windows:双击 **`scripts\start-windows.bat`**。如果弹出「安全警告」,点「运行」;Windows 防火墙弹窗请勾选「专用网络」并允许。
- macOS / Linux:在解压出的文件夹里运行 `./scripts/start.sh`(或 `bash scripts/start.sh`)。 - macOS / Linux:在解压出的文件夹里运行 `./scripts/start.sh`(或 `bash scripts/start.sh`)。
+1 -1
View File
@@ -26,7 +26,7 @@
``` ```
装完**关闭并重新打开**终端,`node -v` 应显示 v22 或更高(winget 的 LTS 目前是 v24.x,同样可用)。没有 winget 时从 <https://nodejs.org/zh-cn/download> 和 <https://git-scm.com/download/win> 下载安装。 装完**关闭并重新打开**终端,`node -v` 应显示 v22 或更高(winget 的 LTS 目前是 v24.x,同样可用)。没有 winget 时从 <https://nodejs.org/zh-cn/download> 和 <https://git-scm.com/download/win> 下载安装。
2. 下载,二选一。建议放在一个固定、短、**不在 OneDrive 同步范围内**的目录,例如 `C:\Stronghold-Protocol`: 2. 下载,二选一。建议放在一个固定、短、**不在 OneDrive 同步范围内**的目录,例如 `C:\Stronghold-Protocol`:
- **完整包(推荐)**:在仓库的 [Releases](https://github.com/sganggs/Stronghold-Protocol/releases) 页面下载最新版本(当前为 v0.1.3)的完整包 zip(已含依赖、前端库和全部素材,包括官方 3D 棋盘),解压后把里面的 `Stronghold-Protocol` 文件夹放到上述位置。不需要 Git,首次启动也不用再下载素材。素材版权归上海鹰角网络 / Yostar,仅限非商业使用,见 [NOTICE.md](../NOTICE.md)。 - **完整包(推荐)**:在仓库的 [Releases](https://github.com/sganggs/Stronghold-Protocol/releases) 页面下载最新版本(当前为 v0.1.4)的完整包 zip(已含依赖、前端库和全部素材,包括官方 3D 棋盘),解压后把里面的 `Stronghold-Protocol` 文件夹放到上述位置。不需要 Git,首次启动也不用再下载素材。素材版权归上海鹰角网络 / Yostar,仅限非商业使用,见 [NOTICE.md](../NOTICE.md)。
- **源码**: - **源码**:
```powershell ```powershell
git clone https://github.com/sganggs/Stronghold-Protocol.git C:\Stronghold-Protocol git clone https://github.com/sganggs/Stronghold-Protocol.git C:\Stronghold-Protocol
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "stronghold-protocol-alliance", "name": "stronghold-protocol-alliance",
"version": "0.1.3", "version": "0.1.4",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "stronghold-protocol-alliance", "name": "stronghold-protocol-alliance",
"version": "0.1.3", "version": "0.1.4",
"hasInstallScript": true, "hasInstallScript": true,
"license": "GPL-3.0-or-later", "license": "GPL-3.0-or-later",
"dependencies": { "dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "stronghold-protocol-alliance", "name": "stronghold-protocol-alliance",
"version": "0.1.3", "version": "0.1.4",
"private": true, "private": true,
"description": "明日方舟「卫戍协议:盟约」非官方同人联机网页复刻(1–4 人合作,Node.js 服务器 + 浏览器客户端)", "description": "明日方舟「卫戍协议:盟约」非官方同人联机网页复刻(1–4 人合作,Node.js 服务器 + 浏览器客户端)",
"license": "GPL-3.0-or-later", "license": "GPL-3.0-or-later",
+1 -1
View File
@@ -3,7 +3,7 @@
export const PROTOCOL_VERSION = 1; export const PROTOCOL_VERSION = 1;
/** Release version shown to players (title screen, server banner, /healthz). Kept equal to package.json "version" /** Release version shown to players (title screen, server banner, /healthz). Kept equal to package.json "version"
* (test/version.test.js); PROTOCOL_VERSION above is the separate wire-format number. */ * (test/version.test.js); PROTOCOL_VERSION above is the separate wire-format number. */
export const APP_VERSION = '0.1.3'; export const APP_VERSION = '0.1.4';
export const MAX_SEATS = 4; export const MAX_SEATS = 4;
/** /**