Shestak2.5基础讲解


对于 ShestakUI 的修改,我想以这篇帖子为大家提供了一个基础,希望更多的玩家通过这篇帖子能作出属于自己的 OUF 插件 。

ok,OUF 类插件对于刚接手的玩家看似有点“困难”,一堆堆的代码蒙蔽了你“雪亮”的眼睛以及“智慧”的大脑。 其实用不着掌握专业的 lua 知识后才能修改他们,这篇文章就是告诉你如何做到,以 Shestak UI 2.5 为例,主要讲解ouf_Shestak 主文件夹.

打开 oUF_Shestak 文件夹,里面包含

modules文件夹

oUF_Colors.lua
oUF_Functions.lua
oUF_Main.lua
oUF_Shestak.toc
oUF_Tags.lua
oUF_Templates.xml

他们是如何开启的?

一,当我们启动魔兽世界后,wow 会自动搜索 addons 文件夹中的插件,浏览到 oUF_Shestak 文件夹时程序首先找到 .toc 文件,这里就是 oUF_Shestak.toc(新手要点 :TOC 文件是魔兽插件的概述,里面包含插件的名称、版本、作者、以及引导魔兽继续读取的文件等等信息 )

二,根据 .toc 文件中的引导信息,wow 会按照顺序依次进行读取,这个过程很快就是这样。oUF_Shestak.toc 的介绍打开它,看到里面的信息,分两大类:信息类、引导类

信息类包括:

## Interface: 30300
## Title: oUF Shestak
## Notes: Main layout for oUF.
## Author: Shestak
## Credits: Thanks to ALZA for the great help and write some modules
## RequiredDeps: oUF, !aSettings
## OptionalDeps: oUF_HealComm4

引导类包括:

oUF_Colors.lua
oUF_Functions.lua
oUF_Templates.xml
oUF_Tags.lua
modules/oUF_AspectCheck.lua
modules/oUF_AuraTracker.lua
modules/oUF_AuraWatch.lua
modules/oUF_CombatFeedback.lua
modules/oUF_DebuffHighlight.lua
modules/oUF_Experience.lua
modules/oUF_GCD.lua
modules/oUF_MirrorBars.lua
modules/oUF_MovableFrames.lua
modules/oUF_RaidDebuffs.lua
modules/oUF_ReadyCheck.lua
modules/oUF_Reputation.lua
modules/oUF_Smooth.lua
modules/oUF_Swing.lua
##modules/oUF_Talents.lua
modules/oUF_TotemBar.lua
modules/oUF_Trinkets.lua
modules/oUF_WeaponEnchant.lua
oUF_Main.lua

信息类需要注意的是 ## RequiredDeps: oUF, !aSettings,这个信息告诉我们 必须具备 ouf!asettings 这两个插件后 ouf_Shestak 才能正常启动。当然 ## Interface: 30300 也很重要,这告诉你它对应的 wow 版本------你可以修改为当前版本,但如果有 API 冲突那也是徒劳的。

引导类需要注意的是他们的顺序,非常关键,先读取和后读取的结果有很大的差别。

oUF_Colors的介绍

oUF_Colors.lua 里面包含了作者对游戏部分颜色的设定,法力、宠物、声望、能量等等,这个不需要做详细的介绍,看一下就会明了。

