diff --git a/docs/SIM.md b/docs/SIM.md index 1e72ed5a..a5e8e019 100644 --- a/docs/SIM.md +++ b/docs/SIM.md @@ -390,11 +390,14 @@ catalogue status the same rule (one invisible buff `key` per target whatever app or icon): the engine default for two same-named buffs (PRTS 作战机制 "同名buff的默认叠加策略buff只能表现出一个"). 奥术 uses it, so the two players of a pair field compete for one instance instead of multiplying, and so do 灵知's 坚冰 and the 莱恩哈特 / 缄默德克萨斯 RES cuts, once keyed per unit (DESIGN §20.10). "Strongest" = the largest |value|. PRTS 盟约记录's -奥术 note "※同一单位仅可对同一目标同时施加1个该盟约法术伤害提升效果" (2026-03-30 revision: "…持续期间内,无法对该目标施加新的…") -limits each unit to one instance per target; read with the engine default — a newer same-named buff waits inert until -the earlier ones end (PRTS 常见同名状态 "默认叠加方式") — and 巴哈姆特 12316 ("共享型buff會跟對面搶"), one instance is effective -at a time, which is what applyStrongest keeps; strongest rather than earliest, and a unit refreshing its own instance, -stay [ASSUMED] (feedback after 0.1.0). +奥术 note "※同一单位仅可对同一目标同时施加1个该盟约法术伤害提升效果" limits each unit to one instance per target; read with +the engine default — a newer same-named buff waits inert until the earlier ones end (PRTS 常见同名状态 "默认叠加方式") — and +巴哈姆特 12316 ("共享型buff會跟對面搶"), one instance is effective at a time, which is what applyStrongest keeps; strongest +rather than earliest is [ASSUMED]. Known deviation [ASSUMED]: an earlier revision of that note (oldid 386936) read +"同一单位在对同一目标施加的“法术伤害提升”效果的持续期间内,无法对该目标施加新的该盟约的法术伤害提升效果" — no re-application +while the unit's own instance lasts, so it would lapse 3 s after the first hit and return with the next arts hit — +whereas an equal-value hit here refreshes the instance to a fresh 3 s; slightly stronger (at most one attack interval +of coverage per 3 s), kept because the current wording no longer says so (feedback after 0.1.0). | key | effect | value | |---|---|---| diff --git a/public/js/ui/bondStrip.js b/public/js/ui/bondStrip.js index 468cba5f..04d53836 100644 --- a/public/js/ui/bondStrip.js +++ b/public/js/ui/bondStrip.js @@ -60,10 +60,11 @@ export function BondStrip({ bonds, layersDisabled = false, onOpen, openId = null /** * Bond detail popup. * @param {{ bondId: string, entry?: any, priv?: any, banned?: string[], onClose: Function, onMember?: (chessId:string)=>void, - * place?: 'left'|'beside'|'besideR'|'right'|null, over?: boolean, beside?: 'left'|'right'|null, owner?: string|null }} props — + * place?: 'left'|'beside'|'besideR'|'right'|null, over?: boolean, beside?: 'left'|'right'|null, owner?: string|null, off?: boolean }} props — * `place`: where it opens (gameLogic bondPopupPlace; `beside: 'left'` = the older spelling of 'beside'); `over`: above the * detail card; `owner`: the watched teammate's name (`entry` / `priv` are then theirs: ui/watchBonds.js); `off`: the mode - * never activates this bond (gameLogic modeOffBonds — 标准's 10 inactive bonds): 本局禁用 instead of 未激活, with a note + * never activates this bond (gameLogic modeOffBonds — 标准's 10 inactive bonds): 本局禁用 instead of 未激活, with a note, no + * 在场 count and no 当前效果 block (its numbers would promise an effect the mode never gives; the bond text stays) */ export function BondPopup({ bondId, entry, priv, banned = [], onClose, onMember, place = null, over = false, beside = null, owner = null, off = false }) { const b = data.lookup('bonds', bondId); @@ -76,7 +77,7 @@ export function BondPopup({ bondId, entry, priv, banned = [], onClose, onMember, const members = bondMembers(b, priv, banned, (id) => data.lookup('chess', id)); const countsHand = entry?.countsHand ?? b.countsHand; const next = nextThreshold(count, th); - const hasNow = !!(b.effectDescRaw || b.effectDesc); + const hasNow = !off && !!(b.effectDescRaw || b.effectDesc); const at = place || (beside === 'left' ? 'beside' : 'left'); return html`