fix: 修复洛洛 S2 越界续锁与旧弹倍率干扰;Golden 因独立浮游/本体攻击更新 roster-004、roster-005、bond-victoriaShip-low、bond-victoriaShip-high、coop3-ABYSS-5、coop4-FUNNY-6、coop4-ABYSS-7、coop2-NORMAL-8-serverrun、coop2-NORMAL-1-coverage-standins

This commit is contained in:
星闌 committed 2026-10-11 16:54:03 +08:00
1 parent bc50cac01f
commit f567e8045e
9 files changed
+461 -127

No files matched your search

+1 -1
View File
@@ -1341,7 +1341,7 @@ header of professions.js).
| loopshooter | 回环射手 (user playtest #3): every attack throws a boomerang (`ai.js throwBoomerang`, projectile `'boomerang'`) out to the target at 15 tiles/s — it hits on arrival — and back to the thrower's current position at 3.75 tiles/s without damage (PRTS 跃跃 "投射物飞行速度15,返回时飞行速度3.75"); attacks only while holding it (every boomerang thrown caught — "必须回收全部回旋投掷物才可以进行下一次攻击", `unit.trait.boomerangsOut`) and with the attack cooldown ready, so the real interval is the longer of the two; a target dead mid-flight is not hit (it still flies to the last position and back); knocked out / withdrawn ⇒ lost, a redeployed thrower holds a fresh one; 跃跃 S2's extra boomerangs share the one flight (cnt hits); each catch fires `boomerangCaught`, and an attack profile's `boomerangOnward(ctx)` flies it on after the first hit before it turns back — ctx `hit` (a hit of the same attack), `comeBack(x, y)` once (a content error sends it back from the hit point): 娜仁图亚 S1 bounces, S2 dashes on and hits on its way back (kits/ops/op-narant.js) |
| reaperrange | hits every enemy in range; ×1.5 (bb atk_scale) on the trait front grid (or its own line ahead) — both along its direction |
| chain | chain N (trait text/bb max_target) with −15 % per jump (bb chain.atk_scale), 1.7-tile jumps (constants.js CHAIN_RADIUS, PRTS 溅射半径一览: 链术师 1.7; 1.8 until 0.1.1), sluggish on each hit |
| funnel | drone damage 20 % → +15 %/hit on the same target → 110 % (bb init/delta/max) |
| funnel | drone damage 20 % → +15 %/hit on the same target → 110 % (bb init/delta/max). Rockrock S2 detaches this multiplier from new body shots and inherits the trait ramp in an independent skill tick: `rockr:drone`, arts, `isSkill:true`, `isAttack:false`. Older projectiles cannot change its local ramp. A living selectable lock need not remain in body range; end hands the ramp back and restores the normal multiplier (DESIGN §29.16) |
| mystic | 秘术师 (PRTS 分支特性信息 秘术师, GitHub #181): at its attack check (the attack ready, able to act, not disarmed) with no valid target — no target, or its kit's `canAttack` false (深靛 never picks a bound enemy) — it stores one energy (`storeEnergy`, up to bb times: 3, 深靛's MSC-X 4), an attack action: the attack interval restarts; a full store idles with the attack ready. The energies leave with its next attack that happens (`releaseEnergy` in `performAttack`, after `beforeAttack`: an attack cancelled before its shot keeps them) and land with the main hit, one arts attack hit each (`hitsFn` reads the hit's `info.energy`); a redeployment holds none [ASSUMED]. 维伊 / 黑键 plug their own `storeEnergy` (转置能量, elite energies) into the same check |
| phalanx | no attack & DEF +200 %, RES +20 (bb) while the skill is off; while on, `rangeAoe`: each attack strikes every selectable enemy on its range at once (blocked enemies included; a stealthed one only when revealed or blocked), the same damage near and far, instant (`'beam'`) — "群体法术伤害" (secondary: Terra Wiki, Phalanx Caster: "attacks hit all enemies within their range"; supporting: PRTS 林 S3 备注 "单次普攻最多触发1次效果" — one normal attack can kill several — the same 锁定攻击范围 shape as the 轰击术师, and PRTS 溅射半径一览 documents no splash radius for it (it omits the 撼地者 too, so this is not proof); no primary source states a target cap; community report E3: it used to be one bolt + a 1.1 splash). 卡涅利安's charged S1 keeps the skill-off trait, 不攻击 included (kit `canAttack`, PRTS 备注) |
| physician | heal the lowest HP% injured ally in range (a skill `targeting.maxTargets` widens any heal profile) |
+6
View File
@@ -167,6 +167,12 @@ Profession traits (default behaviours implemented once in the engine, keyed by `
---
Rockrock S2 releases its trait drone into an independent skill tick (§29.16). Acquisition uses the body's normal
target selection; a living selectable lock stays valid outside the body's range. The body retains its own ranged
ordinary attacks. The released ramp inherits the trait state but is isolated from older projectiles. Ending the
skill returns that ramp to the trait and restores the normal multiplier and overload cap. S1 and other operators'
funnel attacks keep their existing paths.
## 7. Content modules (server/sim/content + match/effectsMeta handlers)
Each domain file `server/sim/content/{tokens,bonds,garrisons,items,bands,enemies,bosses,devices,choices}.js` exports `install(battle)` (battle side; called once per Battle by `content/index.js → installContent`) and `registerMeta(registry)` (prep side; called once at server boot by `match/effectsMeta.js`, API documented in `docs/META.md`). Kits live one per file in `content/kits/ops/` (`export default { [baseChessId]: (bb, chess, def) => Kit }`), listed in `content/kits/index.js` (guide: `content/kits/README.md`). Content must be **data-driven from blackboards** (numbers never hard-coded when a blackboard key exists). Every effect gets at least one unit test in `test/content/*.test.js` using the `test/helpers/battleHarness.js` harness (provided by sim-core).
+24
View File
@@ -274,3 +274,27 @@ enemy: picking emitted a unit click with no definition, instead of the tile clic
engine-canvas regression retains the card/100 HP assertions and also covers another field refresh, live HP loss and
closing the card when the crate is destroyed. Device metadata supplied by the new entry still wins; changing fields
does not carry old devices across. Gameplay and allied targeting rules are unchanged.
### 29.16 Rockrock S2 drone pursuit
The official `skill_table.json` entry `skchr_rockr_2`, ranks 4 and 7, keeps a released drone locked until the enemy
dies or the skill ends; leaving the operator's range is not a return condition. The old `beforeAttack` callback
both replaced the body's target and required the lock to remain in range. With no body candidate, the attack loop
never reached that callback at all.
S2 now ticks one independent arts skill drone (`attack@cnt = 0`, one trait drone). It acquires inside the normal
range, keeps a living selectable target after it leaves, and reacquires only after losing that target. The body
continues its own in-range attacks. The released drone inherits the trait's target/ramp, resolved module init/delta,
live attack interval and overload cap; its multiplier is detached from newly launched body shots during S2 and
restored on end. Its local ramp is isolated from older ordinary projectiles and handed back to the trait at end;
existing projectiles keep their launch profile. Natural expiry, explicit stop and caster death
clear released state; the existing overload buff/cap restoration and stun stay in place. S1, other operators and
redeployment ramp rules are unchanged.
[ASSUMED] Released hits use the existing independent-skill-drone model: no launch-flight delay, and body control
does not pause an already released drone. A target becoming hidden or otherwise unselectable releases the lock
using the shared target filter. The tables do not settle these details. The kit and PR name these assumptions.
Sources: [official skill table](https://github.com/Kengxxiao/ArknightsGameData/blob/master/zh_CN/gamedata/excel/skill_table.json)
and [PRTS mode levels](https://prts.wiki/w/卫戍协议:盟约). Controlled regressions cover both forms, leaving/returning,
newcomers, combat death, end/stop, module ramp, cadence and overload. A fixed-seed production Match and real headless
Chrome normal-input route reproduce the original failure and the repaired pursuit separately.