WOW插件。求big blue buttonn Diy_Blue插件!就是把WOW里的红色Butt...

WOW插件制作指南_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
WOW插件制作指南
上传于||文档简介
&&W​O​W​插​件​制​作​指​南
阅读已结束,如果下载本文需要使用3下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩10页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢& 魔兽6.0分享:地精插件/宏使用心得及技巧
魔兽6.0分享:地精插件/宏使用心得及技巧
来源:NGA 作者:wwl3123 时间: 10:24:56
魔兽6.0插件分享,wod地精插件/宏使用心得、技巧以及汇总。商业大军们或者想入商业的小伙伴可以来学习一下。
  本文来源于NGACN,作者 wwl3123 &原文地址: 转载请注明出处!
一、TSM实用小技巧
  TSM食用方法见置顶教程:
  太高端/我用不了这么多功能?
  TSM的基本功能不是别的AH插件能比的~
  我们可以使用基本功能宏如下
  宏1:TSM研磨/炸矿宏(需要TSM_Destroying模块支持并且打开)
  /click TSMDestroyButton
  宏2:TSM一口价宏(此宏高能 慎用)
  /click TSMAHTabBuyoutButton
  宏3:TSM确定宏(配合上个宏食用 慎用)
  /click TSMAHConfirmationActionButton
  LZ的食用小技巧:
  没有稳定供货商?供货商恶意抬价?不怕 我们有TSM。
  以铭文买草为例:
  宏2设按键:鼠标滚轮上/宏3设按键:鼠标滚轮下。
  TSM拍卖行Shopping界面,选择***模式搜索蔚蓝颜料,得所有研磨出蔚蓝的草药列表。
  我们的目的是什么呢?从低往高扫货。点单件价格排序单价,点选第一个草,然后向上滚动鼠标滑轮。
  此时向下滚动滑轮即可一口买下 鼠标完全不用移动有木有~
  以下这种情况/手太慢低价货被人抢了?完全不用担心。
只需要一直向下滚滑轮就行啦。
二、自动订单插件BulkOrder
  我发现地精区好多人不逛插件区,插件区是个好地方。
  可能发的晚了,大部分人都用上了,反正楼主已经用了好几个CD了。造福下还没用上的地精们。
三、大军货栈资源流说明/插件
  食用前的准备说明:
  资源换材料很麻烦对不对?买一次点一个确定累不累?虽说有一键确定宏但我们是大军啊。
  这时候插件BuyEmAll就挺身而出了。
  不用设置,插件***完毕游戏内货栈商人窗口SHIFT+点击即可弹出。
  注:貌似大脚自带,LZ常年用插件区的界面包,只好自己扒了。
四、依然是大军一键每日搓CD宏
  受此贴启发[]感谢@3znt
  因为宏有字节限制而LZ的水平有限做不到把几个每日CD添加到一个宏里。所以此宏很强大。但会比较占键位。
  这里是干货
  需要多个宏配合
  首先是搓指定物品宏(蓝色字体可随专业/物品名更改)
  /cast锻造
  /run for i=1,GetNumTradeSkills()do a,_,b=GetTradeSkillInfo(i)if (a:find(&真钢锭&))and b&0 then DoTradeSkill(i,b) break end end
  然后是点击指定按键宏(蓝色X可以改成1-12任意数字,对应按键为从左到右/从上到下)
  主动作条按键代码 /Click ActionButtonX
  右下动作条按键代码 /Click MultiBarBottomRightButtonX
  左下动作条按键代码 /Click MultiBarBottomLeftButtonX
  右边动作条按键代码 /Click MultiBarRightButtonX
  左边动作条按键代码 /Click MultiBarLeftButtonX
  那么思路就出来了,直接用点击按键宏实现一键制造CD物品可行不?
  具体步骤
  以LZ锻造铭文号为例,做宏如下:
  锻造宏1
  /cast 锻造
  /run for i=1,GetNumTradeSkills()do a,_,b=GetTradeSkillInfo(i)if (a:find(&真钢锭&))and b&0 then DoTradeSkill(i,b) break end end
  锻造宏2
  /cast 锻造
  /run for i=1,GetNumTradeSkills()do a,_,b=GetTradeSkillInfo(i)if (a:find(&德拉诺锻造秘术&))and b&0 then DoTradeSkill(i,b) break end end
  铭文宏1
  /cast 铭文
  /run for i=1,GetNumTradeSkills()do a,_,b=GetTradeSkillInfo(i)if (a:find(&战争颜料&))and b&0 then DoTradeSkill(i,b) break end end
  铭文宏2
  /cast 铭文
  /run for i=1,GetNumTradeSkills()do a,_,b=GetTradeSkillInfo(i)if (a:find(&德拉诺铭文秘术&))and b&0 then DoTradeSkill(i,b) break end end
  以上四个宏分别放在左右额外动作条最上面的两个键位。
  做一键制造CD宏如下(以下为一个宏的内容)
  /Click MultiBarLeftButton1
  /Click MultiBarLeftButton2
  /Click MultiBarRightButton1
  /Click MultiBarRightButton2
  拖到动作栏任意位置,走到熔炉前无脑点击一键制造CD宏。
  以上,共需要5个宏配合使用,如不需要搓秘术则只用3个宏。
  技能精简到这种地步 相信随便一个号5个空技能栏还是能腾出来的。
  LZ已经用了2天感觉良好,推荐大军号食用,宏做成账号通用宏,任意角色随意使用。
  上面的宏均可以根据个人专业/键位放置的不同随意改用。
  这个不是懒人用的
  /run local f=GetMouseFocus(); if f then DEFAULT_CHAT_FRAME:AddMessage(f:GetName()) end
  此宏提取鼠标指向的按键代码用。
  效果如下:
五、大军全在一个仓库公会/我是强迫症
  LZ轻微强迫症,一种东西量大了不摆整齐不舒服斯基,每天大军好多材料存存取取,公会仓库乱的一塌糊涂,终于有一天LZ实在受不了了 扒到一个可以整理公会仓库的插件BankStack。
  寻找老司机
  同样是开袋即食,食用代码如下:
  /sort guild1
  公会仓库标签是2就把1改成2,34567同上。
  个人感觉不太好用但是勉强可以接受。(主要是速度太慢。)
  老司机们有更好的欢迎拿干货拍LZ脸~
六、我没有本钱/我只想做个安静的Farmer
  最近版里刷刷贴见涨,farmer最烦心的是什么?包包不够用!
  尸体上有把提布,包包却满了直接导致自动拾取略过了提布而把大量没有堆满一组的灰色物品拾取了?
  尤其是farm低级材料的农民,大量的灰色物品/白色xx肉xx水,一背包也卖不了几金,副本上不了大象/我是叮号没有大象怎么办?
  一键摧毁灰色物品宏/一键摧毁指定物品宏帮你排忧解难。
  摧毁指定--------蓝色字体可替换,替换的物品名为要摧毁的物品名/添加物品记得打引号&&
  /脚本 local a,i,j,l={&治疗药水&,&次级法力药水&,&羊排&,&果汁&}for i=1,#a do for j=1,114 do l=GetContainerItemLink(j/23,j%23)l=l and GetItemInfo(l)if l==a[i] then PickupContainerItem(j/23,j%23)DeleteCursorItem()end end end
  摧毁灰色--------点一下摧毁一件灰色物品/按住ALT键点击宏摧毁所有灰色物品
  /脚本for i=1,120 do q=GetContainerItemLink(i/23,i%23)if q and q:sub(5,10)==&9d9d9d&then if MerchantFrame:IsVisible()then UseContainerItem(i/23,i%23)else PickupContainerItem(i/23,i%23)DeleteCursorItem()if not IsAltKeyDown()end
  羡慕别的farmer进出副本快如风?
  你需要一个一键重置副本宏~
  /run ResetInstances()
  很多群众反映自己下的TSM不能用balabala,LZ英语渣好多更新器下了也用不惯。
  分享下LZ一直在用的更新器,这是更新器么啊喂。
  不知道这算不算广告贴我就不说了,上个图大家自己去下吧。
  大部分插件我都是在这更新,TSM更新频繁,自带所有模块。从没发现不稳定的情况。
  不喜欢用的也可以下完插件直接卸载,Ls的几个插件基本能找到,另外下载请去官网。
