本重寫目標為 Retail 12.x / Midnight-era API。除非已在 WoW Retail 實機載入測試,否則本文件所有 API 筆記都視為文件假設。
優先使用命名空間:
C_AddOnsC_SpellC_ItemC_UnitAurasC_TooltipInfoAuraUtilC_Timer 僅透過中央調度程序或明確非熱設定除非有明確、嚴格且已文件化的正式服安全後備,不保留舊式解壓縮返回相內容層。
Warcraft Wiki 的安全執行 / taint 文件指出,AddOn 與 /script 屬於不受信任來源;一旦 taint 進入 protected/secure 路徑,戰鬥中可能會導致 Blizzard UI 動作被匱乏。 EAM 必須把避免污染修改視為架構邊界,而不只視為 bug。
實行規則:
InCombatLockdown() 為 true,延後結構性 UI 變更。forceinsecure,不嘗試繞過污染,也不加入壓制暴雪阻止行動的解決方法。Docs/15_DEVELOPMENT_ISSUE_LOG.md。下列 API 僅作 12.0.7 舊路徑與遷移稽核參考,不得直接帶入 12.1 Native backend:
C_UnitAuras.GetBuffDataByIndexC_UnitAuras.GetDebuffDataByIndexC_UnitAuras.GetAuraDataByIndexC_UnitAuras.GetAuraDataByAuraInstanceIDC_UnitAuras.GetAuraDurationC_UnitAuras.GetAuraBaseDurationC_UnitAuras.GetRefreshExtendedDurationC_UnitAuras.GetUnitAuraInstanceIDsC_UnitAuras.AddBlockedAura / C_UnitAuras.ClearBlockedAurasC_TooltipInfo.GetUnitBuffByAuraInstanceIDC_TooltipInfo.GetUnitDebuffByAuraInstanceIDAuraUtil.ForEachAuraAuraUtil.FindAuraByNameGameTooltip:SetUnitAuraUnitAura / select(10, UnitAura(...)) 後備路徑12.1 Native backend 規則:
NeverSecret 穩定錨點,不呼叫 index/slot/instance-ID Aura getter,也不保存 AuraData。AuraContainer/AuraButton 原生契約;EAM 只在 initializeFrame 綁定官方允許的顯示 Region。GetRefreshExtendedDuration、GetAuraBaseDuration、duration、expirationTime 或 timeLeft 做 Lua 算術/比較來推導 Pandemic;無安全普通數字事實時必須降級。AddBlockedAura/ClearBlockedAuras;若未來另案採用,必須先取得 12.1 文件與 PTR taint 證據。目前主線參考:
C_Spell.GetSpellCooldownC_Spell.GetSpellBaseCooldownC_Spell.GetSpellChargesC_Spell.GetSpellInfoC_Spell.GetSpellTextureC_Spell.GetSpellLinkC_Spell.IsSpellUsableC_Spell.DoesSpellExistGetSpellCooldown、GetSpellInfo、GetSpellTexture、
GetSpellLink、GetSpellCharges、IsUsableSpellC_Secrets.ShouldSpellCooldownBeSecret61304重寫規則:
C_Spell 回報。目前主線參考:
C_Item.GetItemCooldownC_Item.GetItemSpellC_Item.DoesItemExistByIDC_Container.GetItemCooldown 作為一個別名層的後備GetItemCooldown、GetItemSpellGetInventoryItemCooldownGetInventoryItemIDHeroDBC.DBC.ItemSpellEventAlert_ItemSpellCache.lua 中的大物品範圍掃描重寫規則:
目前主線參考:
GetSpecializationInfoForClassIDGetClassInfoGetSpecializationInfo重寫規則:
CLASS_TOKEN_TO_ID 匹配 WoW 類別 ID)。透過 GetSpecializationInfoForClassID(classID, specIndex) 動態檢索規範名稱(其中 classID 是 1 到 13 之間的數字,specIndex 是 1 到 4 之間的數字)。nil 或空值時,使用靜態本地化表 (EAM.L) 實作可靠的回退映射,以確保 UI 元件始終具有可讀的名稱。當數據不安全或不可用時:
issecretvalue(value):檢查某個值是否被分類為秘密。canaccessvalue(value):確定目前上下文是否有權讀取某個值。canaccesstable(table):評估表的鍵和值是否可讀。issecrettable(table) / hasanysecretvalues(table):檢查表格結構是否受限或包含機密。spellId 或 text)。TooltipData 中的直接 C_TooltipInfo 查詢 (GetUnitBuffByAuraInstanceID) 可能被標記為「秘密表」。line.leftText 解析靜態值時,請務必使用「if text and not issecretvalue(text) and canaccessvalue(text) then ... end」來防止秘密傳播。TooltipUtil.SurfaceArgs:在 12.x / Midnight 中,工具提示表是原生顯示的。 TooltipUtil.SurfaceArgs 幫助器被完全刪除;嘗試呼叫它會拋出致命的「nil value」Lua 錯誤。protected、displayOnly 或 unknown。RegisterAllEvents。TooltipUtil.SurfaceArgs 用法(始終讓本機引擎顯示參數)。SetScript("OnUpdate")。C_Timer.After(function() ...)鏈。forceinsecure 或任何 taint 繞過、抑制被阻止操作的解決方法。UNIT_AURA,也不呼叫 index/slot/instance-ID Aura getter。initializeFrame 只綁定 Icon、DurationCooldown、DurationText、ApplicationCount 與 SpellName Region;不讀 AuraData。OnShow、OnHide、IsShown、Hook 或事件推導狀態。TooltipDataProcessor.AddTooltipPostCall 依 TooltipDataType 全域註冊;callback 立即以 tooltip == GameTooltip 排除其他 Tooltip。初始化必須冪等,因 FrameXML 沒有對應的解除註冊 API。MODIFIER_STATE_CHANGED 事件開啟。TooltipData 與 data.id 通過 Secret/access/正整數檢查後顯示與暫存;候選只保留五秒且只含普通 scalar。TooltipData.id。GameTooltip:GetProcessingTooltipInfo() 與 getter metadata 是 PTR 68914 FrameXML 的實務來源,不是穩定 Generated API 契約;只有安全且來源為 GetAction 時,才以 action slot 呼叫 GetActionInfo,再由 GetMacroSpell/GetMacroItem 解析。任何 API、來源或值不可用時,一律降級為手動輸入法術/物品 ID。TooltipData、AuraData、AuraButton、Aura index/slot/instance ID,也不解析剩餘時間或 Tooltip 文字。12.1 優先由官方 session CVar tooltipShowAuraSpellIDs=1 顯示 Aura ID;CVar 不存在、設定失敗或回讀失敗時,Tooltip/Popup 必須明示「官方 ID 顯示不可用」,只接受使用者輸入已知 ID。GLOBAL_MOUSE_DOWN 只能觀察,不能抑制物品使用、裝備或 Blizzard action;12.1 AuraButton 又具 Forbidden Aspects。安全互動改為游標停留後按下精確 Ctrl+Alt,開啟 EAM 自有 Popup,再點擊 EAM 按鈕確認。OnClick、OnMouseDown、OnMouseUp,不註冊 secure action attribute,不模擬滑鼠事件。戰鬥、鍵盤焦點、Secret/不可讀值、缺少必要檢查 API、Tooltip 已隱藏、Tooltip 類型改變或候選逾時時一律 fail-closed;戰鬥中可追加安全顯示文字,但不得建立可於出戰後重播的 candidate。SavedVariables.add*Alert();action 必須先通過安全字串與四種 EAM action 白名單。只有 added/updated 通知服務刷新,unchanged 不增加 revision,也不觸發不必要刷新。本重寫目標為 Retail 12.x / Midnight-era API。除非已在 WoW Retail 實機載入測試,否則本文件所有 API 筆記都視為文件假設。
優先使用命名空間:
C_AddOnsC_SpellC_ItemC_UnitAurasC_TooltipInfoAuraUtilC_Timer 僅透過中央調度程序或明確非熱設定除非有明確、嚴格且已文件化的正式服安全後備,不保留舊式解壓縮返回相內容層。
Warcraft Wiki 的安全執行 / taint 文件指出,AddOn 與 /script 屬於不受信任來源;一旦 taint 進入 protected/secure 路徑,戰鬥中可能會導致 Blizzard UI 動作被匱乏。 EAM 必須把避免污染修改視為架構邊界,而不只視為 bug。
實行規則:
InCombatLockdown() 為 true,延後結構性 UI 變更。forceinsecure,不嘗試繞過污染,也不加入壓制暴雪阻止行動的解決方法。Docs/15_DEVELOPMENT_ISSUE_LOG.md。下列 API 僅作 12.0.7 舊路徑與遷移稽核參考,不得直接帶入 12.1 Native backend:
C_UnitAuras.GetBuffDataByIndexC_UnitAuras.GetDebuffDataByIndexC_UnitAuras.GetAuraDataByIndexC_UnitAuras.GetAuraDataByAuraInstanceIDC_UnitAuras.GetAuraDurationC_UnitAuras.GetAuraBaseDurationC_UnitAuras.GetRefreshExtendedDurationC_UnitAuras.GetUnitAuraInstanceIDsC_UnitAuras.AddBlockedAura / C_UnitAuras.ClearBlockedAurasC_TooltipInfo.GetUnitBuffByAuraInstanceIDC_TooltipInfo.GetUnitDebuffByAuraInstanceIDAuraUtil.ForEachAuraAuraUtil.FindAuraByNameGameTooltip:SetUnitAuraUnitAura / select(10, UnitAura(...)) 後備路徑12.1 Native backend 規則:
NeverSecret 穩定錨點,不呼叫 index/slot/instance-ID Aura getter,也不保存 AuraData。AuraContainer/AuraButton 原生契約;EAM 只在 initializeFrame 綁定官方允許的顯示 Region。GetRefreshExtendedDuration、GetAuraBaseDuration、duration、expirationTime 或 timeLeft 做 Lua 算術/比較來推導 Pandemic;無安全普通數字事實時必須降級。AddBlockedAura/ClearBlockedAuras;若未來另案採用,必須先取得 12.1 文件與 PTR taint 證據。目前主線參考:
C_Spell.GetSpellCooldownC_Spell.GetSpellBaseCooldownC_Spell.GetSpellChargesC_Spell.GetSpellInfoC_Spell.GetSpellTextureC_Spell.GetSpellLinkC_Spell.IsSpellUsableC_Spell.DoesSpellExistGetSpellCooldown、GetSpellInfo、GetSpellTexture、
GetSpellLink、GetSpellCharges、IsUsableSpellC_Secrets.ShouldSpellCooldownBeSecret61304重寫規則:
C_Spell 回報。目前主線參考:
C_Item.GetItemCooldownC_Item.GetItemSpellC_Item.DoesItemExistByIDC_Container.GetItemCooldown 作為一個別名層的後備GetItemCooldown、GetItemSpellGetInventoryItemCooldownGetInventoryItemIDHeroDBC.DBC.ItemSpellEventAlert_ItemSpellCache.lua 中的大物品範圍掃描重寫規則:
目前主線參考:
GetSpecializationInfoForClassIDGetClassInfoGetSpecializationInfo重寫規則:
CLASS_TOKEN_TO_ID 匹配 WoW 類別 ID)。透過 GetSpecializationInfoForClassID(classID, specIndex) 動態檢索規範名稱(其中 classID 是 1 到 13 之間的數字,specIndex 是 1 到 4 之間的數字)。nil 或空值時,使用靜態本地化表 (EAM.L) 實作可靠的回退映射,以確保 UI 元件始終具有可讀的名稱。當數據不安全或不可用時:
issecretvalue(value):檢查某個值是否被分類為秘密。canaccessvalue(value):確定目前上下文是否有權讀取某個值。canaccesstable(table):評估表的鍵和值是否可讀。issecrettable(table) / hasanysecretvalues(table):檢查表格結構是否受限或包含機密。spellId 或 text)。TooltipData 中的直接 C_TooltipInfo 查詢 (GetUnitBuffByAuraInstanceID) 可能被標記為「秘密表」。line.leftText 解析靜態值時,請務必使用「if text and not issecretvalue(text) and canaccessvalue(text) then ... end」來防止秘密傳播。TooltipUtil.SurfaceArgs:在 12.x / Midnight 中,工具提示表是原生顯示的。 TooltipUtil.SurfaceArgs 幫助器被完全刪除;嘗試呼叫它會拋出致命的「nil value」Lua 錯誤。protected、displayOnly 或 unknown。RegisterAllEvents。TooltipUtil.SurfaceArgs 用法(始終讓本機引擎顯示參數)。SetScript("OnUpdate")。C_Timer.After(function() ...)鏈。forceinsecure 或任何 taint 繞過、抑制被阻止操作的解決方法。UNIT_AURA,也不呼叫 index/slot/instance-ID Aura getter。initializeFrame 只綁定 Icon、DurationCooldown、DurationText、ApplicationCount 與 SpellName Region;不讀 AuraData。OnShow、OnHide、IsShown、Hook 或事件推導狀態。TooltipDataProcessor.AddTooltipPostCall 依 TooltipDataType 全域註冊;callback 立即以 tooltip == GameTooltip 排除其他 Tooltip。初始化必須冪等,因 FrameXML 沒有對應的解除註冊 API。MODIFIER_STATE_CHANGED 事件開啟。TooltipData 與 data.id 通過 Secret/access/正整數檢查後顯示與暫存;候選只保留五秒且只含普通 scalar。TooltipData.id。GameTooltip:GetProcessingTooltipInfo() 與 getter metadata 是 PTR 68914 FrameXML 的實務來源,不是穩定 Generated API 契約;只有安全且來源為 GetAction 時,才以 action slot 呼叫 GetActionInfo,再由 GetMacroSpell/GetMacroItem 解析。任何 API、來源或值不可用時,一律降級為手動輸入法術/物品 ID。TooltipData、AuraData、AuraButton、Aura index/slot/instance ID,也不解析剩餘時間或 Tooltip 文字。12.1 優先由官方 session CVar tooltipShowAuraSpellIDs=1 顯示 Aura ID;CVar 不存在、設定失敗或回讀失敗時,Tooltip/Popup 必須明示「官方 ID 顯示不可用」,只接受使用者輸入已知 ID。GLOBAL_MOUSE_DOWN 只能觀察,不能抑制物品使用、裝備或 Blizzard action;12.1 AuraButton 又具 Forbidden Aspects。安全互動改為游標停留後按下精確 Ctrl+Alt,開啟 EAM 自有 Popup,再點擊 EAM 按鈕確認。OnClick、OnMouseDown、OnMouseUp,不註冊 secure action attribute,不模擬滑鼠事件。戰鬥、鍵盤焦點、Secret/不可讀值、缺少必要檢查 API、Tooltip 已隱藏、Tooltip 類型改變或候選逾時時一律 fail-closed;戰鬥中可追加安全顯示文字,但不得建立可於出戰後重播的 candidate。SavedVariables.add*Alert();action 必須先通過安全字串與四種 EAM action 白名單。只有 added/updated 通知服務刷新,unchanged 不增加 revision,也不觸發不必要刷新。