Commit Graph
241 Commits
Author SHA1 Message Date
sganggs cfe85c6fee feedback2 WI: a running 坚固维式重锤 不死 window stops a dollkeeper's switch to its 替身 (fatal priority −99, the lock stays at −100); the switch flag is trait.dollSwitching; the 替身's own max HP is stated as sourced (review of #44) 2026-10-04 00:26:13 +08:00
sganggs 29784db4d9 feedback2 WI: a dollkeeper knocked out as its 替身 lies as the 替身 facing UP and on a model rebuilt while down (the view keeps the form it died in); Back clip lists and form comments corrected, the unused knockout fx removed (review of #44) 2026-10-04 00:26:13 +08:00
sganggs 0ac7dc7dd2 feedback2: merge WI — 归溟幽灵鲨's 替身 is drawn (form + status icon), makes no attack and casts nothing, S2's end switches her (GitHub #44) 2026-10-04 00:13:31 +08:00
sganggs 6b634fe132 feedback2: merge WD — 活性源石 stays on an enemy for 300 s after the tile (cleared by a 重生); 沼泽 triggers every second (2 layers at 重量 ≥ 3); 深水区 is sourceless true 持续伤害, not 环境伤害 (GitHub #33 item 6) 2026-10-04 00:09:22 +08:00
sganggs c2e0788fd1 feedback2 WD: DESIGN §22.4 and SIM.md for the review fixes (重生 clears the effect, relocated and long-standing operators, boss / hidden fields, 纠缠藤蔓, the 沼泽 and 深水区 findings) 2026-10-04 00:07:43 +08:00
sganggs a4d69b6ba3 feedback2 WD: 深水区's tick is 无来源 true 持续伤害, not 环境伤害 (tags dot / periodic / deepsea): 纠缠藤蔓 no longer turns fragile in water, 锡人's 凋敝魂灵 raises it 2026-10-04 00:07:34 +08:00
sganggs 3502027ff2 feedback2 WD: 沼泽 triggers every second, 2 layers for an enemy of 重量 ≥ 3, operators get the ASPD part only (the skill's value 3 is that weight, not a 3 s interval) 2026-10-04 00:07:25 +08:00
sganggs 0907c3b7a4 feedback2 WD: a 重生 clears the lasting 活性源石 effect (an ember that crossed the tile no longer dies from its ticks); a relocated operator keeps it, an operator drains past 300 s only by the [ASSUMED] refresh rule 2026-10-04 00:07:15 +08:00
sganggs 7ab852ef57 feedback2: merge WE — setup downloads the battle emotes and 玩法说明 pages from the public mirror, accurate deployment docs (GitHub #42); English title Stronghold Protocol: Alliance; doctor comment after PR #27 2026-10-03 23:51:56 +08:00
sganggs fadeed2dc6 feedback2 WE: review wording — ASSETS.md and DESIGN §13 say the HUD sprites are not downloaded (most are on the mirror), §22.5 says the mirror copies match the local sizes and that #38 stays open; setup's no-client row only points to DEPLOY §6 (doctor keeps the copy hint); stale test messages 2026-10-03 23:51:11 +08:00
sganggs 7f7df66977 feedback2 WE: a 玩法说明 page none of whose copies loads shows the official tips text again, as in 0.1.1 (data/assets.json listing pages that are not on disk showed a blank notice); guide.js guideStage, neighbours preload their next loadable copy 2026-10-03 23:51:11 +08:00
sganggs f3cb6f414e feedback2: merge WC — 阿戈尔's devour cancels a knocked-out target's pending marks (revived members stay standing); 乌尔比安 S3 stays on his tile while he blocks (GitHub #33 items 1-2) 2026-10-03 23:45:19 +08:00
sganggs d5ebc6c7cd feedback2 WC: DESIGN §22.3 follows the review (0.1.0's marker rule, 不屈, his own tile only while blocking, 82 of 84 casts, measured before #51) 2026-10-03 23:44:36 +08:00
sganggs ee70c608dc feedback2 WC: 乌尔比安 S3 takes his own tile only while he blocks; otherwise the anchor search starts one tile ahead as in 0.1.1 (review of GitHub #33 item 2) 2026-10-03 23:44:36 +08:00
sganggs 93b0592bff feedback2 WC: the devour keeps 0.1.0's marker rule (a marker back in the same pass still gives its marks) and cancels a target's marks after a 不屈 redeploy too (review of GitHub #33 item 1) 2026-10-03 23:44:36 +08:00
sganggs 1376e64753 feedback2: WB review wording — 突袭 looks at another field's ground enemies only while its own has none; §22.2 says the rule is stricter than our first #51 reply (a covering tile or no jump) 2026-10-03 23:42:09 +08:00
sganggs 4298815bf2 feedback2: merge WB — 突袭 lands only where it can attack a ground enemy, on both triggers (GitHub #51) 2026-10-03 23:41:35 +08:00
sganggs d74665f068 feedback2: WF review — the 高台 reading marked [ASSUMED] in the code comments; only 歌蕾蒂娅 is obtainable (崖心 / 见行者 are hidden chess); §22.6 notes the tile-based 地面干员 effects 2026-10-03 23:40:13 +08:00
sganggs 2f5cc6edbc feedback2: merge WF — 钩索师 / 推击手 may stand on a 高台 (branch trait 可以放置于远程位; GitHub #32 item 4) 2026-10-03 23:39:47 +08:00
sganggs b44d808e21 feedback2 WI: DESIGN §5.2 / §8.2 say a unit's model form may be a dollkeeper's 替身, not only an enemy's mode 2026-10-03 23:32:38 +08:00
sganggs d2d1c46364 feedback2: WA review wording — DESIGN §22.1 says only the model choice is unchanged for enemies and summons, the held idle frame is an [ASSUMED] look, the knocked-down pose keeps a Back skeleton's own Die clip 2026-10-03 23:31:03 +08:00
sganggs 32eb8e508c feedback2: merge WA — a knocked-out operator facing up falls with its Front model (GitHub #25) 2026-10-03 23:30:43 +08:00
sganggs ff294b8e40 feedback2 WI: the client draws a dollkeeper's 替身 on its *_B clips (归溟幽灵鲨 Start_B / Idle_B / Die_B / Die_B_2, back on Start_2; 风丸 too) with a 替身 status icon; a form ends in the unit's own skill clips (issue #44) 2026-10-03 23:29:48 +08:00
sganggs 64f715fb20 feedback2 WI: 归溟幽灵鲨's 替身 makes no normal attack and casts no skill, her S2 end switches her to it directly; dollkeepers switch with a 1 s animation, hold 阻回 and keep their own max HP (issue #44) 2026-10-03 23:27:49 +08:00
sganggs 2f0a980b2e feedback2 WE: README, DEPLOY.md (new §6), setup and doctor say what falls back without the local-client art instead of 不影响游戏, and that a server without the client can copy public/assets/local + data/local-assets.json from the same version's bundle; DESIGN §22.5 (#42) 2026-10-03 23:13:23 +08:00
sganggs bcaff967cf feedback2 WD: devices.js notes that a 重生 keeps the 活性源石 effect (source-less buffs survive rebirthCleanse) 2026-10-03 23:11:35 +08:00
sganggs 7d0b44a43b feedback2 WB: DESIGN §22.2's repro line says why no landing reaches the enemy (it stands on floor, the tiles beside it do not cover it) 2026-10-03 23:10:13 +08:00
sganggs 03fab686c5 feedback2 WF: DESIGN §22.6 states what the bot probe showed (the widened class left one blocker on the road) 2026-10-03 23:09:47 +08:00
sganggs 234d2c5714 feedback2 WA: the five operators of GitHub issue #25 (跃跃, 拉普兰德, 缄默德克萨斯, 斯卡蒂, 德克萨斯) pinned in the test and named in DESIGN §22.1 2026-10-03 23:09:33 +08:00
sganggs ff8db862c9 feedback2: merge GitHub master (PR #28 extension-less /media audio route, PR #29 explorer.exe browser opener) 2026-10-03 23:06:10 +08:00
sganggs db7b2b1404 feedback2 WE: setup downloads the 36 battle emotes and the 19 玩法说明 pages from the public mirror (ArknightsAssets2 cn); the client shows the local-client art first, then the mirror copy, then its fallback (#42) 2026-10-03 23:05:42 +08:00
Lu Ke 8b10625d3c 打开浏览器改用 explorer.exe(shell 关联),找不到时才用 rundll32 (#29)
Windows 上先同步判断 explorer.exe 是否存在:存在就用 explorer.exe <url>,由已登录、未提权的 shell 按默认浏览器关联打开,从管理员控制台启动时浏览器不会跟着提权(Edge 不再弹「现有实例正在以提升的权限运行」);找不到 explorer.exe 才退回 rundll32 url.dll,FileProtocolHandler。不经过 cmd,URL 里的 & 不会被截断。macOS / Linux 不变。

打开浏览器的实现集中到 scripts/open-browser.mjs;scripts/launch.mjs 加 isMain() 守卫(与 tools/setup.mjs、tools/doctor.mjs 一致),被 import 时不会启动服务器。测试:test/open-browser.test.js。
2026-10-03 23:05:06 +08:00
Ausevay 0b73a39b12 Merge pull request #28 from kanomahoro1224/feat/media-audio-route
音频改走无扩展名的 /media 路由:下载管理器不再弹「下载文件信息」
2026-10-03 23:04:48 +08:00
sganggs 2d96fe7c61 feedback2 WB: DESIGN §22.2 and research 02 §3.18 describe the 突袭 landing rule (data/bonds.json rebuilt)
§22.2: seen / official / cause / now / cost / players notice / [ASSUMED] / tests for GitHub issue #51. Research 02
§3.18's [ASSUMED] landing line (md and json) now states the rule; `node tools/build-data.mjs --offline` changed only
data/bonds.json raidShip.spec.assumed[0].
2026-10-03 23:04:12 +08:00
sganggs 76e60a186b feedback2 WB: 突袭 jumps only to a tile from which its target is in range, on the idle trigger too (GitHub issue #51)
Up to 0.1.1 only the 技能就绪 trigger required a landing tile that covers the target; the 10 s idle trigger took
raidTile's fallback (a tile that covers nothing), so a member with nothing reachable hopped every 10 s between useless
tiles and never went for a second ground enemy it could have hit. Now both triggers walk the candidates in the existing
order (own field first, most advanced first, at most 8) and jump to the first one with a covering tile; none -> the
member stays, its idle time keeps counting and the 0.25 s poll looks again. [ASSUMED]: the official text only says
"再部署至一名地面敌人周围".

raidTile now enumerates only the tiles a range offset leads back to from the enemy's body (same choice as the old
25-tile scan whenever a covering tile existed: 200 000 random cases), and a player's members share one sorted candidate
list per poll (rebuilt after a jump), so a search that finds nothing stays cheap: +5.8 us per tick on the heavy boss
field with 18 members that never reach anything, against +5.5 us for 0.1.1 (the plain requirement on the old scan:
+29.6 us). Tests: two "突袭 #51" cases in test/content/bonds_addon.test.js.
2026-10-03 23:04:12 +08:00
sganggs e846519fb0 feedback2 WF: docs for 钩索师 / 推击手 on a 高台 (DESIGN §22.6, §3, §6.6; DATA placement; PLAYING §4; research 03 C2) 2026-10-03 23:03:26 +08:00
sganggs 9d15538865 feedback2 WF: 钩索师 and 推击手 (歌蕾蒂娅, 崖心, 见行者) may stand on a 高台 — chess.json placement 'all' from the branch trait 可以放置于远程位; server, client highlights; bots keep them on the ground as blockers 2026-10-03 23:03:26 +08:00
sganggs 380af1ba80 feedback2 WE: the English title is the official Stronghold Protocol: Alliance (EN activity_table act2autochess) — README, server banner, package name; was Covenant (#38) 2026-10-03 23:01:49 +08:00
sganggs 945c9f3ee8 feedback2 WE: tools/doctor.mjs says directly that tun0 / tap0 are matched first by VPN_IF (substring tun\d / tap) and classed as vpn (comment only, after PR #27) 2026-10-03 23:01:41 +08:00
sganggs 1579a8807f feedback2 WD: 活性源石 stays on a unit for its 300 s after it leaves the tile, one effect per unit, the tiles never switch off (GitHub #33 item 6) 2026-10-03 22:59:38 +08:00
sganggs e08f22447b feedback2 WA: DESIGN §22.1 (Back-facing operators play their fall, GitHub issue #25), docs/ASSETS.md model choice and die role 2026-10-03 22:58:26 +08:00
sganggs 072e1231ae feedback2 WA: a knocked-out operator facing UP falls and lies with its Front model, the Back model holds still meanwhile (GitHub issue #25)
131 of the 135 Back skeletons have no Die clip, so SpineActor.die() changed nothing and the
attack / skill / idle loop went on under the redeploy ring. UnitView._wantsBack() now wants the
Back model only while the unit stands (or when its Back skeleton has a Die clip of its own);
die() / revive() mark the view and its update swaps the model in place after the frame's events
(a death and a redeploy in one frame load nothing). The Front model replays the fall (held end
for a unit already down), gets the knocked-down grey, and the redeploy brings the Back model back
with the deploy clip carried over. A skeleton without a Die clip holds its idle's first frame.
2026-10-03 22:58:19 +08:00
sganggs c2c1cf7fd8 feedback2 WC: DESIGN §22.3 (GitHub #33 items 1-3: the devour after a revive, 乌尔比安 S3 while blocking, the 联防 order still unknown) 2026-10-03 22:58:11 +08:00
sganggs 7383419009 feedback2 WC: 乌尔比安 S3 throws the anchor onto his own tile while he blocks, so he stays put and leaves no marker (PRTS note; GitHub #33 item 2) 2026-10-03 22:58:11 +08:00
sganggs 215d52efe3 feedback2 WC: 阿戈尔's devour cancels the pending marks of a unit it knocked out, also when that unit is revived at once, so the revived members stay standing (GitHub #33 item 1) 2026-10-03 22:58:11 +08:00
sganggs 47df17171a feedback2: test that 缪尔赛思 wearing 变形同构体 + 维式重锤 counts twice for 维多利亚 (case from PR #40 by @shanzhaikabi) 2026-10-03 22:41:03 +08:00
sganggs 2a03467897 feedback2: DESIGN §22 skeleton for the post-0.1.1 GitHub issues 2026-10-03 22:33:22 +08:00
kanomahoro1224 cfa51e5f1b 按 review 意见:/media/ 的路径与扩展名列表提到 shared/ 共用
- server/index.js 开头的路由说明补上 /media/
- AUDIO_EXTS 原先客户端(public/js/media.js)与服务端各一份,只改一边就会悄悄漂移:
  现在两边都从 shared/media.js 取;服务端那份不再 export
- isMediaUrl 只有测试在用,删掉(新增 shared/media.js,测试改从那里取前缀/扩展名)
- 顺手做了 review 里「可选」的那点:有些静态托管对不存在的路径回 200 + index.html,
  这种响应解码会静默失败,所以除了 404,声明了非 audio/* 类型的响应也回退到原地址
  (完全没声明 content-type 的不算错——没有证据表明它不是音频)
2026-10-03 22:33:20 +08:00
kanomahoro1224 a069be4538 音频改走无扩展名的 /media 路由:IDM / 迅雷 这类下载管理器不再弹「下载文件信息」
玩家那边遇到的是:游戏放着 BGM,突然弹出下载管理器的「下载文件信息」框,有时还会把整条
音轨抢去下载。原因是这些工具会嗅探以媒体扩展名结尾的 XHR/fetch。改成客户端统一请求不带
扩展名的 `/media/<原路径去掉 .mp3>`,服务端再解析回 `public/assets/audio/…`。

- `public/js/media.js`:`mediaUrl()` 把 `/assets/audio/**.mp3` 换算成 `/media/**`,只处理同源、
  且扩展名在名单内的地址;跨域、目录、`..`、点开头、不认识的扩展名一律原样返回。
- `server/index.js`:新增 `/media/` 路由。按 `AUDIO_EXTS` 顺序找 `.mp3/.m4a/.aac/.ogg/.oga/.opus/.wav`,
  显式写了扩展名的以它为准;Range/ETag/Content-Type/缓存策略都复用 `serveFile`,所以和直接请求
  `/assets/audio/…` 行为一致(一天缓存、支持 Range)。
- 直接请求 `/assets/audio/…` 仍然可用 —— 这是给不支持 `/media/` 的纯静态托管留的退路,客户端
  在 `/media/` 404 时才回退到原地址。

安全:`/media/` 的路径只接受正常片段,`..`/`.` 直接 403,点开头或点结尾的片段 404,解析出的
绝对路径必须落在 `public/assets/audio` 之内,且只允许上面那几个音频扩展名 —— 不会变成任意文件读取。

测试:
- `test/media-url.test.js`:`mediaUrl()` 的换算与各种「别动它」的边界。
- `test/lobby.test.js`:真实服务器上的 `/media` 路由(正常解析、显式扩展名优先、Range、HEAD、
  目录与穿越请求被拒、客户端回退用到的 `/media/bgm.mp3` 仍 200)。
- `test/ui/audio.test.js`:音频管理器现在先请求无扩展名地址,404 才回退原地址;断言跟着
  `mediaUrl()` 换算后再比对(原先拿 manifest 原地址比对,等于断言一个客户端永不请求的 URL)。
2026-10-03 22:33:19 +08:00
Ausevay 5eede38129 Merge pull request #27 from kanomahoro1224/fix/doctor-iface
启动器「发给朋友」不再把代理 TUN 当公网 IP;删掉永不生效的 ^tun\d
2026-10-03 22:26:48 +08:00