魔兽7.0重点资料:丨 |
魔兽7.0其他资讯:&|&&| &| &| &|
地图练级: &|&&| &| &| &| &| &|
新5人本: &|&&|&&|&&|&&|&&|&&|&&|
新团队本: &|&&|&&|
新专题: &|&&|&&|&&|&&|&&|
新声望攻略:
| &|&&|&&|&&|&&|&&|&&|
德拉诺之王系列动画:
魔兽6.0前瞻[分享] [插件]PVP常用LUA、宏的收集帖
[font=simhei][color=blue][size=150%]一、法术[/size][/color][/font][quote]a.--[低血量报警][collapse][code=lua]--[低血量报警] function RunicPercent_OnLoad()endframe = CreateFrame(&Frame&,&Frame&, WorldFrame)frame:SetPoint(&CENTER&)frame:SetWidth(40)--此处改大小frame:SetHeight(40)frame:Hide()frame:SetScale(1) -- this does not effect the text size.FrameText = frame:CreateFontString(nil,&ARTWORK&);FrameText:SetFontObject(GameFontNormal);FrameText:SetFont(STANDARD_TEXT_FONT, 20,&outline&)FrameText:SetTextColor(0.8,0,0,1) -- change this to change colorFrameText:SetPoint(&CENTER&,UIParent,&CENTER&,0,0)frame:SetScript(&OnEvent&, function(self, event, arg1,arg2, ...)
& &if event == &UNIT_HEALTH& then& && &FrameText:SetText(format(&%d&,UnitHealth(&player&)/UnitHealthMax(&player&)*100)..&%&)& &end& &local hp = UnitHealth(&player&) / UnitHealthMax(&player&)& &if hp & 0.60 then--此处改血量提醒百分比& && && &frame:Hide()& && && &else& && && &frame:Show()& && && &endend)frame:RegisterEvent(&UNIT_HEALTH&)frame:RegisterEvent(&PLAYER_ENTERING_WORLD&)RunicPercent_OnLoad()[/code][/collapse]b.--[玩家对目标BUFF/DEBUFF大小][collapse][code=lua]--[玩家对目标BUFF/DEBUFF大小]local function UpdateTargetAuraPositions(self, auraName, numAuras, numOppositeAuras, largeAuraList, updateFunc, maxRowWidth, offsetX)
local AURA_OFFSET_Y = 3;
local LARGE_AURA_SIZE = 24;--玩家图标大小
local SMALL_AURA_SIZE = 19;--敌对图标大小
local offsetY = AURA_OFFSET_Y;
local rowWidth = 0;
local firstBuffOnRow = 1;
for i=1, numAuras do
if ( largeAuraList[i] ) then
size = LARGE_AURA_SIZE;
offsetY = AURA_OFFSET_Y + AURA_OFFSET_Y;
size = SMALL_AURA_SIZE;
if ( i == 1 ) then
rowWidth =
self.auraRows = self.auraRows + 1;
rowWidth = rowWidth + size + offsetX;
if ( rowWidth & maxRowWidth ) then
updateFunc(self, auraName, i, numOppositeAuras, firstBuffOnRow, size, offsetX, offsetY);
rowWidth =
self.auraRows = self.auraRows + 1;
firstBuffOnRow =
offsetY = AURA_OFFSET_Y;
updateFunc(self, auraName, i, numOppositeAuras, i - 1, size, offsetX, offsetY);
endhooksecurefunc(&TargetFrame_UpdateAuraPositions&, UpdateTargetAuraPositions)[/code][/collapse]c.--[玩家法术监视][collapse][code]--[玩家法术监视]bl={,}------监视法术IDbs=30;xb=-230;yb=-200;br=10;-------位置及大小bdr=&BORDER&be=&UNIT_AURA&cbf=CreateFgi=GetSpellIbm=math.fm=math.st=STANDARD_TEXT_FONT;function cu(s) return UnitBuff(&player&,gi(s))end function Cb(i,s)local _,_,t3=gi(s)local f=cbf(&Frame&)f:SetSize(bs,bs)f.t=f:CreateTexture(nil,bdr)f.t:SetAllPoints(true)f.t:SetTexture(t3)f.f=f:CreateFontString(nil,bdr)f.f:SetFont(st,12,&OUTLINE&)f.f:SetPoint(&BOTTOMRIGHT&,0,0)end function vb(s,i,row)local b1,_,_,b4=cu(s)local f=_G[&B&..i]if b1 then f:Show()f:SetPoint(&CENTER&,xb+(bs+5)*bm((row-1)%br),yb-(bs+10)*bm(row/br))if(b4&1)then f.f:SetText(b4)end row=row+1;end function ub()for i,s in ipairs(bl)do local b,_,_,_,_,_,k=cu(s)if b then local vt=fm(k-GetTime())if (vt&=60)then vt=bm(vt/60)_G[&B&..i].c:SetText(vt..&m&)elseif vt &= 0 then _G[&B&..i].c:SetText(vt..&s&)end end end end function Cc(f)f.c=f:CreateFontString(nil,bdr)f.c:SetFont(st,14,&OUTLINE&)f.c:SetPoint(&CENTER&,0,20)end function db()for i in ipairs(bl)do _G[&B&..i]:Hide()end end for i,s in ipairs(bl)do _G[&B&..i]=Cb(i,s)Cc(_G[&B&..i])_G[&B&..i]:Hide()end function bb()db()local bw=1;for i,s in ipairs(bl)do bw=vb(s,i,bw)end end bk=cbf(&Frame&)bk:SetScript(&OnEvent&,bb)bk:SetScript(&OnUpdate&,ub)bk:RegisterEvent(be) [/code][/collapse]d.--[打断施法喊话][collapse][code]--[打断施法喊话]local AfterInterrupt = CreateFrame(&Frame&, nil, UIParent)AfterInterrupt:RegisterEvent(&COMBAT_LOG_EVENT_UNFILTERED&)local function InterruptUpdate(self, event, ...)& &if event == &COMBAT_LOG_EVENT_UNFILTERED& then& && && && &local timestamp, eventType, _, sourceGUID, sourceName, sourceFlags, sourceRaidFlags, destGUID, destName, destFlags, _, spellID, spellName, _, extraskillID, extraSkillName = ...& && &if eventType == &SPELL_INTERRUPT& and sourceName == UnitName(&player&) then& && && &SendChatMessage(&Interrupted %t's &..GetSpellLink(extraskillID), &SAY&)--喊频道修改& && &end& &endendAfterInterrupt:SetScript(&OnEvent&, InterruptUpdate)[/code][/collapse]e.--[法术ID及释放者、物品ID][collapse][code]--[法术ID及释放者、物品ID]hooksecurefunc(GameTooltip, &SetUnitBuff&, function(self,...)
local id = select(11,UnitBuff(...))
local caster = select(8,UnitBuff(...)) and UnitName(select(8,UnitBuff(...)))
self:AddLine(id and ' ')
self:AddDoubleLine(id, caster)
self:Show() end) hooksecurefunc(GameTooltip, &SetUnitDebuff&, function(self,...)
local id = select(11,UnitDebuff(...))
local caster = select(8,UnitDebuff(...)) and UnitName(select(8,UnitDebuff(...)))
self:AddLine(id and ' ')
self:AddDoubleLine(id, caster)
self:Show() end) hooksecurefunc(GameTooltip, &SetUnitAura&, function(self,...)
local id = select(11,UnitAura(...))
local caster = select(8,UnitAura(...)) and UnitName(select(8,UnitAura(...)))
self:AddLine(id and ' ')
self:AddDoubleLine(id, caster)
self:Show() end) hooksecurefunc(&SetItemRef&, function(link)
if link then
local _, id = strsplit(&:&, link)
ItemRefTooltip:AddLine(id and ' ')
ItemRefTooltip:AddLine(id)
ItemRefTooltip:Show()
end end) GameTooltip:HookScript(&OnTooltipSetSpell&, function(self)
if self.GetSpell then
local _, _, id = self:GetSpell()
self:AddLine(id and ' ')
self:AddLine(id)
self:Show()
end end) GameTooltip:HookScript(&OnTooltipSetItem&, function(self)
if self.GetItem then
local _, id = strsplit(&:&, select(2,self:GetItem()))
self:AddLine(id and ' ')
self:AddLine(id)
self:Show()
end end) [/code][/collapse]f.--[敌对技能监视][collapse][code]--[敌对技能监视]InterruptBarDB = InterruptBarDB or { scale = 1, hidden = false, lock = false, }--尺寸 隐藏 解锁local abilities = {}local orderlocal band = bit.bandlocal spellids = {& &[44572] = 30,
-- 深度冻结
[2139] = 24,
-- 法术反制
[6552] = 15,
[1766] = 15,
[8122] = 27,
-- 心灵尖啸
[15487] = 45,
[96231] = 15,
[47528] = 15,
-- 心灵冰冻
[19503] = 30,
-- 驱散射击
[34490] = 24,
-- 沉默射击
[116705] = 15,
-- 切吼手& &[80965] = 15,
-- 迎头痛击& &[19647] = 24,
-- 法术封锁
[5484] = 40,
-- 恐惧嚎叫
& &[57994] = 12,
[108194] = 30,
}for spellid,time in pairs(spellids) do& &local name,_,spellicon = GetSpellInfo(spellid)& && &abilities[name] = { icon = spellicon, duration = time }end------------------------------------------------------- Edit this table to change the order-----------------------------------------------------local order = {& &2139,
-- 法术反制
-- 法术封锁
-- 沉默射击
-- 深度冻结
-- 恐惧嚎叫
-- 心灵尖啸
-- 驱散射击
-- 心灵冰冻
-- 切吼手& &80965,
-- 迎头痛击
}----------------------------------------------------------------------------------------------------------for k,v in ipairs(order) do order[k] = GetSpellInfo(v) endlocal framelocal barlocal GetTime = GetTimelocal ipairs = ipairslocal pairs = pairslocal select = selectlocal floor = floorlocal band = bit.bandlocal GetSpellInfo = GetSpellInfolocal GROUP_UNITS = bit.bor(0xx)local activetimers = {}local size = 0local function getsize()& &size = 0& &for k in pairs(activetimers) do& && &size = size + 1& &endendlocal function InterruptBar_AddIcons()& &local x = -45
local y = 0& &local r = 0& &for _,ability in ipairs(order) do& && &local btn = CreateFrame(&Frame&,nil,bar)& && &btn:SetWidth(30)& && &btn:SetHeight(30)& &if x & (InterruptBarDB.columns * 30 - 45) then& && &btn:SetPoint(&CENTER&,bar,&CENTER&,x,y)
else& && &x = x-(InterruptBarDB.columns * 30)& && &y = y-30
btn:SetPoint(&Center&,bar,&Center&,x,y)
end& && &btn:SetFrameStrata(&LOW&)& && && && &local cd = CreateFrame(&Cooldown&,nil,btn)& && &cd.noomnicc = true& && &cd.noCooldownCount = true& && &cd:SetAllPoints(true)& && &cd:SetFrameStrata(&MEDIUM&)& && &cd:Hide()& && && && &local texture = btn:CreateTexture(nil,&BACKGROUND&)& && &texture:SetAllPoints(true)& && &texture:SetTexture(abilities[ability].icon)& && &texture:SetTexCoord(0.07,0.9,0.07,0.90)& && && &local text = cd:CreateFontString(nil,&ARTWORK&)& && &text:SetFont(STANDARD_TEXT_FONT,18,&OUTLINE&)& && &text:SetTextColor(1,1,0,1)& && &text:SetPoint(&LEFT&,btn,&LEFT&,2,0)& && && && &btn.texture = texture& && &btn.text = text& && &btn.duration = abilities[ability].duration& && &btn.cd = cd& && && && &bar[ability] = btn& && && && &x = x + 30& &endendlocal function InterruptBar_SavePosition()& &local point, _, relativePoint, xOfs, yOfs = bar:GetPoint()& &if not InterruptBarDB.Position then & && &InterruptBarDB.Position = {}& &end& &InterruptBarDB.Position.point = point& &InterruptBarDB.Position.relativePoint = relativePoint& &InterruptBarDB.Position.xOfs = xOfs& &InterruptBarDB.Position.yOfs = yOfsendlocal function InterruptBar_LoadPosition()& &if InterruptBarDB.Position then& && &bar:SetPoint(InterruptBarDB.Position.point,UIParent,InterruptBarDB.Position.relativePoint,InterruptBarDB.Position.xOfs,InterruptBarDB.Position.yOfs)& &else& && &bar:SetPoint(&BOTTOM&, CastingBarFrame, &TOP&, 0, 100)& &endendlocal function InterruptBar_UpdateBar()& &bar:SetScale(InterruptBarDB.scale)& &if InterruptBarDB.hidden then& && &for _,v in ipairs(order) do bar[v]:Hide() end& &else& && &for _,v in ipairs(order) do bar[v]:Show() end& &end& &if InterruptBarDB.lock then& && &bar:EnableMouse(false)& &else& && &bar:EnableMouse(true)& &endendlocal function InterruptBar_CreateBar()& &bar = CreateFrame(&Frame&, nil, UIParent)& &bar:SetMovable(true)& &bar:SetWidth(120)& &bar:SetHeight(30)& &bar:SetClampedToScreen(true) & &bar:SetScript(&OnMouseDown&,function(self,button) if button == &LeftButton& then self:StartMoving() end end)& &bar:SetScript(&OnMouseUp&,function(self,button) if button == &LeftButton& then self:StopMovingOrSizing() InterruptBar_SavePosition() end end)& &bar:Show()& && &InterruptBar_AddIcons()& &InterruptBar_UpdateBar()& &InterruptBar_LoadPosition()endlocal function InterruptBar_UpdateText(text,cooldown)& &if cooldown & 10 then & && &if cooldown &= 0.5 then& && && &text:SetText(&&)& && &else& && && &text:SetFormattedText(& %d&,cooldown)& && &end& &else& && &text:SetFormattedText(&%d&,cooldown)& &end& &if cooldown & 6 then & && &text:SetTextColor(1,0,0,1)& &else & && &text:SetTextColor(1,1,0,1) & &end& &if cooldown & 60 then& && &text:SetFont(STANDARD_TEXT_FONT,14,&OUTLINE&)& &else& && &text:SetFont(STANDARD_TEXT_FONT,18,&OUTLINE&)& &endendlocal function InterruptBar_StopAbility(ref,ability)& &if InterruptBarDB.hidden then ref:Hide() end& &if activetimers[ability] then activetimers[ability] = nil end& &ref.text:SetText(&&)& &ref.cd:Hide()endlocal time = 0local function InterruptBar_OnUpdate(self, elapsed)& &time = time + elapsed& &if time & 0.25 then& && &getsize()& && &for ability,ref in pairs(activetimers) do& && && &ref.cooldown = ref.start + ref.duration - GetTime()& && && &if ref.cooldown &= 0 then& && && && &InterruptBar_StopAbility(ref,ability)& && && &else & && && && &InterruptBar_UpdateText(ref.text,floor(ref.cooldown+0.5))& && && &end& && &end& && &if size == 0 then frame:SetScript(&OnUpdate&,nil) end& && &time = time - 0.25& &endendlocal function InterruptBar_StartTimer(ref,ability)& &if not ref then return end& &if InterruptBarDB.hidden then& && &ref:Show()& &end& &if not activetimers[ability] then& && &local duration& && &activetimers[ability] = ref& && &ref.cd:Show()& && &ref.cd:SetCooldown(GetTime()-0.40,ref.duration)& && &ref.start = GetTime()& && &InterruptBar_UpdateText(ref.text,ref.duration)& &end& &frame:SetScript(&OnUpdate&,InterruptBar_OnUpdate)endlocal function InterruptBar_COMBAT_LOG_EVENT_UNFILTERED(...)& &local spellID, ability, useSecondDuration& &return function(_, eventtype, _, _, srcName, srcFlags, _, _, dstName, dstFlags, _, id)& && &if (band(srcFlags, 0x) == 0x and eventtype == &SPELL_CAST_SUCCESS&) then & && && &spellID = id& && &else& && && &return& && &end& && &useSecondDuration = false& && &ability = GetSpellInfo(spellID)& && &if abilities[ability] then& && && && && && &InterruptBar_StartTimer(bar[ability],ability)& && &end& &endendInterruptBar_COMBAT_LOG_EVENT_UNFILTERED = InterruptBar_COMBAT_LOG_EVENT_UNFILTERED()local function InterruptBar_ResetAllTimers()& &for _,ability in ipairs(order) do& && &InterruptBar_StopAbility(bar[ability])& &end& &active = 0endlocal function InterruptBar_PLAYER_ENTERING_WORLD(self)& &InterruptBar_ResetAllTimers()endlocal function InterruptBar_Reset()& &InterruptBarDB = { scale = 1, hidden = false, lock = false }& &InterruptBar_UpdateBar()& &InterruptBar_LoadPosition()endlocal function InterruptBar_Test()& &for _,ability in ipairs(order) do& && &InterruptBar_StartTimer(bar[ability],ability)& &endendlocal cmdfuncs = {& &scale = function(v) InterruptBarDB.scale = InterruptBar_UpdateBar() end,& &hidden = function() InterruptBarDB.hidden = not InterruptBarDB. InterruptBar_UpdateBar() end,& &lock = function() InterruptBarDB.lock = not InterruptBarDB. InterruptBar_UpdateBar() end,& &reset = function() InterruptBar_Reset() end,& &test = function() InterruptBar_Test() end,
columns = function(v) InterruptBarDB.columns = v ChatFrame1:AddMessage(&Type '/console reloadui' Or reload Wow to update the interface of InterruptBar.&,0,1,0)
end,}local cmdtbl = {}function InterruptBar_Command(cmd)& &for k in ipairs(cmdtbl) do& && &cmdtbl[k] = nil& &end& &for v in gmatch(cmd, &[^ ]+&) do
& &tinsert(cmdtbl, v)
local cb = cmdfuncs[cmdtbl[1]]
if cb then
& &local s = tonumber(cmdtbl[2])
& &ChatFrame1:AddMessage(&InterruptBar Options | /ib &option&&,0,1,0)
& &ChatFrame1:AddMessage(&-- scale &number& | value: & .. InterruptBarDB.scale,0,1,0)
& &ChatFrame1:AddMessage(&-- hidden (toggle) | value: & .. tostring(InterruptBarDB.hidden),0,1,0)
& &ChatFrame1:AddMessage(&-- lock (toggle) | value: & .. tostring(InterruptBarDB.lock),0,1,0)
& &ChatFrame1:AddMessage(&-- test (execute)&,0,1,0)
& &ChatFrame1:AddMessage(&-- reset (execute)&,0,1,0)
ChatFrame1:AddMessage(&-- columns &number& | value: & .. InterruptBarDB.columns,0,1,0)
endendlocal function InterruptBar_OnLoad(self)& &self:RegisterEvent(&PLAYER_ENTERING_WORLD&)& &self:RegisterEvent(&COMBAT_LOG_EVENT_UNFILTERED&)& &if not InterruptBarDB.scale then InterruptBarDB.scale = 1 end
if not InterruptBarDB.columns then InterruptBarDB.columns = 4 end& &if not InterruptBarDB.hidden then InterruptBarDB.hidden = false end& &if not InterruptBarDB.lock then InterruptBarDB.lock = false end& &InterruptBar_CreateBar()& && &SlashCmdList[&InterruptBar&] = InterruptBar_Command& &SLASH_InterruptBar1 = &/ib&& && &ChatFrame1:AddMessage(&Interrupt Bar by Kollektiv. Type /ib for options.&,0,1,0)endlocal eventhandler = {& &[&VARIABLES_LOADED&] = function(self) InterruptBar_OnLoad(self) end,& &[&PLAYER_ENTERING_WORLD&] = function(self) InterruptBar_PLAYER_ENTERING_WORLD(self) end,& &[&COMBAT_LOG_EVENT_UNFILTERED&] = function(self,...) InterruptBar_COMBAT_LOG_EVENT_UNFILTERED(...) end,}local function InterruptBar_OnEvent(self,event,...)& &eventhandler[event](self,...)endframe = CreateFrame(&Frame&,nil,UIParent)frame:SetScript(&OnEvent&,InterruptBar_OnEvent)frame:RegisterEvent(&VARIABLES_LOADED&)[/code][/collapse][/quote][font=simhei][color=blue][size=150%]二、框体[/size][/color][/font][quote]a.--[头像位置大小及施法条修改][collapse][code]--[头像位置大小及施法条修改]TargetFrame:ClearAllPoints()TargetFrame:SetPoint(&CENTER&, UIParent, &CENTER&,-220, -40)--目标头像位置FocusFrame:ClearAllPoints()FocusFrame:SetPoint(&CENTER&, UIParent, &CENTER&, 250, -40)--焦点头像位置TargetFrameSpellBar:ClearAllPoints()TargetFrameSpellBar:SetPoint(&BOTTOM&, TargetFrame, &TOP&)--目标施法条位置TargetFrameSpellBar.SetPoint = function() endFocusFrameSpellBar:ClearAllPoints()FocusFrameSpellBar:SetPoint(&BOTTOM&, FocusFrame, &TOP&)--焦点施法条位置FocusFrameSpellBar.SetPoint = function() endFocusFrameSpellBar:SetScale(1.2)--焦点施法条大小TargetFrameSpellBar:SetScale(1.2)--目标施法条大小[/code][/collapse]b.--[头像显示职业图标][collapse][code]--[头像显示职业图标]hooksecurefunc(&UnitFramePortrait_Update&,function(self)
if self.portrait then
if UnitIsPlayer(self.unit) then
local t = CLASS_ICON_TCOORDS[select(2, UnitClass(self.unit))]
self.portrait:SetTexture(&Interface\\TargetingFrame\\UI-Classes-Circles&)
self.portrait:SetTexCoord(unpack(t))
self.portrait:SetTexCoord(0,1,0,1)
end end) [/code][/collapse]c.--[错误框体位置及透明度]& &[collapse][code]--[错误框体位置及透明度]UIErrorsFrame:ClearAllPoints()UIErrorsFrame:SetPoint(&RIGHT&, UIParent, &RIGHT&, 0, 0)UIErrorsFrame:SetAlpha(0.6)[/code][/collapse]d.--[移动扩展技能按钮]& &[collapse][code]--[移动扩展技能按钮]local extrabtn = CreateFrame(&Frame&, &ExtraBtn_holder&, UIParent)extrabtn:SetPoint(&CENTER&,350,-290)extrabtn:SetSize(160, 80)ExtraActionBarFrame:SetParent(extrabtn)ExtraActionBarFrame:ClearAllPoints()ExtraActionBarFrame:SetPoint(&CENTER&, extrabtn, &CENTER&, 0, 0)ExtraActionBarFrame.ignoreFramePositionManager = true[/code][/collapse]e.--[BUFF/DEBUFF位置大小排序修改][collapse][code]--[BUFF/DEBUFF位置大小排序修改]local config = {& &buttonsize = 35,
-- Buff 图标尺寸& &spacing = 0,
-- Buff 图标间距& &buffsperrow = 10,
-- BUFF 每行显示个数& &debuffsperrow = 5,
-- DEBUFF 每行显示个数& &debuffsgrowright = true, -- DEBUFF 往右生长& &buffsgrowright = true,& & -- BUFF 往右生长& &}------------------------------------------local font = STANDARD_TEXT_FONT& && &--字体local fontcolor = {1, 1, 0, 1}& &--文字颜色-- Default Spawn Positions默认的位置local positions = {
{ p = &TOPLEFT&,
a = UIParent, p1 = &TOPLEFT&,
-- Buff Anchor
{ p = &TOPLEFT&,
a = UIParent, p1 = &TOPLEFT&,
-- Debuff Anchor
{ p = &TOPRIGHT&,
a = UIParent, p1 = &TOPRIGHT&,
-- Enchant Anchor武器附魔}--End Configlocal function anchor(frame, r, g, b, pos1, anchor,pos2, x, y)
frame:SetBackdrop({bgFile = 'Interface\\Buttons\\WHITE8x8'})
frame:SetBackdropColor(r, g, b, 0.4)
frame:SetHeight(config.buttonsize)
frame:SetWidth(config.buttonsize)
frame:SetPoint(pos1, anchor, pos2, x, y)
frame:SetFrameStrata(&BACKGROUND&)
frame:SetClampedToScreen(true)
frame:SetAlpha(0)endlocal buffholder = CreateFrame(&Frame&, &Buffs&, UIParent)anchor(buffholder, 0, 1, 0, positions[1].p, positions[1].a,positions[1].p1, positions[1].x, positions[1].y)local debuffholder = CreateFrame(&Frame&, &Debuffs&, UIParent)anchor(debuffholder, 1, 0, 0, positions[2].p, positions[2].a,positions[2].p1, positions[2].x, positions[2].y)local enchantholder = CreateFrame(&Frame&, &TempEnchants&, UIParent)anchor(enchantholder, 0, 0, 1, positions[3].p, positions[3].a,positions[3].p1, positions[3].x, positions[3].y)local function makeitgrow(button, index, anchor,debuff,growright)
_G[button..index]:ClearAllPoints()& &local grow,pernum& &if growright then grow = 1 else grow = -1 end& &if debuff then pernum = config.debuffsperrow else pernum = config.buffsperrow end& && &if index == 1 then& && &_G[button..index]:SetPoint(&TOPRIGHT&,anchor,0,0)& &elseif index == pernum + 1 then& && &_G[button..index]:SetPoint(&TOP&,_G[button..(index-pernum)],&BOTTOM&,0,-config.spacing)& &elseif index == pernum*2 + 1 then& && &_G[button..index]:SetPoint(&TOP&,_G[button..(index-pernum)],&BOTTOM&,0,-config.spacing)& &elseif index == pernum*3 + 1 then& && &_G[button..index]:SetPoint(&TOP&,_G[button..(index-pernum)],&BOTTOM&,0,-config.spacing)& &elseif index == pernum*4 + 1 then& && &_G[button..index]:SetPoint(&TOP&,_G[button..(index-pernum)],&BOTTOM&,0,-config.spacing)& &elseif index == pernum*5 + 1 then& && &_G[button..index]:SetPoint(&TOP&,_G[button..(index-pernum)],&BOTTOM&,0,-config.spacing)& &elseif index == pernum*6 + 1 then& && &_G[button..index]:SetPoint(&TOP&,_G[button..(index-pernum)],&BOTTOM&,0,-config.spacing)& &else& && &_G[button..index]:SetPoint(&CENTER&, _G[button..(index-1)],&CENTER&,(config.buttonsize+config.spacing)*grow, 0)& &endendlocal function StyleBuffs(b,button, index, framekind, anchor,debuff,growright)& && && &local buff = button..index& && &if b then& && &if not b.skin then& &
_G[buff..&Icon&]:SetDrawLayer(&BACKGROUND&,-8)& && &_G[buff]:ClearAllPoints()& && &_G[buff]:SetHeight(config.buttonsize)& && &_G[buff]:SetWidth(config.buttonsize)& && && && &if framekind == 2 then _G[buff]:SetBackdropColor(.7,0,0,1)& && &elseif framekind == 3 then _G[buff]:SetBackdropColor(0,0,.5,1)& && &else _G[buff]:SetBackdropColor(0,0,0,1) end& && && && &_G[buff..&Count&]:SetFont(font, 13, &OUTLINE&)& && &_G[buff..&Count&]:SetTextColor(unpack(fontcolor))& && &_G[buff..&Duration&]:SetFont(font, 13, &OUTLINE&)& && && && &_G[buff..&Count&]:ClearAllPoints()& && &_G[buff..&Count&]:SetPoint(&TOPRIGHT&, 2, 0)& && &_G[buff..&Count&]:SetDrawLayer(&OVERLAY&)& && && && &_G[buff..&Duration&]:ClearAllPoints()& && &_G[buff..&Duration&]:SetPoint(&BOTTOM&)& && &_G[buff..&Duration&]:SetDrawLayer(&OVERLAY&)& && &b.skin = true& && && &end& &end& && && && &makeitgrow(button, index, anchor,debuff,growright)endlocal function UpdateBuff()
for i = 1, BUFF_ACTUAL_DISPLAY do
local b = _G[&BuffButton&..i]& && &if b then& && && &StyleBuffs(b,&BuffButton&, i, 1, buffholder,false,config.buffsgrowright)& && &end
for i = 1, BuffFrame.numEnchants do
local b = _G[&TempEnchant&..i]& && &if b then& && && &StyleBuffs(b,&TempEnchant&, i, 3, enchantholder,false,config.buffsgrowright)& && &end
endendlocal function UpdateDebuff(buttonName, index)& &local b = _G[buttonName..index]& &if b then& && &StyleBuffs(b,buttonName, index, 2, debuffholder,true,config.debuffsgrowright)& &endendlocal function updateTime(button, timeLeft)& &local duration = _G[button:GetName()..&Duration&]& &if SHOW_BUFF_DURATIONS == &1& and timeLeft then& && &duration:SetTextColor(unpack(fontcolor))& && &local d, h, m, s = ChatFrame_TimeBreakDown(timeLeft);& && &if d & 0 then& && && &duration:SetFormattedText(&%1dd&, d)& && &elseif h & 0 then& && && &duration:SetFormattedText(&%1dh&, h)& && &elseif m & 0 then& && && &duration:SetFormattedText(&%1dm&, m)& && &else& && && &duration:SetFormattedText(&%1d&, s)& && &end& &endendhooksecurefunc(&BuffFrame_UpdateAllBuffAnchors&, UpdateBuff)hooksecurefunc(&DebuffButton_UpdateAnchors&, UpdateDebuff)hooksecurefunc(&AuraButton_UpdateDuration&, updateTime)SetCVar(&consolidateBuffs&, 0)[/code][/collapse]f.--[换天赋自动换装备][collapse][code]--[换天赋自动换装备]local F = CreateFrame(&Frame&)
F:RegisterEvent(&UNIT_SPELLCAST_STOP&)
F:SetScript(&OnEvent&, function(_,_,unit,_,_,_,spell)
if unit == &player& then
if spell == 63645 then
EquipmentManager_EquipSet(&spec1&)
-- 主天赋装备名称spec1
elseif spell == 63644 then
EquipmentManager_EquipSet(&spec2&)
-- 副天赋装备名称spec2
end) [/code][/collapse]g.--[在头部、披风栏添加显示切换按键][collapse][code]--[在头部、披风栏添加显示切换按键]local checkbox = {} local function createCheckbox(slotName)
if not checkbox[slotName] then
local cb = CreateFrame(&CheckButton&, nil, _G[slotName])
cb:SetSize(20, 20)
cb:SetNormalTexture([[Interface\Buttons\UI-CheckBox-Up]])
cb:SetPushedTexture([[Interface\Buttons\UI-CheckBox-Down]])
cb:SetCheckedTexture([[Interface\Buttons\UI-CheckBox-Check]])
cb:SetHighlightTexture([[Interface\Buttons\UI-CheckBox-Highlight]])
cb:SetDisabledCheckedTexture([[Interface\Buttons\UI-CheckBox-Check-Disabled]])
cb:SetPoint(&BOTTOMRIGHT&, _G[slotName], &BOTTOMRIGHT&, 5, -5)
checkbox[slotName] = cb
end end createCheckbox(&CharacterHeadSlot&) createCheckbox(&CharacterBackSlot&) checkbox[&CharacterHeadSlot&]:SetChecked(ShowingHelm()) checkbox[&CharacterBackSlot&]:SetChecked(ShowingCloak()) checkbox[&CharacterHeadSlot&]:SetScript(&OnClick&, function() ShowHelm(not ShowingHelm()) end) checkbox[&CharacterBackSlot&]:SetScript(&OnClick&, function() ShowCloak(not ShowingCloak()) end) [/code][/collapse]h.--[显示装等和装备品质][collapse][code]--[显示装等和装备品质]local slot = {&Head&,&Neck&,&Shoulder&,&Shirt&,&Chest&,&Waist&,&Legs&,&Feet&,&Wrist&,&Hands&,&Finger0&,&Finger1&,&Trinket0&,&Trinket1&,&Back&,&MainHand&,&SecondaryHand&,&Tabard&} local ilv = {} local function createIlvText(slotName)
if not ilv[slotName] then
local fs = _G[slotName]:CreateFontString(nil, &OVERLAY&)
fs:SetPoint(&BOTTOMLEFT&, _G[slotName], &BOTTOMLEFT&, -3, -2)
fs:SetFont(STANDARD_TEXT_FONT, 11, &OUTLINE&)
ilv[slotName] = fs
end end for k, v in pairs(slot) do createIlvText(&Character&..v..&Slot&) end local function checkItem(unit, frame)
if unit then
for k, v in pairs(slot) do
local itemLink = GetInventoryItemLink(unit, k)
if itemLink then
local _,_,itemQuality,itemLv = GetItemInfo(itemLink)
local r,g,b = GetItemQualityColor(itemQuality)
ilv[frame..v..&Slot&]:SetText(itemLv)
ilv[frame..v..&Slot&]:SetTextColor(r,g,b)
ilv[frame..v..&Slot&]:SetText()
end end _G[&CharacterFrame&]:HookScript(&OnShow&, function(self)
checkItem(&player&, &Character&)
self:RegisterEvent(&UNIT_MODEL_CHANGED&) end) _G[&CharacterFrame&]:HookScript(&OnHide&, function(self)
self:UnregisterEvent(&UNIT_MODEL_CHANGED&) end) _G[&CharacterFrame&]:HookScript(&OnEvent&, function(self, event)
if event == &UNIT_MODEL_CHANGED& then checkItem(&player&, &Character&) end end) local F = CreateFrame(&Frame&)
F:RegisterEvent(&ADDON_LOADED&)
F:SetScript(&OnEvent&, function(self, event, addon)
if addon == &Blizzard_InspectUI& then
self:UnregisterEvent(&ADDON_LOADED&)
self:SetScript(&OnEvent&, nil)
for k, v in pairs(slot) do createIlvText(&Inspect&..v..&Slot&) end
checkItem(_G[&InspectFrame&].unit, &Inspect&)
_G[&InspectFrame&]:HookScript(&OnShow&, function()
self:RegisterEvent(&INSPECT_READY&)
self:RegisterEvent(&UNIT_MODEL_CHANGED&)
self:RegisterEvent(&PLAYER_TARGET_CHANGED&)
self:SetScript(&OnEvent&, function() checkItem(_G[&InspectFrame&].unit, &Inspect&) end)
_G[&InspectFrame&]:HookScript(&OnHide&, function()
self:UnregisterEvent(&PLAYER_TARGET_CHANGED&)
self:UnregisterEvent(&UNIT_MODEL_CHANGED&)
self:UnregisterEvent(&INSPECT_READY&)
self:SetScript(&OnEvent&, nil)
end) [/code][/collapse]i.--[脱战回收内存][collapse][code]--[脱战回收内存]local F = CreateFrame(&Frame&)
F:RegisterEvent(&PLAYER_REGEN_ENABLED&)
F:SetScript(&OnEvent&, function() _G.collectgarbage(&collect&) end) [/code][/collapse]j.--[目标及焦点等级替换战斗状态][collapse][code]--[目标及焦点等级替换战斗状态]local t = CreateFrame(&Frame&, UIParent)t.t = t:CreateTexture()t.t:SetTexture(&Interface\\CHARACTERFRAME\\UI-StateIcon.blp&)t.t:SetTexCoord(0.5,1,0,0.49);t.t:SetAllPoints(t)t:SetWidth(25)t:SetHeight(25)t:SetPoint(&CENTER&, TargetFrame, &CENTER&, 64, -15)-----目标位置t:Show()local function FrameOnUpdate(self)
if UnitAffectingCombat(&target&) then
self:Show()
self:Hide()
endendlocal g = CreateFrame(&Frame&)g:SetScript(&OnUpdate&, function(self) FrameOnUpdate(t) end)-- Combat State Sword FOCUSlocal f = CreateFrame(&Frame&, UIParent)f.t = f:CreateTexture()f.t:SetTexture(&Interface\\CHARACTERFRAME\\UI-StateIcon.blp&)f.t:SetTexCoord(0.5,1,0,0.49);f.t:SetAllPoints(f)f:SetWidth(25)f:SetHeight(25)f:SetPoint(&CENTER&, FocusFrame, &CENTER&, 64, -15)---焦点位置f:Show()local function FrameOnUpdateFocus(self)
if UnitAffectingCombat(&focus&) then
self:Show()
self:Hide()
endendlocal g = CreateFrame(&Frame&)g:SetScript(&OnUpdate&, function(self) FrameOnUpdateFocus(f) end)[/code][/collapse]k.--[框体位置自由移动][collapse][code]--[框体位置自由移动]local addon = CreateFrame(&Frame&)-- Used to detect 4.0 and 5.0 clientslocal cata = select(4, GetBuildInfo()) &= 40000local mop
= select(4, GetBuildInfo()) &= 50000-- Based on the frame list from NDragIt by Nemes.-- These frames are hooked on login.local frames = {
-- [&FrameName&] = true (the parent frame should be moved) or false (the frame itself should be moved)
-- for child frames (i.e. frames that don't have a name, but only a parentKey=&XX& use
-- &ParentFrameName.XX& as frame name. more than one level is supported, e.g. &Foo.Bar.Baz&)
-- Blizzard Frames
[&SpellBookFrame&] = false,
[&QuestLogFrame&] = false,
[&QuestLogDetailFrame&] = false,
[&FriendsFrame&] = false,
[&KnowledgeBaseFrame&] = true,
[&HelpFrame&] = false,
[&GossipFrame&] = false,
[&MerchantFrame&] = false,
[&MailFrame&] = false,
[&OpenMailFrame&] = false,
[&GuildRegistrarFrame&] = false,
[&DressUpFrame&] = false,
[&TabardFrame&] = false,
[&TaxiFrame&] = false,
[&QuestFrame&] = false,
[&TradeFrame&] = false,
[&LootFrame&] = false,
[&PetStableFrame&] = false,
[&StackSplitFrame&] = false,
[&PetitionFrame&] = false,
[&WorldStateScoreFrame&] = false,
[&BattlefieldFrame&] = false,
[&ArenaFrame&] = false,
[&ItemTextFrame&] = false,
[&GameMenuFrame&] = false,
[&InterfaceOptionsFrame&] = false,
[&MacOptionsFrame&] = false,
[&PetPaperDollFrame&] = true,
[&PetPaperDollFrameCompanionFrame&] = &CharacterFrame&,
[&PetPaperDollFramePetFrame&] = &CharacterFrame&,
[&PaperDollFrame&] = true,
[&ReputationFrame&] = true,
[&SkillFrame&] = true,
[&PVPFrame&] = not cata, -- changed in cataclysm
[&PVPBattlegroundFrame&] = true,
[&SendMailFrame&] = true,
[&TokenFrame&] = true,
[&InterfaceOptionsFrame&] = false,
[&VideoOptionsFrame&] = false,
[&AudioOptionsFrame&] = false,
[&BankFrame&] = false,
--[&WorldMapTitleButton&] = true, -- [&WorldMapPositioningGuide&] = true,
--[&TicketStatusFrame&] = false,
[&StaticPopup1&] = false,
--[&GhostFrame&] = false,
[&EncounterJournal&] = false, -- only in 4.2
[&RaidParentFrame&] = false,
[&TutorialFrame&] = false,
[&MissingLootFrame&] = false,
[&ScrollOfResurrectionSelectionFrame&] = false,
-- New frames in MoP
[&PVPBannerFrame&] = false,
[&PVEFrame&] = false, -- dungeon finder + challenges
[&GuildInviteFrame&] = false,
[&LudwigFrame&] = false,}if not mop then
-- Dungeon Finder was changed in 5.0, this would break the new interface
frames[&LFGParentFrame&] = false
frames[&LFDQueueFrame&] = true
frames[&LFRQueueFrame&] = true
frames[&LFRBrowseFrame&] = trueend-- Frames provided by load on demand addons, hooked when the addon is loaded.local lodFrames = {
-- AddonName = { list of frames, same syntax as above }
Blizzard_AuctionUI = { [&AuctionFrame&] = false },
Blizzard_BindingUI = { [&KeyBindingFrame&] = false },
Blizzard_CraftUI = { [&CraftFrame&] = false },
Blizzard_GMSurveyUI = { [&GMSurveyFrame&] = false },
Blizzard_InspectUI = { [&InspectFrame&] = false, [&InspectPVPFrame&] = true, [&InspectTalentFrame&] = true },
Blizzard_ItemSocketingUI = { [&ItemSocketingFrame&] = false },
Blizzard_MacroUI = { [&MacroFrame&] = false },
Blizzard_TalentUI = { [&PlayerTalentFrame&] = false },
Blizzard_TradeSkillUI = { [&TradeSkillFrame&] = false },
Blizzard_TrainerUI = { [&ClassTrainerFrame&] = false },
Blizzard_GuildBankUI = { [&GuildBankFrame&] = false, [&GuildBankEmblemFrame&] = true },
Blizzard_TimeManager = { [&TimeManagerFrame&] = false },
Blizzard_AchievementUI = { [&AchievementFrame&] = false, [&AchievementFrameHeader&] = true, [&AchievementFrameCategoriesContainer&] = &AchievementFrame& },
Blizzard_TokenUI = { [&TokenFrame&] = true },
Blizzard_ItemSocketingUI = { [&ItemSocketingFrame&] = false },
--Blizzard_GlyphUI = { [&GlyphFrame&] = true },
Blizzard_BarbershopUI = { [&BarberShopFrame&] = false },
Blizzard_Calendar = { [&CalendarFrame&] = false, [&CalendarCreateEventFrame&] = true },
Blizzard_GuildUI = { [&GuildFrame&] = false, [&GuildRosterFrame&] = true },
Blizzard_ReforgingUI = { [&ReforgingFrame&] = false, [&ReforgingFrameInvisibleButton&] = true, [&ReforgingFrame.InvisibleButton&] = true },
Blizzard_ArchaeologyUI = { [&ArchaeologyFrame&] = false },
Blizzard_LookingForGuildUI = { [&LookingForGuildFrame&] = false },
Blizzard_VoidStorageUI = { [&VoidStorageFrame&] = false, [&VoidStorageBorderFrameMouseBlockFrame&] = &VoidStorageFrame& },
Blizzard_ItemAlterationUI = { [&TransmogrifyFrame&] = false },
Blizzard_EncounterJournal = { [&EncounterJournal&] = false }, -- as of 4.3
-- New frames in MoP
Blizzard_PetJournal = { [&PetJournalParent&] = false },
Blizzard_BlackMarketUI = { [&BlackMarketFrame&] = false }, -- UNTESTED
Blizzard_ChallengesUI = { [&ChallengesLeaderboardFrame&] = false }, -- UNTESTED
Blizzard_ItemUpgradeUI = { [&ItemUpgradeFrame&] = false, }, -- UNTESTED
Blizzard_PVPUI = { [&PVPUIFrame&] = false },}local parentFrame = {}local hooked = {}local function print(msg)
DEFAULT_CHAT_FRAME:AddMessage(&DragEmAll: & .. msg)endfunction addon:PLAYER_LOGIN()
self:HookFrames(frames)endfunction addon:ADDON_LOADED(name)
local frameList = lodFrames[name]
if frameList then
self:HookFrames(frameList)
endendlocal function MouseDownHandler(frame, button)
frame = parentFrame[frame] or frame
if frame and button == &LeftButton& then
frame:StartMoving()
frame:SetUserPlaced(false)
endendlocal function MouseUpHandler(frame, button)
frame = parentFrame[frame] or frame
if frame and button == &LeftButton& then
frame:StopMovingOrSizing()
endendfunction addon:HookFrames(list)
for name, child in pairs(list) do
self:HookFrame(name, child)
endendfunction addon:HookFrame(name, moveParent)
-- find frame
-- name may contain dots for children, e.g. ReforgingFrame.InvisibleButton
local frame = _G
for s in string.gmatch(name, &%w+&) do
if frame then
frame = frame[s]
-- check if frame was found
if frame == _G then
frame = nil
local parent
if frame and not hooked[name] then
if moveParent then
if type(moveParent) == &string& then
parent = _G[moveParent]
parent = frame:GetParent()
if not parent then
print(&Parent frame not found: & .. name)
parentFrame[frame] = parent
if parent then
parent:SetMovable(true)
parent:SetClampedToScreen(false)
frame:EnableMouse(true)
frame:SetMovable(true)
frame:SetClampedToScreen(false)
self:HookScript(frame, &OnMouseDown&, MouseDownHandler)
self:HookScript(frame, &OnMouseUp&, MouseUpHandler)
hooked[name] = true
endendfunction addon:HookScript(frame, script, handler)
if not frame.GetScript then return end
local oldHandler = frame:GetScript(script)
if oldHandler then
frame:SetScript(script, function(...)
handler(...)
oldHandler(...)
frame:SetScript(script, handler)
endendaddon:SetScript(&OnEvent&, function(f, e, ...) f[e](f, ...) end)addon:RegisterEvent(&PLAYER_LOGIN&)addon:RegisterEvent(&ADDON_LOADED&)-- Hook bag frames-- This is buggy in MoPif not mop then
hooksecurefunc(&ContainerFrame_GenerateFrame&, function(frame, size, id)
if id &= NUM_BAG_FRAMES or id == KEYRING_CONTAINER then
addon:HookFrame(frame:GetName())
end)end[/code][/collapse]l.--[移除离开战场及竞技场按钮,并显示进入竞技场倒计时][collapse][code]--[移除离开战场及竞技场按钮,并显示进入竞技场倒计时]local SafeQueue = CreateFrame(&Frame&, &SafeQueue&, UIParent)local queueTimelocal queue = 0local remaining = 0SafeQueueDB = SafeQueueDB or { announce = &self& }SafeQueue:SetScript(&OnEvent&, function(self, event, ...) self[event](self, ...) end)SafeQueue:SetScript(&OnUpdate&, function(self) self:Timer() end)SafeQueue:RegisterEvent(&UPDATE_BATTLEFIELD_STATUS&)_G.PVPReadyDialog.leaveButton:Hide()_G.PVPReadyDialog.enterButton:ClearAllPoints()_G.PVPReadyDialog.enterButton:SetPoint(&BOTTOM&, PVPReadyDialog, &BOTTOM&, 0, 25)_G.PVPReadyDialog.label:SetPoint(&TOP&, 0, -22)function SafeQueue:UPDATE_BATTLEFIELD_STATUS()& &local queued& &for i=1, GetMaxBattlefieldID() do& && &local status = GetBattlefieldStatus(i)& && &if status == &queued& then& && && &queued = true& && && &if not queueTime then queueTime = GetTime() end& && &elseif status == &confirm& then& && && &if queueTime then& && && && &self:TimeWaited()& && && && &queueTime = nil& && && && &remaining = 0& && && && &queue = i& && && &end& && && && && && && &end& && &break& &end& &if not queued and queueTime then queueTime = nil endendfunction SafeQueue:Print(msg)& &DEFAULT_CHAT_FRAME:AddMessage(&|cff33ff99SafeQueue|r: & .. msg)endfunction SafeQueue:TimeWaited()& &if SafeQueueDB.announce == &off& then return end& &local secs, str, mins = floor(GetTime() - queueTime), &Queue popped && &if secs & 1 then& && &str = str .. &instantly!&& &else& && &str = str .. &after && && &if secs &= 60 then& && && &mins = floor(secs/60)& && && &str = str .. mins .. &m && && && &secs = secs%60& && &end& && &if secs%60 ~= 0 then& && && &str = str .. secs .. &s&& && &end& &end& &if SafeQueueDB.announce == &self& or not IsInGroup() then& && &self:Print(str)& &else& && &local group = IsInRaid() and &RAID& or &PARTY&& && &SendChatMessage(str, group)& &endendfunction SafeQueue:Timer()& &if _G.PVPReadyDialog:IsShown() then& && &local secs = GetBattlefieldPortExpiration(queue)& && &if secs and secs & 0 and remaining ~= secs then& && && &remaining = secs& && && &local color = secs & 20 and &f20ff20& or secs & 10 and &fffff00& or &fff0000&& && && &_G.PVPReadyDialog.label:SetText(&|cf&..color.. SecondsToTime(secs) .. &|r&)& && &end& &endendfunction SafeQueue:Command(msg)& &msg = msg or &&& &local cmd, arg = string.split(& &, msg, 2)& &cmd = string.lower(cmd or &&)& &arg = string.lower(arg or &&)& &if cmd == &announce& then& && &if arg == &off& or arg == &self& or arg == &group& then& && && &SafeQueueDB.announce = arg& && && &self:Print(&Announce set to & .. arg)& && &else& && && &self:Print(&Announce set to & .. SafeQueueDB.announce)& && && &self:Print(&Announce types are \&off\&, \&self\&, and \&group\&&)& && &end& &else& && &DEFAULT_CHAT_FRAME:AddMessage(&|cff33ff99SafeQueue v2.0|r&)& && &self:Print(&/sq announce : & .. SafeQueueDB.announce)& &endendSlashCmdList[&SafeQueue&] = function(...) SafeQueue:Command(...) endSLASH_SafeQueue1 = &/safequeue&SLASH_SafeQueue2 = &/sq&[/code][/collapse]m.--[shift+左键点击头像或者目标快速设置系统焦点,shift+左键点击空白区域则取消][collapse][code]--[shift+左键点击头像或者目标快速设置系统焦点,shift+左键点击空白区域则取消]local modifier = &shift& --按住shift,也可设置为alt或者crtllocal mouseButton = &1& --鼠标按键 1是左键、2是右键、3是中键local function SetFocusHotkey(frame)& &frame:SetAttribute(modifier..&-type&..mouseButton, &focus&)endlocal function CreateFrame_Hook(type, name, parent, template)& &if name and template == &SecureUnitButtonTemplate& then& && &SetFocusHotkey(_G[name])& &endendhooksecurefunc(&CreateFrame&, CreateFrame_Hook)local f = CreateFrame(&CheckButton&, &FocuserButton&, UIParent, &SecureActionButtonTemplate&)f:SetAttribute(&type1&, ¯o&)f:SetAttribute(¯otext&, &/focus mouseover&)SetOverrideBindingClick(FocuserButton, true, modifier..&-BUTTON&..mouseButton, &FocuserButton&)local duf = {& &PetFrame,& &PartyMemberFrame1,& &PartyMemberFrame2,& &PartyMemberFrame3,& &PartyMemberFrame4,& &PartyMemberFrame1PetFrame,& &PartyMemberFrame2PetFrame,& &PartyMemberFrame3PetFrame,& &PartyMemberFrame4PetFrame,& &PartyMemberFrame1TargetFrame,& &PartyMemberFrame2TargetFrame,& &PartyMemberFrame3TargetFrame,& &PartyMemberFrame4TargetFrame,& &TargetFrame,& &TargetFrameToT,& &TargetFrameToTTargetFrame,}for i, frame in pairs(duf) do& &SetFocusHotkey(frame)end[/code][/collapse]n.--[能量位置修改][collapse][code]--[能量位置修改]PaladinPowerBar:ClearAllPoints()PaladinPowerBar:SetPoint(&TOP&, CastingBarFrame, &BOTTOM&, 0, 0)PaladinPowerBar:SetScale(1.0)PaladinPowerBar:SetAlpha(1.0)TotemFrame:ClearAllPoints()TotemFrame:SetPoint(&RIGHT&, CastingBarFrame, &LEFT&, -10, 0)TotemFrame:SetScale(1.1)TotemFrame:SetAlpha(1.0) PriestBarFrame:ClearAllPoints()PriestBarFrame:SetPoint(&TOP&, CastingBarFrame, &BOTTOM&, 0, 0)PriestBarFrame:SetScale(1.0)PriestBarFrame:SetAlpha(1.0) RuneFrame:ClearAllPoints()RuneFrame:SetPoint(&TOP&, CastingBarFrame, &BOTTOM&, 0, 0)RuneFrame:SetScale(1.0)RuneFrame:SetAlpha(1.0)EclipseBarFrame:ClearAllPoints()EclipseBarFrame:SetPoint(&TOP&, CastingBarFrame, &BOTTOM&, 0, 0) EclipseBarFrame:SetScale(1.0)EclipseBarFrame:SetAlpha(1.0) WarlockPowerFrame:ClearAllPoints() WarlockPowerFrame:SetPoint(&TOP&, CastingBarFrame, &BOTTOM&, 0, 0) WarlockPowerFrame:SetScale(1.0) WarlockPowerFrame:SetAlpha(1.0) MonkHarmonyBar:ClearAllPoints()MonkHarmonyBar:SetPoint(&TOP&, CastingBarFrame, &BOTTOM&, 0, 0)MonkHarmonyBar:SetScale(1.0) MonkHarmonyBar:SetAlpha(1.0)[/code][/collapse]o.--[调整玩家到团队框架最后一位][collapse][code]--[调整玩家到团队框架最后一位]LoadAddOn(&Blizzard_CompactRaidFrames&) CRFSort_Group=function(t1, t2) if UnitIsUnit(t1,&player&) then return false elseif UnitIsUnit(t2,&player&) then return true else return t1 & t2 end end CompactRaidFrameContainer.flowSortFunc=CRFSort_Group[/code][/collapse][/quote][font=simhei][color=blue][size=150%]三、地图[/size][/color][/font][quote]a.--[M键大地图显示当前及鼠标指向坐标][collapse][code]--[M键大地图显示当前及鼠标指向坐标]WorldMapButton:HookScript(&OnUpdate&, function(self)& &if not self.coordText then& && &self.coordText = WorldMapFrame:CreateFontString(nil, &ARTWORK&, &GameFontGreen&)& && &self.coordText:SetPoint(&BOTTOMLEFT&, WorldMapPositioningGuide, &BOTTOMLEFT&, 130, 10)& &end& &local px, py = GetPlayerMapPosition(&player&)& &local x, y = GetCursorPosition()& &local width, height, scale = self:GetWidth(), self:GetHeight(), self:GetEffectiveScale()& &local centerX, centerY = self:GetCenter()& &x, y = (x/scale - (centerX - (width/2))) / width, (centerY + (height/2) - y/scale) / height& &if px == 0 and py == 0 and (x & 1 or y & 1 or x & 0 or y & 0) then& && &self.coordText:SetText(&&)& &elseif px == 0 and py == 0 then& && &self.coordText:SetText(format(&当前:
%d, %d&, x*100, y*100))& &elseif x & 1 or y & 1 or x & 0 or y & 0 then& && &self.coordText:SetText(format(&玩家:
%d, %d&, px*100, py*100))& &else& && &self.coordText:SetText(format(&玩家:
%d, %d&, px*100, py*100, x*100, y*100))& &endend)[/code][/collapse]b.--[右上角小地图显示当前坐标][collapse][code]--[右上角小地图显示当前坐标]MinimapCluster:SetScript(&OnUpdate&, function()& &local px, py = GetPlayerMapPosition(&player&)& &local zone = GetMinimapZoneText()& &if px == 0 and py == 0 then& && &MinimapZoneText:SetText(zone)& &else& && &MinimapZoneText:SetText((format(&(%d,%d)&, px*100, py*100))..zone)& &endend)MinimapCluster:HookScript(&OnEvent&, function(self, event, ...)& &if event == &ZONE_CHANGED_NEW_AREA& and not WorldMapFrame:IsShown() then& && &SetMapToCurrentZone()& &endend)WorldMapFrame:HookScript(&OnHide&, SetMapToCurrentZone)MiniMapWorldMapButton:Hide()MinimapZoneTextButton:SetScript(&OnClick&, function()& &if ACTIVE_CHAT_EDIT_BOX then& && &ACTIVE_CHAT_EDIT_BOX:Insert(&我在 &..MinimapZoneText:GetText())& &else& && &ToggleFrame(WorldMapFrame)& &endend)MinimapZoomIn:Hide()MinimapZoomOut:Hide()Minimap:EnableMouseWheel(true)Minimap:SetScript(&OnMouseWheel&, function(self, y)& &if y & 0 then& && &MinimapZoomIn:Click()& &else& && &MinimapZoomOut:Click()& &endend)Minimap:SetMovable(true)Minimap:SetClampedToScreen(true)Minimap:SetScript(&OnMouseDown&, function(self)& &if IsShiftKeyDown() then& && &self:ClearAllPoints()& && &self:StartMoving()& &endend)Minimap:HookScript(&OnMouseUp&, function(self) self:StopMovingOrSizing() end)[/code][/collapse]c.--[地图上标记队友名称并显示战斗或者死亡][collapse][code]--[地图上标记队友名称并显示战斗或者死亡]local function colored(class)
local colorRGB = RAID_CLASS_COLORS[class] or NORMAL_FONT_COLOR
return format(&|CFF%2x%2x%2x&, colorRGB.r*255, colorRGB.g*255, colorRGB.b*255) end local sub, GetRaidRosterInfo = string.sub, GetRaidRosterInfo hooksecurefunc(&WorldMapUnit_Update&, function(self)
if not self.group then
self.group = self:CreateFontString(nil, &OVERLAY&)
self.group:SetFont(STANDARD_TEXT_FONT, 14, &THINOUTLINE&)
self.group:SetPoint(&LEFT&, self, &RIGHT&)
self.group:SetText(&&)
if self.unit then
if string.find(self.unit, &raid&) then
local longName, _, _, _, _, class = GetRaidRosterInfo(sub(self.unit,5))
if longName then
local _, _, shortName, server = string.find(longName, &([^%-]+)%-(.+)&)
if not server then
shortName = longName
self.group:SetText(colored(class)..sub(shortName,1,6)..&|r&)
if UnitAffectingCombat(self.unit) then
self.icon:SetVertexColor(.8, 0, 0) -- 戰鬥中顏色
self:SetAlpha(1)
elseif UnitIsDeadOrGhost(self.unit) then
self.icon:SetVertexColor(0, 0, 0) -- 死亡顏色
self:SetAlpha(.7)
self:SetAlpha(.7)
end end) [/code][/collapse][/quote][font=simhei][color=blue][size=150%]四、商业[/size][/color][/font][quote]a.--[一键收取邮件或者金币][collapse][code]--[一键收取邮件或者金币]local deletedelay, t = 0.5, 0local takingOnlyCash = falselocal button, button2, waitForMail, doNothing, openAll, openAllCash, openMail, lastopened, stopOpening, onEvent, needsToWait, copper_to_pretty_money, total_cashlocal _G = _Glocal baseInboxFrame_OnClickfunction doNothing() endfunction openAll()& &if GetInboxNumItems() == 0 then return end& &button:SetScript(&OnClick&, nil)& &button2:SetScript(&OnClick&, nil)& &baseInboxFrame_OnClick = InboxFrame_OnClick& &InboxFrame_OnClick = doNothing& &button:RegisterEvent(&UI_ERROR_MESSAGE&)& &openMail(GetInboxNumItems())endfunction openAllCash()& &takingOnlyCash = true& &openAll()endfunction openMail(index)& &if not InboxFrame:IsVisible() then return stopOpening(&Need a mailbox.&) end& &if index == 0 then return stopOpening(&Reached the end.&, true) end& &local _, _, _, _, money, COD, _, numItems = GetInboxHeaderInfo(index)& &if not takingOnlyCash then& && &if money & 0 or (numItems and numItems & 0) and COD &= 0 then& && && &AutoLootMailItem(index)& && && &needsToWait = true& && &end& &elseif money & 0 then& && &TakeInboxMoney(index)& && &needsToWait = true& && &if total_cash then total_cash = total_cash - money end& &end& &local items = GetInboxNumItems()& &if (numItems and numItems & 0) or (items & 1 and index &= items) then& && &lastopened = index& && &button:SetScript(&OnUpdate&, waitForMail)& &else& && &stopOpening(&All done.&, true)& &endendfunction waitForMail(this, arg1)& &t = t + arg1& &if (not needsToWait) or (t & deletedelay) then& && &if not InboxFrame:IsVisible() then return stopOpening(&Need a mailbox.&) end& && &t = 0& && &needsToWait = false& && &button:SetScript(&OnUpdate&, nil)& && && && &local _, _, _, _, money, COD, _, numItems = GetInboxHeaderInfo(lastopened)& && &if money & 0 or ((not takingOnlyCash) and COD &= 0 and numItems and (numItems & 0)) then& && && &--The lastopened index inbox item still contains stuff we want& && && &openMail(lastopened)& && &else& && && &openMail(lastopened - 1)& && &end& &endendfunction stopOpening(msg, hide_minimap_button, ...)& &button:SetScript(&OnUpdate&, nil)& &button:SetScript(&OnClick&, openAll)& &button2:SetScript(&OnClick&, openAllCash)& &if baseInboxFrame_OnClick then& && &InboxFrame_OnClick = baseInboxFrame_OnClick& &end& &button:UnregisterEvent(&UI_ERROR_MESSAGE&)& &takingOnlyCash = false& &total_cash = nil& &needsToWait = false& &if hide_minimap_button then MiniMapMailFrame:Hide() end& &if msg then DEFAULT_CHAT_FRAME:AddMessage(&OpenAll: &..msg, ...) endendfunction onEvent(frame, event, arg1, arg2, arg3, arg4)& &if event == &UI_ERROR_MESSAGE& then& && &if arg1 == ERR_INV_FULL then& && && &stopOpening(&Stopped, inventory is full.&)& && &end& &endendlocal function makeButton(id, text, w, h, x, y)& &local button = CreateFrame(&Button&, id, InboxFrame, &UIPanelButtonTemplate&)& &button:SetWidth(w)& &button:SetHeight(h)& &button:SetPoint(&CENTER&, InboxFrame, &TOP&, x, y)& &button:SetText(text)& &return buttonendbutton = makeButton(&OpenAllButton&, &Take All&, 60, 25, -50, -410)button:SetScript(&OnClick&, openAll)button:SetScript(&OnEvent&, onEvent)button2 = makeButton(&OpenAllButton2&, &Take Cash&, 60, 25, 20, -410)button2:SetScript(&OnClick&, openAllCash)button:SetScript(&OnEnter&, function()& &GameTooltip:SetOwner(button, &ANCHOR_RIGHT&)& &GameTooltip:AddLine(string.format(&%d messages&, GetInboxNumItems()), 1, 1, 1)& &GameTooltip:Show()end)button:SetScript(&OnLeave&, function() GameTooltip:Hide() end)function copper_to_pretty_money(c)& &if c & 10000 then& && &return (&%d|cffffd700g|r%d|cffc7c7cfs|r%d|cffeda55fc|r&):format(c/10000, (c/100)%100, c%100)& &elseif c & 100 then& && &return (&%d|cffc7c7cfs|r%d|cffeda55fc|r&):format((c/100)%100, c%100)& &else& && &return (&%d|cffeda55fc|r&):format(c%100)& &endendbutton2:SetScript(&OnEnter&, function()& &if not total_cash then& && &total_cash = 0& && &for index=0, GetInboxNumItems() do& && && &total_cash = total_cash + select(5, GetInboxHeaderInfo(index))& && &end& &end& &GameTooltip:SetOwner(button, &ANCHOR_RIGHT&)& &GameTooltip:AddLine(copper_to_pretty_money(total_cash), 1, 1, 1)& &GameTooltip:Show()end)button2:SetScript(&OnLeave&, function() GameTooltip:Hide() end)[/code][/collapse]b.--[自动修理][collapse][code]--[自动修理]local AutoRepair = true local g = CreateFrame(&Frame&) g:RegisterEvent(&MERCHANT_SHOW&) g:SetScript(&OnEvent&, function()
if(AutoRepair==true and CanMerchantRepair()) then
local cost = GetRepairAllCost()
if cost & 0 then
local money = GetMoney()
if IsInGuild() then
local guildMoney = GetGuildBankWithdrawMoney()
if guildMoney & GetGuildBankMoney() then
guildMoney = GetGuildBankMoney()
if guildMoney & cost and CanGuildBankRepair() then
RepairAllItems(1)
print(format(&|cfff07100工会修理花费: %.1fg|r&, cost * 0.0001))
if money & cost then
RepairAllItems()
print(format(&|cffead000修理花费: %.1fg|r&, cost * 0.0001))
print(&Go farm newbie.&)
end end end) [/code][/collapse]c.--[自动出售灰色物品]][collapse][code]--[自动出售灰色物品]local f = CreateFrame(&Frame&)f:SetScript(&OnEvent&, function()
local c = 0
for b=0,4 do
for s=1,GetContainerNumSlots(b) do
local l = GetContainerItemLink(b, s)
local p = select(11, GetItemInfo(l))*select(2, GetContainerItemInfo(b, s))
if select(3, GetItemInfo(l))==0 and p&0 then
UseContainerItem(b, s)
PickupMerchantItem()
if c&0 then& &
local g, s, c = math.floor(c/10000) or 0, math.floor((c%1) or 0, c%100
DEFAULT_CHAT_FRAME:AddMessage(&卖灰收入&..& |cffffffff&..g..&|cffffc125g|r&..& |cffffffff&..s..&|cffc7c7cfs|r&..& |cffffffff&..c..&|cffeda55fc|r&..&.&,255,255,255)
endend) f:RegisterEvent(&MERCHANT_SHOW&)[/code][/collapse][/quote]-----------------------------------------------------------------------[font=simhei][color=blue][size=150%]使用教程[/size][/color][/font]5分钟搞定[quote][collapse]1.依次打开文件夹 World of Warcraft---Interface---AddOns,新建个文件夹,既你DIY的新插件,存入以上我给出的LUA~
例如,我新建个文件夹DIY~[img]/735/7350579/month_a215b96ab665d336a2a7b6e427d.png[/img]2.随意找个你之前下载的插件比如GladiatorlosSA等,找到文件类型叫TOC和LUA的文件,TOC只有一个,LUA可能有很多,复制其中随意一个就好了,把这两个文件放入DIY之中~
例如我复制的TOC文件是GladiatorlosSA,LUA文件是options~[img]/735/7350579/month_f9c78d6451527ebe9b5fa5d11.png[/img]3.进入DIY文件夹,首先把原来的GladiatorlosSA更改名称为DIY,然后把options更改名称为Frame。[img]/735/7350579/month_1307/fc21bddb744.png[/img][img]/735/7350579/month_bbbe17b8d457f1cef7b2b6a361e4.png[/img]4.点开DIY,如果需要选择打开方式,记事本即可!然后删除原来的信息,键入以下文字!保存,关闭~[code=lua]## Interface: 50300## Title: DIY## Notes: My DIY Addon## Author: Ni Da Ye Wo Er Zi## Version: 5.3Frame.lua[/code][img]/735/7350579/month_bce83cea1afb62af6ec.png[/img]5.点开Frame,还是删除原来所有的信息,复制我上面给出的几大类你想要的LUA到这里边!保存,关闭*6.个别LUA之间可能会有冲突,你可以多建立几个像Frame这样LUA格式的文件,不过要记得再上一部中的DIY(TOC文件)中,Frame.lua的下一行加入你建立的文件夹名称~
例如我建了Frame、Spell、 Map、 Business四个文件方便LUA的归类,利于以后查找修改纠错~[img]/735/7350579/month_ac75a4fa6c45af76.png[/img][/collapse][/quote]
OMG这种帖子怎么能不加精~顶lz工作一个
楼主啊,我最近我时常盯着你的头像发呆好久,很是迷恋啊,求出处 [s:28]
最近在简化自己的插件这个好东西,收藏了,有空慢慢用
有希望的男人
有什么好LUA 别藏着哦~
果断收藏!
马克刘明[img]http://img6.ngacn.cc/attachments/mon_/-a335b9300d.png[/img]
请教LZ,放在什么地方,怎么用啊
[s:26] 无论是内容头像都很好
很好 楼主有心了
虽然大部分我用了,但还是要感谢下楼主.
必须顶,感谢楼主分享!
我也很疑惑这个LUA如何制作,有没有教程之类的,光看完全不懂啊……
超级赞啊,还是喜欢自带的。
怒顶一记,又可以丰富下自己的myaddons小文件夹了
低端人士,认为只能看看了··
太吊了 必须要顶
[quote][pid=93676,1]Reply[/pid] [b]Post by 清灵迷雾 ( 23:03):[/b]我也很疑惑这个LUA如何制作,有没有教程之类的,光看完全不懂啊……[/quote]以前有帖子写了,你没认真看罢了~我重新写下,你学下吧~很简单

参考资料

 

随机推荐