Go to Page... |
Thread Tools | Display Modes |
09-06-11, 03:28 AM | #1 |
The error aboult "ADDON_ACTION_BLOCKED"
While I falling down for Vehicle in combat ,it will call sevel errors like that.
Code:
"[ADDON_ACTION_BLOCKED] 插件 'AspectPosionBar' 尝试调用保护功能 'PossessButton1:Show()'。:\n<in C code>: in function `Show'\nInterface\\FrameXML\\BonusActionBarFrame.lua:501: in function `PossessBar_UpdateState':\nInterface\\FrameXML\\BonusActionBarFrame.lua:476: in function `PossessBar_Update':\nInterface\\FrameXML\\MainMenuBar.lua:127: in function `MainMenuBar_ToPlayerArt':\nInterface\\FrameXML\\MainMenuBar.lua:63: in function `MainMenuBar_UpdateArt':\nInterface\\FrameXML\\MainMenuBar.lua:50: in function `animPostFunc':\nInterface\\FrameXML\\AnimationSystem.lua:22: in function <Interface\\FrameXML\\AnimationSystem.lua:10>:\nInterface\\FrameXML\\AnimationSystem.lua:35: in function <Interface\\FrameXML\\AnimationSystem.lua:29>:\n\n ---" This is the Addon. Code:
------------------------------------------------------------------------------------------ AspectPosionBarFrame = LibStub("AceAddon-3.0"):NewAddon("AspectPosionBarFrame", "AceEvent-3.0", "AceHook-3.0"); local L = {}; local A = AspectPosionBarFrame; A._DEBUG = false; A.name = "AspectPosionBar"; A.class = select(2, UnitClass("player")); A.enable = true; local GetSpellName = GetSpellName or GetSpellBookItemName if (GetLocale() == "zhCN") then L["左键 - 上毒主手"] = "左键 - 主手上毒"; L["右键 - 上毒副手"] = "右键 - 副手上毒"; L["中键 - 上毒投掷"] = "中键 - 投掷上毒"; L["麻醉药膏"] = "麻醉药膏"; L["速效药膏"] = "速效药膏"; L["致伤药膏"] = "致伤药膏"; L["致命药膏"] = "致命药膏"; L["麻痹药膏"] = "麻痹药膏"; L["减速药膏"] = "减速药膏"; L["埃索达"] = "埃索达"; L["塞拉摩"] = "塞拉摩"; L["奥格瑞玛"] = "奥格瑞玛"; L["幽暗城"] = "幽暗城"; L["斯通纳德"] = "斯通纳德"; L["暴风城"] = "暴风城"; L["沙塔斯"] = "沙塔斯"; L["达拉然"] = "达拉然"; L["达纳苏斯"] = "达纳苏斯"; L["铁炉堡"] = "铁炉堡"; L["银月城"] = "银月城"; L["雷霆崖"] = "雷霆崖"; L["托尔巴拉德"] = "托尔巴拉德" L["传送门: "] = "传送门:"; L["传送: "] = "传送:"; L["左键 - 传送: "] = "左键 - 传送: "; L["右键 - 传送门: "] = "右键 - 传送门: "; BINDING_HEADER_AspectPosionBar_TITLE = "守护/毒药/传送门条"; _G["BINDING_NAME_CLICK AspectPosionBarButton1:LeftButton"] = "快捷键1"; _G["BINDING_NAME_CLICK AspectPosionBarButton2:LeftButton"] = "快捷键2"; _G["BINDING_NAME_CLICK AspectPosionBarButton3:LeftButton"] = "快捷键3"; _G["BINDING_NAME_CLICK AspectPosionBarButton4:LeftButton"] = "快捷键4"; _G["BINDING_NAME_CLICK AspectPosionBarButton5:LeftButton"] = "快捷键5"; _G["BINDING_NAME_CLICK AspectPosionBarButton6:LeftButton"] = "快捷键6"; _G["BINDING_NAME_CLICK AspectPosionBarButton7:LeftButton"] = "快捷键7"; _G["BINDING_NAME_CLICK AspectPosionBarButton8:LeftButton"] = "快捷键8"; _G["BINDING_NAME_CLICK AspectPosionBarButton9:LeftButton"] = "快捷键9"; _G["BINDING_NAME_CLICK AspectPosionBarButton10:LeftButton"] = "快捷键10"; elseif (GetLocale() == "zhTW") then L["左键 - 上毒主手"] = "左鍵 - 主手上毒"; L["右键 - 上毒副手"] = "右鍵 - 副手上毒"; L["中鍵 - 上毒投掷"] = "中键 - 投擲上毒"; L["麻醉药膏"] = "麻醉毒藥"; L["速效药膏"] = "速效毒藥"; L["致伤药膏"] = "致傷毒藥"; L["致命药膏"] = "致命毒藥"; L["麻痹药膏"] = "麻痹毒藥"; L["减速药膏"] = "致殘毒藥"; L["埃索达"] = "艾克索達"; L["塞拉摩"] = "塞拉摩"; L["奥格瑞玛"] = "奧格瑪"; L["幽暗城"] = "幽暗城"; L["斯通纳德"] = "斯通納德"; L["暴风城"] = "暴風城"; L["沙塔斯"] = "撒塔斯"; L["达拉然"] = "達拉然"; L["达纳苏斯"] = "達納蘇斯"; L["铁炉堡"] = "鐵爐堡"; L["银月城"] = "銀月城"; L["雷霆崖"] = "雷霆崖"; L["托尔巴拉德"] = "托巴拉德" L["传送门: "] = "傳送門:"; L["传送: "] = "傳送:"; L["左键 - 传送: "] = "左鍵 - 傳送:"; L["右键 - 传送门: "] = "右鍵 - 傳送門:"; else L["左键 - 上毒主手"] = "左键 - 主手上毒"; L["右键 - 上毒副手"] = "右键 - 副手上毒"; L["中键 - 上毒投掷"] = "中键 - 投掷上毒"; L["麻醉药膏"] = "Anesthetic Poison"; L["速效药膏"] = "Instant Poison"; L["致伤药膏"] = "Wound Poison"; L["致命药膏"] = "Deadly Poison"; L["麻痹药膏"] = "Mind-numbing Poison"; L["减速药膏"] = "Crippling Poison"; L["埃索达"] = "埃索达"; L["塞拉摩"] = "塞拉摩"; L["奥格瑞玛"] = "奥格瑞玛"; L["幽暗城"] = "幽暗城"; L["斯通纳德"] = "斯通纳德"; L["暴风城"] = "暴风城"; L["沙塔斯"] = "撒塔斯"; L["达拉然"] = "達拉然"; L["达纳苏斯"] = "达纳苏斯"; L["铁炉堡"] = "铁炉堡"; L["银月城"] = "银月城"; L["雷霆崖"] = "雷霆崖"; L["托尔巴拉德"] = "托尔巴拉德" L["传送门: "] = "传送门:"; L["传送: "] = "传送:"; L["左键 - 传送: "] = "左键 - 传送: "; L["右键 - 传送门: "] = "右键 - 传送门: "; end A.spellsDB = { ["HUNTER"] = { [1] = 13165, -- 雄鹰守 [2] = 82661, --獵狐守護 [3] = 5118, -- 猎豹守护 [4] = 13159, -- 豹群守护 [5] = 20043, -- 野性守护 }, ["ROGUE"] = { [1] = 1784, -- 潜行 [2] = 51713, -- 暗影之舞 -- 毒药(itemID可能获取不到信息...) [3] = {t = "p", name = L["麻醉药膏"]}, [4] = {t = "p", name = L["速效药膏"]}, [5] = {t = "p", name = L["致伤药膏"]}, [6] = {t = "p", name = L["致命药膏"]}, [7] = {t = "p", name = L["麻痹药膏"]}, [8] = {t = "p", name = L["减速药膏"]}, }, ["MAGE"] = { [1] = {t = "d", name = L["埃索达"]}, [2] = {t = "d", name = L["塞拉摩"]}, [3] = {t = "d", name = L["奥格瑞玛"]}, [4] = {t = "d", name = L["幽暗城"]}, [5] = {t = "d", name = L["斯通纳德"]}, [6] = {t = "d", name = L["暴风城"]}, [7] = {t = "d", name = L["沙塔斯"]}, [8] = {t = "d", name = L["达拉然"]}, [9] = {t = "d", name = L["达纳苏斯"]}, [10] = {t = "d", name = L["铁炉堡"]}, [11] = {t = "d", name = L["银月城"]}, [12] = {t = "d", name = L["雷霆崖"]}, [13] = {t = "d", name = L["托尔巴拉德"]}, }, ["WARLOCK"] = { [1] = 47241, -- 恶魔变形61610 [2] = 688, -- 召唤小鬼 [3] = 697, -- 召唤虚空行者 [4] = 712, -- 召唤魅魔 [5] = 691, -- 召唤地狱猎犬 [6] = 30146, -- 召唤恶魔卫士 [7] = 1122, -- 地狱火 [8] = 18540, -- 末日仪式 }, }; A.ROMAN = {" IX", " VIII", " VII", " V", " IV", " III", " II"," VI", ""}; A.order = {"spells", "teleport", "items"}; A.actions = { spells = {}; teleport = {}; items = {}; }; A.tmp = { spells = {}; teleport = {}; items = {}; }; A.buttons = {}; A.hooks = {}; A.hooked = false; A.loaded = false; function A:debug(fmt, ...) if (self._DEBUG) then print(format(fmt, ...)); end end local function SecureCall( ...) local func = select(1, ...); if (type(func) == "function") then if (InCombatLockdown()) then --dwPush(func, ...); return; end pcall(...); end end function AspectPosionButton_OnLoad(self) self:SetNormalTexture(""); self:RegisterForClicks("AnyUp"); self.cooldown = _G[self:GetName() .. "Cooldown"]; self.icon = _G[self:GetName() .. "Icon"]; self.spellID = -1; self.buttonType = "AspectPosionButtonTemplate"; --11 ActionButton_UpdateHotkeys(self, self.buttonType);--11 self:RegisterEvent("UPDATE_BINDINGS")--11 end function AspectPosionButton_OnEvent(self,event,...) if event=="UPDATE_BINDINGS" then ActionButton_UpdateHotkeys(self, self.buttonType) end end function AspectPosionButton_OnEnter(self) if ( GetCVar("UberTooltips") == "1" ) then GameTooltip_SetDefaultAnchor(GameTooltip, self); else GameTooltip:SetOwner(self, "ANCHOR_RIGHT"); end local link, isItem; if (self:GetAttribute("type") == "spell") then if (self.teleportID) then isteleport = true; elseif (self.spellID) then link = GetSpellLink(self.spellID); end elseif (self:GetAttribute("type") == "item" and self.itemID) then -- _, link = GetItemInfo(self.itemID); isItem = true; end if (link) then GameTooltip:SetHyperlink(link); else GameTooltip:SetText(self.spellName); if (isItem) then GameTooltip:AddLine(L["左键 - 上毒主手"], 0.7, 0.7, 0.7); GameTooltip:AddLine(L["右键 - 上毒副手"], 0.7, 0.7, 0.7); GameTooltip:AddLine(L["中键 - 上毒投掷"], 0.7, 0.7, 0.7); elseif (isteleport) then GameTooltip:AddLine(L["左键 - 传送: "] .. self.spellName, 0.7, 0.7, 0.7); GameTooltip:AddLine(L["右键 - 传送门: "] .. self.spellName, 0.7, 0.7, 0.7); end end GameTooltip:Show(); end function AspectPosionButton_PostClick(self) if (self.isActive) then self:SetChecked(1); else self:SetChecked(0); end end function A:CreateButton(index) if (index <= NUM_SHAPESHIFT_SLOTS) then local button = _G["AspectPosionBarButton" .. index]; return button; end return false; end function A:CheckSpell(spellID) if sepllID=="传送 :托尔巴拉德" then sepllID = 88344 end --[[ local i = 1; local spell = GetSpellInfo(spellID); local spellName = GetSpellName(i, BOOKTYPE_SPELL); while (spellName) do if (spellName == spell) then --print(spellName) return true; end i = i + 1; spellName = GetSpellName(i, BOOKTYPE_SPELL); end ]] local spelllink=GetSpellLink(spellID) spellID=spelllink and string.match(spelllink,"spell:(%d*)") return spellID and IsSpellKnown(spellID); end function A:CheckItem(itemName) local id, name; if (itemName) then for _, i in ipairs(self.ROMAN) do name = format("%s%s", itemName, i); local count = GetItemCount(name); if (count and count > 0) then return true, name; end end end return false; end function A:hasNewSpell() if (#(self.actions) ~= #(self.tmp) or #(self.actions.spells) ~= #(self.tmp.spells) or #(self.actions.teleport) ~= #(self.tmp.teleport) or #(self.actions.items) ~= #(self.tmp.items)) then return true; end return false; end function A:CloneTable(t) assert(t and type(t) == "table", "CloneTable #! param must be a table value"); local tmp = {}; for k, v in pairs(t) do if (type(v) == "table") then tmp[k] = self:CloneTable(v); else tmp[k] = v; end end return tmp; end function A:UpdateAspect() self.tmp.spells = {}; self.tmp.teleport = {}; self.tmp.items = {}; if (self.spellsDB[ self.class]) then for i, spellID in ipairs(self.spellsDB[self.class]) do if (type(spellID) == "table") then if (spellID.t and spellID.t == "p") then -- 毒药 local hasItem, name = self:CheckItem(spellID.name) if (hasItem) then tinsert(self.tmp.items, name); end elseif (spellID.t and spellID.t == "d") then -- 传送门 local check1, check2 = self:CheckSpell(L["传送门: "] .. spellID.name), self:CheckSpell(L["传送: "] .. spellID.name); if (check1 or check2) then tinsert(self.tmp.teleport, spellID.name); end end else if (self:CheckSpell(spellID)) then tinsert(self.tmp.spells, spellID); end end end end if (self:hasNewSpell()) then self.actions = self:CloneTable(self.tmp); return true; end return false; end function A:CreateBar() for i = 1, NUM_SHAPESHIFT_SLOTS do A.buttons[i] = self:CreateButton(i); end end function A:GetNumShapeshiftForms() local num = #(self.actions.spells) + #(self.actions.items) + #(self.actions.teleport); num = (num > 0 and num) or GetNumShapeshiftForms() or 0; if (num > NUM_SHAPESHIFT_SLOTS) then num = NUM_SHAPESHIFT_SLOTS; -- 猜测有错误 end return tonumber(num); end function A:IsBuffActive(name) local i = 1; local buffName = UnitBuff("player", i); while (buffName) do if (buffName == name) then return i; end i = i +1; buffName = UnitBuff("player", i); end return false; end function A:GetShapeshiftFormInfo(buttonId) local isActive, isCastable, name, _, texture, type; local sn = #(self.actions.spells) local tn = #(self.actions.teleport); if (self.actions["spells"][buttonId]) then name, _, texture = GetSpellInfo(self.actions.spells[buttonId]); isActive = self:IsBuffActive(name); isCastable = true; type = "spell"; elseif (self.actions["teleport"][buttonId - sn]) then _, _, texture = GetSpellInfo(L["传送: "] .. self.actions.teleport[buttonId - sn]) texture = texture or select(3,GetSpellInfo(L["传送门: "] .. self.actions.teleport[buttonId - sn])) --11 name = self.actions.teleport[buttonId - sn]; isActive = false; isCastable = true; type = "teleport"; elseif (self.actions["items"][buttonId - sn - tn]) then name, _, _, _, _, _, _, _, _, texture = GetItemInfo(self.actions.items[buttonId - sn - tn]); isActive = false; isCastable = true; type = "item"; end if (not texture) then texture, name, isActive, isCastable = GetShapeshiftFormInfo(buttonId); end --self:debug("texture: %s name: %s", texture, name); return texture, name or "", isActive, isCastable, type; end function A:GetShapeshiftForm(var) local texture, name, isActive, isCastable; for i=1, NUM_SHAPESHIFT_SLOTS, 1 do texture, name, isActive, isCastable = self:GetShapeshiftFormInfo(i); if (isActive) then return i; end end end function A:GetShapeshiftFormCooldown(buttonId) local sn = #(self.actions.spells); local tn = #(self.actions.teleport); if (self.actions.spells and self.actions.spells[buttonId]) then local name = GetSpellInfo(self.actions.spells[buttonId]); return GetSpellCooldown(name); --[[ elseif (self.actions.teleport and self.actions.teleport[buttonId - sn]) then local name = GetSpellInfo(self.actions.teleport[buttonId - sn]); return GetItemCooldown(name); elseif (self.actions.items and self.actions.items[buttonId - sn - tn]) then return GetItemCooldown(self.actions.items[buttonId - sn - tn]); ]] end return GetShapeshiftFormCooldown(buttonId); end function A:UpdateAspectCooldown() local numForms = self:GetNumShapeshiftForms(); local start, duration, enable, cooldown, button; for i=1, numForms do button = self.buttons[i]; cooldown = _G[button:GetName() .. "Cooldown"]; start, duration, enable = self:GetShapeshiftFormCooldown(i); if (cooldown and start and duration) then CooldownFrame_SetTimer(cooldown, start, duration, enable); end end end function A:AspectBarUpdate() if not InCombatLockdown() then--for blocked local numForms = self:GetNumShapeshiftForms(); if (numForms > 0) then if ( numForms == 1 ) then AspectPosionBarMiddle:Hide(); AspectPosionBarRight:SetPoint("LEFT", "AspectPosionBarLeft", "LEFT", 12, 0); SecureCall(AspectPosionBarButton1.ClearAllPoints, AspectPosionBarButton1); SecureCall(AspectPosionBarButton1.SetPoint, AspectPosionBarButton1, "BOTTOMLEFT", "AspectPosionBar", "BOTTOMLEFT", 12, 3); elseif ( numForms == 2 ) then AspectPosionBarMiddle:Hide(); AspectPosionBarRight:SetPoint("LEFT", "AspectPosionBarLeft", "RIGHT", 0, 0); else AspectPosionBarMiddle:Show(); AspectPosionBarMiddle:SetPoint("LEFT", "AspectPosionBarLeft", "RIGHT", 0, 0); AspectPosionBarMiddle:SetWidth(37 * (numForms-2)); AspectPosionBarMiddle:SetTexCoord(0, numForms-2, 0, 1); AspectPosionBarRight:SetPoint("LEFT", "AspectPosionBarMiddle", "RIGHT", 0, 0); end SecureCall(AspectPosionBar.Show, AspectPosionBar); else SecureCall(AspectPosionBar.Hide, AspectPosionBar); end end self:AspectBarUpdateState(); end function A:AspectBarUpdateState() local numForms = self:GetNumShapeshiftForms(); self:debug("number forms %d", numForms); local texture, name, isActive, isCastable, type; local button, icon, cooldown, ssb; local start, duration, enable; local sn = #(self.actions.spells); local tn = #(self.actions.teleport); for i=1, NUM_SHAPESHIFT_SLOTS do button =self.buttons[i]; if ( i <= numForms ) then texture, name, isActive, isCastable, type = self:GetShapeshiftFormInfo(i); button.icon:SetTexture(texture); if ( texture ) then button.cooldown:Show(); else button.cooldown:Hide(); end self:UpdateAspectCooldown(); if ( isActive ) then button:SetChecked(1); button.isActive = true; else button:SetChecked(0); button.isActive = false; end if ( isCastable ) then button.icon:SetVertexColor(1.0, 1.0, 1.0); else button.icon:SetVertexColor(0.4, 0.4, 0.4); end if (type == "spell") then SecureCall(button.SetAttribute, button, "type", "spell"); SecureCall(button.SetAttribute, button, "spell", name); button.spellID = self.actions.spells[i]; elseif (type == "teleport") then SecureCall(button.SetAttribute, button, "type", "spell"); SecureCall(button.SetAttribute, button, "spell1", name~=L["托尔巴拉德"] and L["传送: "] .. name or 88344);--11 SecureCall(button.SetAttribute, button, "spell2", L["传送门: "] .. name); button.teleportID = true; elseif (type == "item") then SecureCall(button.SetAttribute, button, "type", "item"); SecureCall(button.SetAttribute, button, "item", name); SecureCall(button.SetAttribute, button, "target-slot1", "16"); SecureCall(button.SetAttribute, button, "target-slot2", "17"); SecureCall(button.SetAttribute, button, "target-slot3", "18");--11 button.itemID = self.actions.items[i - sn - tn]; end button.spellName = name; SecureCall(button.Show, button); else SecureCall(button.Hide, button); end end self:UpdateItemCount(); SecureCall(UIParent_ManageFramePositions); end function A:UpdateItemCount() local button, count, label; for i=1, NUM_SHAPESHIFT_SLOTS do button =self.buttons[i]; if (button:IsShown() and button:GetAttribute("type") == "item") then count = GetItemCount(button:GetAttribute("item")); label = _G[button:GetName() .. "Count"]; label:SetText(count); if (count > 9) then label:SetTextColor(0.0, 1.0, 0.0) elseif (count > 4) then label:SetTextColor(1.0, 1.0, 0.0) elseif (count > 0) then label:SetTextColor(1.0, 0.0, 0.0) end elseif _G[button:GetName() .. "Count"] then--11 _G[button:GetName() .. "Count"]:SetText("") end end end function A:UNIT_AURA(event, unit) if (unit == "player") then self:AspectBarUpdate(); end end function A:LEARNED_SPELL_IN_TAB() if (self:UpdateAspect()) then self:AspectBarUpdate(); --RePositionPetActionBar(); end end function A:ACTIONBAR_UPDATE_USABLE() self:AspectBarUpdate(); end function A:ACTIONBAR_UPDATE_COOLDOWN() self:UpdateAspectCooldown(); end function A:UPDATE_BINDINGS(self,actionButtonType) local numForms = A:GetNumShapeshiftForms(); --ClearOverrideBindings(ShapeshiftBarFrame); for i = 1, numForms do local buttonName = "AspectPosionBarButton" .. i; local key1, key2 = GetBindingKey("SHAPESHIFTBUTTON"..i); if (key1) then --SetOverrideBindingClick(AspectPosionBar, true, key1, buttonName); end if (key2) then --SetOverrideBindingClick(AspectPosionBar, true, key2, buttonName); end end end function A:SPELLS_CHANGED() if (self:UpdateAspect()) then self:AspectBarUpdate(); --RePositionPetActionBar(); end self:UnregisterEvent("SPELLS_CHANGED"); end function A:BAG_UPDATE() if (self:UpdateAspect()) then self:AspectBarUpdate(); --RePositionPetActionBar(); else self:UpdateItemCount(); end end function A:PLAYER_ENTERING_WORLD() self:AspectBarUpdate(); if not ChatFrame1:IsUserPlaced() then--11 ChatFrame1:SetPoint("BOTTOMLEFT",UIParent, "BOTTOMLEFT" ,32 ,155) ChatFrame1:SetUserPlaced(true) end end function A:UIParent_ManageFramePositions() if (not self.enable) then return end local hasBottomLeft; if ( MultiBarBottomLeft:IsShown() ) then hasBottomLeft = 1; end local YOffset = hasBottomLeft and 45 or 0; if ( ReputationWatchBar:IsShown() and MainMenuExpBar:IsShown() ) then YOffset = YOffset + 8; end if ( MainMenuBarMaxLevelBar:IsShown() ) then YOffset = YOffset -5; end if ( hasBottomLeft ) then if ( AspectPosionBar ) then AspectPosionBarLeft:SetAlpha(0); AspectPosionBarRight:SetAlpha(0); AspectPosionBarMiddle:SetAlpha(0); end else if ( AspectPosionBar ) then if ( self:GetNumShapeshiftForms() > 2 ) then AspectPosionBarMiddle:SetAlpha(1); end AspectPosionBarLeft:SetAlpha(1); AspectPosionBarRight:SetAlpha(1); end end self:debug("UIParent_ManageFramePositions YOffset %d", YOffset); --SecureCall(AspectPosionBar.ClearAllPoints, AspectPosionBar);--11 --SecureCall(AspectPosionBar.SetPoint, AspectPosionBar, "BOTTOMLEFT", "MainMenuBar", "TOPLEFT", 80, YOffset); end ----------------------------------------- -- OnX ----------------------------------------- function A:OnModuleEnable() self:RegisterEvent("UNIT_AURA"); self:RegisterEvent("SPELLS_CHANGED"); self:RegisterEvent("LEARNED_SPELL_IN_TAB"); self:RegisterEvent("ACTIONBAR_UPDATE_USABLE"); self:RegisterEvent("ACTIONBAR_UPDATE_COOLDOWN"); self:RegisterEvent("UPDATE_BINDINGS"); self:RegisterEvent("BAG_UPDATE"); self:RegisterEvent("PLAYER_ENTERING_WORLD"); SecureCall(ShapeshiftBarFrame.Hide, ShapeshiftBarFrame); ShapeshiftBarFrame.orgShow = ShapeshiftBarFrame.Show; ShapeshiftBarFrame.Show = DUMMY_FUNC; ShapeshiftBarFrame.orgHide = ShapeshiftBarFrame.Hide; ShapeshiftBarFrame.Hide = DUMMY_FUNC; self:SecureHook("UIParent_ManageFramePositions"); SecureCall(AspectPosionBar.ClearAllPoints, AspectPosionBar); AspectPosionBarDB = AspectPosionBarDB or {}--11 if AspectPosionBarDB.a then SecureCall(AspectPosionBar.SetPoint, AspectPosionBar, AspectPosionBarDB.a, "UIParent", AspectPosionBarDB.a, AspectPosionBarDB.x, AspectPosionBarDB.y); elseif IsAddOnLoaded("LUI") then--11 SecureCall(AspectPosionBar.SetPoint, AspectPosionBar, "BOTTOMLEFT", "ChatFrame1Tab", "TOPLEFT", 50, 5); else SecureCall(AspectPosionBar.SetPoint, AspectPosionBar, "BOTTOMLEFT", "MainMenuBar", "TOPLEFT", 80, 45); end self:AspectBarUpdate(); end function DUMMY_FUNC() end function A:OnModuleDisable() self:UnregisterAllEvents(); self:AspectBarUpdate(); self:Unhook("UIParent_ManageFramePositions"); ShapeshiftBarFrame.Show = ShapeshiftBarFrame.orgShow; ShapeshiftBarFrame.orgShow = nil; ShapeshiftBarFrame.Hide = ShapeshiftBarFrame.orgHide; ShapeshiftBarFrame.orgHide = nil; SecureCall(AspectPosionBar.Hide, AspectPosionBar); ShapeshiftBar_Update(); end function A:ToggleManageFrame(switch) if (switch) then self.enable = true; else self.enable = false; end end function A:OnInitialize() if (not self.loaded) then self.loaded = true; self:UpdateAspect(); self:CreateBar(); end end function AspectPosionBar_OnLoad(self) self:SetClampedToScreen() end function AspectPosionBar_OnEvent(self, event, arg1) end function AspectPosionBar_OnShow(self) SecureCall(UIParent_ManageFramePositions); end function AspectPosionBar_OnHide(self) SecureCall(UIParent_ManageFramePositions); end --[[function PetActionBarFrameRePosition_Toggle(switch) PetActionBarFrame:ClearAllPoints() if (switch) then PetActionBarFrame:SetPoint(poa,pob,poc,pod+350,poe) else PetActionBarFrame:SetPoint(poa,pob,poc,pod,poe) end end]] local petpo=PetActionBarFrame.SetPoint function PetActionBarFrame.SetPoint(...) if InCombatLockdown() then--for blocked return end local poa,pob,poc,pod,poe,pof=... if AspectPosionBar:IsShown() and not GetSpellLink("恶魔变形") and not A.class=="HUNTER" then--11 poe=poe+350 end petpo(poa,pob,poc,pod,poe,pof) end function AspectPosionBar_Toggle(switch) if (switch) then A:OnModuleEnable(); else A:OnModuleDisable(); end --PetActionBarFrameRePosition_Toggle(switch); end function AspectPosionBar_Jieguan(switch) local apb, ssb, la; for i=1, NUM_SHAPESHIFT_SLOTS do apb = _G["AspectPosionBarButton" .. i]; ssb = _G["ShapeshiftButton" .. i]; SecureCall(apb.ClearAllPoints, apb); if (switch) then SecureCall(apb.SetPoint, apb, "CENTER", ssb, "CENTER", 0, 0); else if (i == 1) then SecureCall(apb.SetPoint, apb, "BOTTOMLEFT", AspectPosionBar, "BOTTOMLEFT", 10, 3); else SecureCall(apb.SetPoint, apb, "LEFT", la, "RIGHT", 8, 0); end la = apb; end end if (switch) then AspectPosionBarFrame:ToggleManageFrame(false); else AspectPosionBarFrame:ToggleManageFrame(true); end SecureCall(UIParent_ManageFramePositions); end function AspectPosionBar_ShowKeyBindingFrame(key) --11 if ( key == nil ) then KeyBindingFrame_LoadUI(); ShowUIPanel(KeyBindingFrame); return; end local bindings = GetNumBindings(); for i = 1, bindings, 1 do local value = GetBinding(i); if ( value == key ) then KeyBindingFrame_LoadUI(); ShowUIPanel(KeyBindingFrame); KeyBindingFrameScrollFrameScrollBar:SetValue((i-1)*KEY_BINDING_HEIGHT); end end end Code:
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="svn://113.106.98.20/repos/Duowan-Work/UI.xsd"> <Script file="AspectPosionBar.lua"/> <CheckButton name="AspectPosionButtonTemplate" enableMouse="true" inherits="SecureActionButtonTemplate, ActionButtonTemplate" virtual="true"> <Size> <AbsDimension x="30" y="30"/> </Size> <Scripts> <OnLoad> AspectPosionButton_OnLoad(self); </OnLoad> <OnEnter> AspectPosionButton_OnEnter(self); </OnEnter> <OnEvent> AspectPosionButton_OnEvent(self,event,...); </OnEvent> <PostClick> AspectPosionButton_PostClick(self); </PostClick> <OnLeave function="GameTooltip_Hide"/> </Scripts> </CheckButton> <Frame name="AspectPosionBar" movable="true" parent="UIParent" enableMouse="true" hidden="false"> <Size> <AbsDimension x="29" y="32"/> </Size> <Anchors> <Anchor point="BOTTOMLEFT" relativeTo="MainMenuBar" relativePoint="TOPLEFT"> <Offset> <AbsDimension x="30" y="0"/> </Offset> </Anchor> </Anchors> <Layers> <Layer level="BACKGROUND"> <Texture name="$parentLeft" file="Interface\ShapeshiftBar\ShapeshiftBar"> <Size x="47" y="38"/> <Anchors> <Anchor point="BOTTOMLEFT"/> </Anchors> <TexCoords left="0" right="0.734375" top="0" bottom="0.296875"/> </Texture> <Texture name="$parentMiddle" file="Interface\ShapeshiftBar\ShapeshiftBarMiddle"> <Size x="37" y="38"/> <Anchors> <Anchor point="LEFT" relativeTo="ShapeshiftBarLeft" relativePoint="RIGHT"/> </Anchors> <TexCoords left="0" right="2" top="0" bottom="1"/> </Texture> </Layer> <Layer level="BORDER"> <Texture name="$parentRight" file="Interface\ShapeshiftBar\ShapeshiftBar"> <Size x="43" y="38"/> <Anchors> <Anchor point="LEFT" relativeTo="ShapeshiftBarMiddle" relativePoint="RIGHT"/> </Anchors> <TexCoords left="0.328125" right="1" top="0.3125" bottom="0.6015625"/> </Texture> </Layer> </Layers> <Frames> <Button name="$parentTab" frameStrata="HIGH" hidden="false" alpha="0.4"> <Size> <AbsDimension x="16" y="50"/> </Size> <Layers> <Layer level="BACKGROUND"> <Texture name="$parentTexture" file="Interface\Addons\AspectPosionBar\MOGUBarTab"> <Size> <AbsDimension x="16" y="50"/> </Size> </Texture> </Layer> </Layers> <Anchors> <Anchor point="LEFT"> <Offset> <AbsDimension x="-5" y="2"/> </Offset> </Anchor> </Anchors> <Scripts> <!-- <OnMouseDown> if (not self.isMoving) then self:GetParent():StartMoving(); self.isMoving = true; end </OnMouseDown> <OnMouseUp> if (self.ismoving) then self.ismoving = false; self:GetParent():StopMovingOrSizing(); AspectPosionBar_Jieguan(true); end </OnMouseUp> --> <OnEnter> GameTooltip:SetOwner(self, "ANCHOR_TOPLEFT") GameTooltip:ClearLines() GameTooltip:AddLine("点击拖动位置") GameTooltip:Show() </OnEnter> <OnLeave> GameTooltip:Hide() </OnLeave> <OnMouseDown> self:GetParent():StartMoving() </OnMouseDown> <OnMouseUp> self:GetParent():StopMovingOrSizing() AspectPosionBarDB.a, _, AspectPosionBarDB.a, AspectPosionBarDB.x, AspectPosionBarDB.y=self:GetParent():GetPoint() </OnMouseUp> </Scripts> <HighlightTexture file="Interface\Addons\MoguBar\MOGUBarTabHighlight" alphaMode="ADD"/> </Button> <CheckButton name="$parentButton1" inherits="AspectPosionButtonTemplate" id="1"> <Anchors> <Anchor point="BOTTOMLEFT"> <Offset> <AbsDimension x="10" y="3"/> </Offset> </Anchor> </Anchors> </CheckButton> <CheckButton name="$parentButton2" inherits="AspectPosionButtonTemplate" id="2"> <Anchors> <Anchor point="LEFT" relativeTo="$parentButton1" relativePoint="RIGHT"> <Offset> <AbsDimension x="8" y="0"/> </Offset> </Anchor> </Anchors> </CheckButton> <CheckButton name="$parentButton3" inherits="AspectPosionButtonTemplate" id="3"> <Anchors> <Anchor point="LEFT" relativeTo="$parentButton2" relativePoint="RIGHT"> <Offset> <AbsDimension x="7" y="0"/> </Offset> </Anchor> </Anchors> </CheckButton> <CheckButton name="$parentButton4" inherits="AspectPosionButtonTemplate" id="4"> <Anchors> <Anchor point="LEFT" relativeTo="$parentButton3" relativePoint="RIGHT"> <Offset> <AbsDimension x="7" y="0"/> </Offset> </Anchor> </Anchors> </CheckButton> <CheckButton name="$parentButton5" inherits="AspectPosionButtonTemplate" id="5"> <Anchors> <Anchor point="LEFT" relativeTo="$parentButton4" relativePoint="RIGHT"> <Offset> <AbsDimension x="7" y="0"/> </Offset> </Anchor> </Anchors> </CheckButton> <CheckButton name="$parentButton6" inherits="AspectPosionButtonTemplate" id="6"> <Anchors> <Anchor point="LEFT" relativeTo="$parentButton5" relativePoint="RIGHT"> <Offset> <AbsDimension x="7" y="0"/> </Offset> </Anchor> </Anchors> </CheckButton> <CheckButton name="$parentButton7" inherits="AspectPosionButtonTemplate" id="7"> <Anchors> <Anchor point="LEFT" relativeTo="$parentButton6" relativePoint="RIGHT"> <Offset> <AbsDimension x="7" y="0"/> </Offset> </Anchor> </Anchors> </CheckButton> <CheckButton name="$parentButton8" inherits="AspectPosionButtonTemplate" id="8"> <Anchors> <Anchor point="LEFT" relativeTo="$parentButton7" relativePoint="RIGHT"> <Offset> <AbsDimension x="7" y="0"/> </Offset> </Anchor> </Anchors> </CheckButton> <CheckButton name="$parentButton9" inherits="AspectPosionButtonTemplate" id="9"> <Anchors> <Anchor point="LEFT" relativeTo="$parentButton8" relativePoint="RIGHT"> <Offset> <AbsDimension x="7" y="0"/> </Offset> </Anchor> </Anchors> </CheckButton> <CheckButton name="$parentButton10" inherits="AspectPosionButtonTemplate" id="10"> <Anchors> <Anchor point="LEFT" relativeTo="$parentButton9" relativePoint="RIGHT"> <Offset> <AbsDimension x="7" y="0"/> </Offset> </Anchor> </Anchors> </CheckButton> </Frames> <Scripts> <OnLoad> AspectPosionBar_OnLoad(self); </OnLoad> <OnEvent> AspectPosionBar_OnEvent(self, event, arg1); </OnEvent> <OnShow> AspectPosionBar_OnShow(self); </OnShow> <OnHide> AspectPosionBar_OnHide(self); </OnHide> </Scripts> </Frame> </Ui> Last edited by cakhuang2 : 09-06-11 at 07:57 PM. |
|
09-06-11, 03:30 AM | #2 |
Problem is caused by AspectPoisonBar trying to show a secure-frame during combat. Only way to solve is to change AspectPoisonBar's code to only show secure frames out-of-combat.
|
|
09-06-11, 03:50 AM | #3 |
But this Addon have no action about "'PossessButton1" ,and the function named "SecureCall" make sure all the secure-frame will be show or hide or setpoint out-of-combat.
|
|
09-06-11, 04:10 AM | #4 |
In that case, it's probably Ace-inherited taint. An Ace component is triggering the taint, and that gets attributed to the addon that loaded that library (AspectPoisonBar being low on the alphabetical order list, probably loaded the library first). Gonna have to find the original addon responsible.
|
|
09-06-11, 05:09 PM | #5 |
Does the error still occur when AspectPoisonBar is the only addon enabled (all other addons are disabled at the character selection screen)? If it does not, then the problem is caused by some other addon, as Nibelheim suggested.
However, an addon doesn't have to call a function directly to taint it. It's entirely possible that your addon (I did not read through the code) is doing something else that indirectly taints PossessButton1, and then when the default UI tries to show that button, some part of the code path is no longer secure, and the action fails. Also, your code will be much easier to read if you use [ CODE ] tags instead of [ QUOTE ] tags around it. |
|
09-06-11, 07:34 PM | #6 | |
|
||
09-06-11, 07:52 PM | #7 | |
When I disable AspectPoisonBar the error disappear. I read through the code for many times,buy cann't find where have changed the default UI things. |
||
09-08-11, 01:11 AM | #8 |
Finally I find out the error.
The addon use code "ShapeshiftBarFrame.Show=function() end " to let the ShapeshiftBarFrame never be shown. It causes taints. |
|
WoWInterface » Developer Discussions » General Authoring Discussion » The error aboult "ADDON_ACTION_BLOCKED" |
«
Previous Thread
|
Next Thread
»
|
Display Modes |
Linear Mode |
Switch to Hybrid Mode |
Switch to Threaded Mode |
|
|