一、摘要
259修飾欄位總數(6 個容器)
22只寫不讀(算了但沒人用)
12只讀不寫(讀取端做好、沒引晶餵)
216讀寫都有
實際的類別名(不是 GemModifiers 一個而已)
GemModifiers— 主容器,165 欄。一次施放用完就丟。裡面 4 個ModifierStack(damage/range/cooldown/cooldownRecovery)各自裝 flat + increased + more 三桶。
⚠cooldown這一桶的名字是歷史包袱,它裝的其實是動作速度(間隔倍率);真正的冷卻在cooldownRecovery。GemModifiers.summon->SummonModifiers(54 欄) — 巢狀子容器。生命週期不同:會被快照釘在召出來的實體上活好幾秒。CritCore.Mods(19 欄) — sidecar,靠CritSettlement.of(mods)的WeakHashMap掛在 GemModifiers 上。WuxingCore.Mods(13 欄) — sidecar,WuxingSettlement.of(mods)。穿透 / 轉化 / 獲得額外 / 逐行 increased。AwakenedPenetrationGems.Mods(2 欄) — sidecar,只有曝曬機率那一條。AuraReservation.Mods(6 欄) — sidecar,光環保留的三顆(傲骨枷 / 頒福籙 / 永祚印)。
※ ProjectileMods 不是容器,是一支「用反射從 GemModifiers 讀投射物欄位、組出 ProjectileSpec」的橋。⚠ 它的 build() / applyLook() / pointBlankMultiplier() 全服沒有任何呼叫端(只有 missingFields() 被 /combatskill proj 診斷指令用到)。實際消費投射物欄位的是 SkillProtoBow / SkillProtoProjAttack / SkillProtoGenericSpell / SkillProtoVaal / DeployablePayload,各自寫了一份。
運算類型:increased 與 more 一定要分開
- increased / reduced(中文「增加 / 減少」)-> 同類相加,互相稀釋,最後只乘一次。欄位名慣例
*IncreasedPercent。 - more / less(中文「更多 / 更少」)-> 各自相乘,不被稀釋。欄位名慣例
*MorePercent/*LessPercent,而且多來源的一律用List<Double>(如moreAilmentDamage/moreDamageOverTime/moreElementalMultipliers)—— 壓成一個 double 相加就等於偷偷變回 increased。 - 「更多攻擊時間」= 出手變慢,方向跟「更多攻擊速度」相反(
attackTimeMorePercentPerProjectile)。 - 「如同造成 N% 更多傷害來冰凍 / 感電」(
freezeAsThoughDamagePercent/shockAsThoughDamagePercent)放大的是異常狀態強度的計算基準,實際傷害一點都沒變。單位是「相當於原本的百分之幾」,100 = 正常。 - 「傷害加速 N%」(
ailmentDamageAcceleration)= 每秒傷害 ×(1+N%) 且 持續時間 ÷(1+N%),總量不變 —— 不是 more 傷害。
二、死欄位(這份表最重要的產出)
只寫不讀 —— 引晶算好了數字,全服沒有任何地方讀它(22)
GemModifiers.executeSource— 寫入者:收割鐮, 除弱鐮GemModifiers.executeLifeRecoverPercent— 處決成功時回復的生命%(品質效果)。 寫入者:收割鐮, 除弱鐮GemModifiers.leechDamageIncreasedPercent— 寫入者:汲能蛭GemModifiers.arcaneSurgeMoreSpellPercent— 寫入者:秘湧脈GemModifiers.overheatPerThreeFortifyPercent— 焚甲燼:「使用時會消耗所有護體,根據每 3 消耗的護體造成 (6~8)% 更多異常狀態傷害」。 ⚠ 這一顆在 P3 是刻意留 PENDING 的:加成落在「異常狀態傷害」上, 沒有 DoT 的時候玩家只吃得到代價(護體被吃掉),換到的是空氣 寫入者:焚甲燼SummonModifiers.elementalDamageMorePercent— 寫入者:元素旌SummonModifiers.ownerDamageSharedPercent— 同命結:「若被輔助的召喚物為你的唯一召喚物,你承受的 15% 擊中傷害會改由 其生命扣除」。⏳ 待接 —— 需要在玩家的承受面(AffixCombatListener 那條路) 分流,那不在這一輪的範圍。填 0 代表沒有這顆引晶。 寫入者:同命結SummonModifiers.castSpeedIncreasedPercent— 寫入者:役靈翎, 疾咒環SummonModifiers.critMultIncreasedPerRecentCrit— 寫入者:典範瞳SummonModifiers.critMultIncreasedCap— 寫入者:典範瞳SummonModifiers.freshMeatCritChancePlus— 新生髓(甦醒憤怒):+(2~3.9)% 暴擊率、+(50~69)% 暴擊加成, 持續「10% 召喚物的持續時間,最多 10 秒」。 ⏳ 待接:要有召喚物版的狀態容器才掛得上去;數值已經填好。 寫入者:新生髓SummonModifiers.freshMeatCritMultPlus— 寫入者:新生髓SummonModifiers.freshMeatDurationRatio— 寫入者:新生髓SummonModifiers.freshMeatDurationCapSeconds— 寫入者:新生髓SummonModifiers.feedingFrenzyChancePercent— 寫入者:狂噬鈴SummonModifiers.allElementalResistPlus— 寫入者:元素旌SummonModifiers.allMaxElementalResistPlus— 寫入者:元素旌SummonModifiers.appliesExposureOnHit— 寫入者:元素旌SummonModifiers.guardianCarriesAura— 寫入者:聖衛環SummonModifiers.auraRequiresMinion— 寫入者:衛靈契SummonModifiers.transfusionSouls— 寫入者:渡血脈SummonModifiers.phantasmOnKillChancePercent— 寫入者:幻靈匣
只讀不寫 —— 讀取端做好了,沒有任何引晶餵值(12)
GemModifiers.projectilePierceAll— 讀取者:DeployablePayload, SkillProtoBow, SkillProtoGenericSpell, SkillProtoProjAttack, SkillProtoVaalGemModifiers.projectileRingSpread— 讀取者:DeployablePayload, SkillProtoBow, SkillProtoGenericShape, SkillProtoProjAttackGemModifiers.appliesCoveredInAsh— 讀取者:AilmentSystemGemModifiers.brittleChancePercent— 讀取者:AilmentSystemGemModifiers.scorchChancePercent— 讀取者:AilmentSystemGemModifiers.sapChancePercent— 讀取者:AilmentSystemGemModifiers.crushChancePercent— 讀取者:AilmentSystemGemModifiers.exposureChancePercent— 讀取者:AilmentSystem, AwakenedPenetrationGemsGemModifiers.exposureElementIndex— 讀取者:AilmentSystemGemModifiers.exposurePoints— 讀取者:AilmentSystem, AwakenedPenetrationGemsGemModifiers.tauntsOnHit— 讀取者:AilmentSystemAwakenedPenetrationGems.Mods.exposurePoints— 讀取者:AilmentSystem
三、引晶狀態 vs 實作 交叉比對
144IMPLEMENTED 已啟用
106PENDING 待機制
4LOCALIZED 本地化替代
7NOT_RECOMMENDED 建議不做
A. 有 case 分支、但狀態不是 IMPLEMENTED —— 實作在、閘門沒開(23)
- 衛靈契 PENDING 召喚物+光環保留系統 ->
SummonGemEffects - 聖衛環 PENDING 召喚物+光環保留系統 ->
SummonGemEffects - 渡血脈 PENDING 召喚物+真元系統 ->
SummonGemEffects - 幻影翎 PENDING 召喚物+投射物 ->
SummonGemEffects - 真連環鏈 PENDING 連鎖框架 ->
SupportGemEffects - 真岔矢叉 PENDING 投射物框架 ->
SupportGemEffects - 同命結 PENDING 召喚物 ->
SummonGemEffects - 幻靈匣 PENDING 召喚物 ->
SummonGemEffects - 焚魂旌 PENDING 召喚物+五行結算 ->
SummonGemEffects - 役靈鋒 PENDING 召喚物 ->
SummonGemEffects - 典範瞳 PENDING 召喚物+暴擊系統 ->
SummonGemEffects - 新生髓 PENDING 召喚物+暴擊系統 ->
SummonGemEffects - 活雷靈 PENDING 召喚物+觸發框架+連鎖框架 ->
SummonGemEffects - 役靈甲 PENDING 召喚物 ->
SummonGemEffects - 役靈翎 PENDING 召喚物 ->
SummonGemEffects - 獵殺印 PENDING 召喚物 ->
SummonGemEffects - 聖靈燈 PENDING 召喚物+觸發框架 ->
SummonGemEffects - 元素旌 PENDING 召喚物+五行結算 ->
SummonGemEffects - 狂噬鈴 PENDING 召喚物 ->
SummonGemEffects - 屏靈甲 PENDING 召喚物 ->
SummonGemEffects - 聚眾旌 PENDING 召喚物 ->
SummonGemEffects - 巢裔卵 PENDING 召喚物+奉獻技能類型 ->
SummonGemEffects - 共融契 PENDING 召喚物 ->
SummonGemEffects
B. 狀態 IMPLEMENTED、但 SupportGemEffects 的 switch 裡沒有 case(0)
- 無
四、有中文效果、但沒有欄位承接
做法:把 IMPLEMENTED 引晶的 F| / G| 效果句斷詞,拿每一個概念去掃全部 215 個 .java(先看含註解、再看去掉註解的純程式碼)。去掉註解後零命中 = 沒有任何程式碼在處理這件事。
確認零命中(純程式碼)
- 「投射物傷害」 — 資料表出現 50 次,純程式碼 0 次。所有「更少投射物傷害」(並射弦 / 三疊矢 / 五疊矢 / 廣射弦 / 天落矢 / 真天落矢 / 岔矢叉…)目前都倒進全域
mods.damage的 less 桶。缺moreProjectileDamagePercent這一格 -> 一顆非投射物技能串上並射弦也會照扣。 - 「魔力恢復率」 — 純程式碼 0 次。秘湧脈
F|「秘能波動增加 30% 魔力恢復率」沒有欄位。 - 「範圍擊中傷害」 — 純程式碼 0 次。凝集稜「每層強化使被輔助的技能造成 (12~16)% 更多範圍擊中傷害」沒有欄位。
- 「近戰範圍傷害」 — 純程式碼 0 次。碾塵杵
G|「(35~49)% 更多近戰範圍傷害」目前只能倒進全域 more。 - 「元素傷害不能被反射」 — 純程式碼 0 次(本服沒有傷害反射機制)。真五行鋒的其中一條。
- 「環型發射」 — 純程式碼 0 次;欄位
projectileRingSpread存在但沒有任何寫入端(饕餮匣是 PENDING、沒有 case)。 - 「陷阱 / 地雷投擲時間」 — 連珠弦
F|的第二條。本服沒有陷阱 / 地雷系統,無欄位。
有欄位、但寫入端缺席(=上面「只讀不寫」那批的資料面對照)
- 裂風渦(穿透全部目標)->
projectilePierceAll有 5 個讀取端,PENDING 且無 case。 - 饕餮匣(環型發射)->
projectileRingSpread有 4 個讀取端,PENDING 且無 case。 - 真純暴錘(壓碎)->
crushChancePercent,PENDING 且無 case。 - 炎葬柱(餘燼纏身)->
appliesCoveredInAsh,PENDING 且無 case。 - 易碎 / 焦灼 / 殘喘機率 ->
brittleChancePercent/scorchChancePercent/sapChancePercent,全服沒有任何來源。這三個是刻意的(PoE 預設就是 0%,原始碼註解附了證據),不要為了「讓它有用」把觸發條件放寬回暴擊。
※ 這一節只列「有把握的部分」。斷詞式掃描還吐出 100 多個長句片語,絕大多數是斷詞噪音(整句當然不會逐字出現在 Java 裡),沒有列進來。要做全面盤點的話,正確做法是逐顆比對 F| / G| / Q| 行,不是靠關鍵字。
五、全欄位表(259)
| 程式欄位名 | 容器 | 型別 / 運算 | 中文語意(取自原始碼註解) | 誰寫入 | 誰讀取 | 狀態 |
|---|