reaction = setmetatable({                
    [1] = {0.85, 0.27, 0.27}, -- Hated                
    [2] = {0.85, 0.27, 0.27}, -- Hostile                
    [3] = {0.85, 0.27, 0.27}, -- Unfriendly               
    [4] = {0.85, 0.77, 0.36}, -- Neutral                
    [5] = {0.33, 0.59, 0.33}, -- Friendly                
    [6] = {0.33, 0.59, 0.33}, -- Honored                
    [7] = {0.33, 0.59, 0.33}, -- Revered                
    [8] = {0.33, 0.59, 0.33}, -- Exalted

这段说明下:声望各阶段的颜色设定---从仇恨到崇拜

oUF_Functions介绍

oUF_Functions.lua 是个比较重要的部分,作者对于一些功能的部分定义

local db = SettingsCF["unitframe"]

定义DB的内容

local SetUpAnimGroup = function(self)        
    self.anim = self:CreateAnimationGroup("Flash")        
    self.anim.fadein = self.anim:CreateAnimation("ALPHA", "FadeIn")              
    self.anim.fadein:SetChange(1)        
    self.anim.fadein:SetOrder(2)        
    self.anim.fadeout = self.anim:CreateAnimation("ALPHA", "FadeOut")        
    self.anim.fadeout:SetChange(-1)        
    self.anim.fadeout:SetOrder(1)
end
local Flash = function(self, duration)        
    if not self.anim then                
        SetUpAnimGroup(self)        
    end        
    if not self.anim:IsPlaying() or duration ~= self.anim.fadein:GetDuration() then              
        self.anim.fadein:SetDuration(duration)                
        self.anim.fadeout:SetDuration(duration)                
        self.anim:Play()        
    end
end
local StopFlash = function(self)        
    if self.anim then                
        self.anim:Finish()        
    end
end

定义渐变的变化

function SpawnMenu(self)        
    local unit = self.unit:sub(1, -2)        
    local cunit = self.unit:gsub("^%l", string.upper)        
    if cunit == "Vehicle" then                
        cunit = "Pet"        
    end        
    if unit == "party" or unit == "partypet" then                
        ToggleDropDownMenu(1, nil, _G["PartyMemberFrame"..self.id.."DropDown"], "cursor", 0, 0)        
    elseif(_G[cunit.."FrameDropDown"]) then                
        ToggleDropDownMenu(1, nil, _G[cunit.."FrameDropDown"], "cursor", 0, 0)        
    end
end

小队以及小队宠物的定义

SetFontString = function(parent, fontName, fontHeight, fontStyle)        local fs = parent:CreateFontString(nil, "OVERLAY")        fs:SetFont(fontName, fontHeight, fontStyle)        fs:SetShadowColor(0, 0, 0)        fs:SetShadowOffset(0, 0)        return fsend

文字显示模式的定义

local ShortValue = function(value)if value >= 1e6 thenreturn ("%.1fm"):format(value / 1e6):gsub("%.?0+([km])[        DISCUZ_CODE_7        ]quot;, "%1")elseif value >= 1e3 or value <= -1e3 thenreturn ("%.1fk"):format(value / 1e3):gsub("%.?0+([km])[        DISCUZ_CODE_7        ]quot;, "%1")elsereturn valueendend

小队以及小队宠物的定义

SetFontString = function(parent, fontName, fontHeight, fontStyle)        
    local fs = parent:CreateFontString(nil, "OVERLAY")        
    fs:SetFont(fontName, fontHeight, fontStyle)        
    fs:SetShadowColor(0, 0, 0)        
    fs:SetShadowOffset(0, 0)        
    return fs
end

文字显示模式的定义

local ShortValue = function(value)
    if value >= 1e6 then
        return ("%.1fm"):format(value / 1e6):gsub("%.?0+([km])[DISCUZ_CODE_7]", "%1")
    elseif value >= 1e3 or value <= -1e3 then
        return ("%.1fk"):format(value / 1e3):gsub("%.?0+([km])[DISCUZ_CODE_7]", "%1")
    else
        return value
    end
end

数字的定义

PostUpdateHealth = function(health, unit, min, max)是对生命栏的具体定义----颜色和数字模式

PostUpdateRaidHealth = function(health, unit, min, max)是对团队生命栏的具体定义--同上

PostUpdatePower = function(power, unit, min, max)法力栏的具体定义

oUF_Templates.xml

是一种简单的数据存储文件,使用一系列简单的标记描述数据这里设定了团队坦克以及小队横向和竖向以及目标的模式

oUF_Tags

分类系统,这个文件定义的内容: 关键词标记,利于搜索查找。

oUF.Tags["Threat"] = function(unit)仇恨的标记

oUF.TagEvents["DiffColor"] = "UNIT_LEVEL"级别颜色的标记

oUF.TagEvents["GetNameColor"] = "UNIT_HAPPINESS"宠物各阶段颜色的标记

oUF.TagEvents["NameArena"] = "UNIT_NAME_UPDATE"单位框体的标记

oUF_Main

shestak UI 的主设定文件

local db = SettingsCF["unitframe"]
local pos = SettingsCF["position"].unitframes
local _, class = UnitClass("player")
local r, g, b = unpack(oUF.colors.class[class])

定义,这很重要

local backdrop = {        
    bgFile = SettingsCF["media"].blank,        
    insets = {top = -1, left = -1, bottom = -1, right = -1},
}

定义了一个背景的模式,便于后面的调用

local runeloadcolors = {
    [1] = {0.69, 0.31, 0.31},
    [2] = {0.69, 0.31, 0.31},
    [3] = {0.33, 0.59, 0.33},
    [4] = {0.33, 0.59, 0.33},
    [5] = {0.31, 0.45, 0.63},
    [6] = {0.31, 0.45, 0.63},
}