-- ç¾çå±é |
local shield_barrier = {} |
|
shield_barrier.spell_name = "ç¾çå±é" |
|
shield_barrier.statusbar = CreateFrame("StatusBar", nil, PlayerFrame) |
shield_barrier.statusbar:SetStatusBarTexture("Interface\\TargetingFrame\\UI-StatusBar") |
shield_barrier.statusbar:GetStatusBarTexture():SetHorizTile(false) |
shield_barrier.statusbar:SetMinMaxValues(0, 100) |
shield_barrier.statusbar:SetValue(0) |
shield_barrier.statusbar:SetWidth(118) |
shield_barrier.statusbar:SetHeight(8) |
shield_barrier.statusbar:SetPoint("RIGHT", PlayerFrameManaBar, "RIGHT", 1, 0) |
shield_barrier.statusbar:SetStatusBarColor(30/255, 200/255, 230/255, 80/100) |
shield_barrier.statusbar:SetFrameLevel(PlayerFrameManaBar:GetFrameLevel() - 1) |
|
shield_barrier.current_text = UIParent:CreateFontString(nil, "OVERLAY") |
shield_barrier.current_text:SetSize(100, 20) |
shield_barrier.current_text:SetPoint("TOPRIGHT", PlayerFrame, "TOPRIGHT", -10, -22) |
shield_barrier.current_text:SetFont("Fonts\\ARHei.ttf", 16) |
shield_barrier.current_text:SetJustifyH("RIGHT") |
shield_barrier.current_text:Hide() |
|
shield_barrier.time_text = UIParent:CreateFontString(nil, "OVERLAY") |
shield_barrier.time_text:SetSize(20, 20) |
shield_barrier.time_text:SetPoint("TOPRIGHT", PlayerFrame, "TOPRIGHT", -50, -22) |
shield_barrier.time_text:SetFont("Fonts\\ARHei.ttf", 16) |
shield_barrier.time_text:SetJustifyH("Left") |
shield_barrier.time_text:Hide() |
|
shield_barrier.cooldown = CreateFrame("Cooldown", nil, PlayerFrame) |
shield_barrier.cooldown:SetSize(0, 0) |
shield_barrier.cooldown:Hide() |
shield_barrier.last_time = 0 |
|
shield_barrier.expect_text = UIParent:CreateFontString(nil, "OVERLAY") |
shield_barrier.expect_text:SetSize(100, 20) |
shield_barrier.expect_text:SetPoint("TOPRIGHT", PlayerFrame, "TOPRIGHT", -20, -22) |
shield_barrier.expect_text:SetFont("Fonts\\ARHei.ttf", 16) |
shield_barrier.expect_text:SetJustifyH("Left") |
shield_barrier.expect_text:Hide() |
|
shield_barrier.SetCurrentText = function(value) |
shield_barrier.current_text:SetText(string.format("|c0000ff00%dW", value/10000)) |
end |
|
shield_barrier.SetCurrentText(0) |
|
local function IsTankWarrior() |
local localizedClass, englishClass, classIndex = UnitClass("player") |
local specl_index = GetSpecialization() |
if specl_index == nil then return false end |
local specl_id = GetSpecializationInfo(specl_index) |
if classIndex ~= 1 then return false end |
if specl_id ~= 73 then return false end |
return true |
end |
|
local function GetRage() |
local rage = UnitPower("player", SPELL_POWER_RAGE) |
if rage == nil then rage = 0 end |
if IsTankWarrior() == false then |
rage = 0 |
end |
return rage |
end |
|
local function TogglePlayerName() |
if GetRage() <= 1 and UnitBuff("player", "ç¾çå±é") == nil then |
PlayerName:Show() |
else |
PlayerName:Hide() |
end |
end |
|
shield_barrier.UpdateTimeText = function() |
if GetTime() - shield_barrier.last_time > 0.1 then |
local seconds = shield_barrier.expire - GetTime() |
shield_barrier.time_text:SetText(string.format("|c0000ff00%d", seconds)) |
shield_barrier.last_time = GetTime() |
end |
end |
|
shield_barrier.cooldown:SetScript("OnUpdate", shield_barrier.UpdateTimeText) |
|
shield_barrier.UpdateExpectText = function() |
local power = GetRage() |
local stamina = UnitStat("player", 3) |
local revenge = select(15, UnitBuff("player", "å¤ä»ä¹å")) |
local current = select(15, UnitBuff("player", "ç¾çå±é")) |
if revenge == nil then revenge = 0 end |
if current == nil then current = 0 end |
if power > 60 then power = 60 end |
local value = max(stamina * 2.5, revenge * 2) |
value = value * (power / 60) |
shield_barrier.expect_text:SetText(string.format("|c0000ff00%dW", value/10000)) |
if power >= 20 and value > current then |
shield_barrier.expect_text:Show() |
else |
shield_barrier.expect_text:Hide() |
end |
TogglePlayerName() |
end |
|
shield_barrier.on_begin = function(spell_name, duration, expire, value) |
shield_barrier.max = value |
shield_barrier.expire = expire |
shield_barrier.statusbar:SetValue(100) |
PlayerFrameManaBar:SetAlpha(50/100) |
shield_barrier.SetCurrentText(value) |
shield_barrier.current_text:Show() |
shield_barrier.time_text:Show() |
shield_barrier.cooldown:SetCooldown(expire - duration, duration) |
shield_barrier.cooldown:Show() |
TogglePlayerName() |
end |
|
shield_barrier.on_update = function(spell_name, duration, expire, value) |
shield_barrier.expire = expire |
if shield_barrier.max < value then |
shield_barrier.max = value |
end |
shield_barrier.statusbar:SetValue(value * 100 / shield_barrier.max) |
shield_barrier.SetCurrentText(value) |
shield_barrier.cooldown:SetCooldown(expire - duration, duration) |
shield_barrier.cooldown:Show() |
end |
|
shield_barrier.on_end = function(spell_name) |
shield_barrier.max = 0 |
shield_barrier.statusbar:SetValue(0) |
PlayerFrameManaBar:SetAlpha(100/100) |
shield_barrier.SetCurrentText(0) |
shield_barrier.current_text:Hide() |
shield_barrier.time_text:Hide() |
shield_barrier.cooldown:Hide() |
shield_barrier.UpdateExpectText() |
TogglePlayerName() |
end |
|
BuffEvent(shield_barrier.spell_name, shield_barrier.on_begin, shield_barrier.on_update, shield_barrier.on_end) |
PowerEvent(shield_barrier.UpdateExpectText) |
|
-- ç¾çæ ¼æ¡ |
local shield_block = {} |
|
shield_block.spell_name = "ç¾çæ ¼æ¡" |
|
shield_block.frame = CreateFrame("Frame", nil, PlayerFrame) |
shield_block.frame:SetSize(38, 38) |
shield_block.frame:SetPoint("TOP", PlayerFrame, "BOTTOM", 100, 39) |
shield_block.frame:SetFrameLevel(TotemFrame:GetFrameLevel() - 1) |
|
shield_block.frame.icon = CreateFrame("Frame", nil, shield_block.frame) |
shield_block.frame.icon:SetSize(22, 22) |
shield_block.frame.icon:SetPoint("CENTER", 0, 0) |
|
shield_block.frame.icon.texture = shield_block.frame.icon:CreateTexture(nil, "ARTWORK", shield_block.frame.icon) |
shield_block.frame.icon.texture:SetSize(22, 22) |
shield_block.frame.icon.texture:SetPoint("CENTER", 0, 0) |
shield_block.frame.icon.texture:SetTexture("Interface\\Icons\\Ability_Defend") |
|
shield_block.frame.cooldown = CreateFrame("Cooldown", nil, shield_block.frame.icon) |
shield_block.frame.cooldown:SetSize(22, 22) |
shield_block.frame.cooldown:SetPoint("CENTER", 0, 0) |
shield_block.frame.cooldown:SetReverse(true) |
shield_block.last_time = 0 |
|
shield_block.frame.border = CreateFrame("Frame", nil, shield_block.frame.icon) |
shield_block.frame.border:SetSize(38, 38) |
shield_block.frame.border:SetPoint("CENTER", 0, 0) |
|
shield_block.frame.border.texture = shield_block.frame.border:CreateTexture(nil, "OVERLAY", shield_block.frame.border) |
shield_block.frame.border.texture:SetSize(38, 38) |
shield_block.frame.border.texture:SetPoint("CENTER", 0, 0) |
shield_block.frame.border.texture:SetTexture("Interface\\CharacterFrame\\TotemBorder") |
|
shield_block.frame.time_text = shield_block.frame:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall") |
shield_block.frame.time_text:SetPoint("TOP", shield_block.frame, "BOTTOM", 0, 5) |
shield_block.frame.time_text:SetText(string.format("|cffffffff%d s", 0)) |
|
shield_block.frame:Hide() |
|
shield_block.UpdateTimeText = function() |
if GetTime() - shield_block.last_time > 0.1 then |
local seconds = shield_block.expire - GetTime() |
shield_block.frame.time_text:SetText(string.format("|cffffffff%d s", seconds)) |
shield_block.last_time = GetTime() |
end |
end |
|
shield_block.frame.cooldown:SetScript("OnUpdate", shield_block.UpdateTimeText) |
|
shield_block.on_begin = function(spell_name, duration, expire, value) |
shield_block.expire = expire |
shield_block.frame:Show() |
shield_block.frame.cooldown:SetCooldown(expire - duration, duration) |
end |
|
shield_block.on_update = function(spell_name, duration, expire, value) |
shield_block.expire = expire |
shield_block.frame:Show() |
shield_block.frame.cooldown:SetCooldown(expire - duration, duration) |
end |
|
shield_block.on_end = function(spell_name) |
shield_block.frame:Hide() |
end |
|
BuffEvent(shield_block.spell_name, shield_block.on_begin, shield_block.on_update, shield_block.on_end) |