From 479c4ed924cf20d8de6e6408cea2d7bde8180ac7 Mon Sep 17 00:00:00 2001 From: shagu Date: Sun, 7 Aug 2016 23:58:28 +0200 Subject: [PATCH] add initial version of target castbar --- env/locales_deDE.lua | 36 ++++++++---- env/locales_enUS.lua | 36 ++++++++---- env/locales_frFR.lua | 36 ++++++++---- env/locales_ruRU.lua | 36 ++++++++---- env/locales_zhCN.lua | 36 ++++++++---- modules/castbar.lua | 132 ++++++++++++++++++++++++++++++++++++++++++- pfUI.lua | 2 + 7 files changed, 261 insertions(+), 53 deletions(-) diff --git a/env/locales_deDE.lua b/env/locales_deDE.lua index 57bef651..2a85f7aa 100644 --- a/env/locales_deDE.lua +++ b/env/locales_deDE.lua @@ -1,14 +1,30 @@ pfLocaleClass["deDE"] = { - ["Hexenmeister"] = "WARLOCK", - ["Krieger"] = "WARRIOR", - ["Jäger"] = "HUNTER", - ["Magier"] = "MAGE", - ["Priester"] = "PRIEST", - ["Druide"] = "DRUID", - ["Paladin"] = "PALADIN", - ["Schamane"] = "SHAMAN", - ["Schurke"] = "ROGUE", - } + ["Hexenmeister"] = "WARLOCK", + ["Krieger"] = "WARRIOR", + ["Jäger"] = "HUNTER", + ["Magier"] = "MAGE", + ["Priester"] = "PRIEST", + ["Druide"] = "DRUID", + ["Paladin"] = "PALADIN", + ["Schamane"] = "SHAMAN", + ["Schurke"] = "ROGUE", +} + +pfLocaleSpellEvents["deDE"] = { + ['SPELL_GAINS'] = "(.+) bekommt (.+).", + ['SPELL_CAST'] = "(.+) beginnt (.+) zu wirken.", + ['SPELL_PERFORM'] = "(.+) beginnt (.+) auszuf\195\188hren.", + ['SPELL_AFFLICTED'] = "(.+) ist von (.+) betroffen.", + ['SPELL_HIT'] = "(.+) von Euch trifft (.+) f\195\188r %d+\.", + ['OTHER_SPELL_HIT'] = "%a+'s (.+) trifft (.+) f\195\188r %d+\.", +} + +pfLocaleSpellInterrupts["deDE"] = { + ["Schildhieb"] = true; + ["Zuschlagen"] = true; + ["Tritt"] = true; + ["Erdschock"] = true; +} pfLocaleSpells["deDE"] = { ['Eisenherz nimmt wieder Huhngestalt an'] = {t=1000, icon="Ability_Racial_BearForm" }; diff --git a/env/locales_enUS.lua b/env/locales_enUS.lua index 52594030..f05308af 100644 --- a/env/locales_enUS.lua +++ b/env/locales_enUS.lua @@ -1,14 +1,30 @@ pfLocaleClass["enUS"] = { - ["Warlock"] = "WARLOCK", - ["Warrior"] = "WARRIOR", - ["Hunter"] = "HUNTER", - ["Mage"] = "MAGE", - ["Priest"] = "PRIEST", - ["Druid"] = "DRUID", - ["Paladin"] = "PALADIN", - ["Shaman"] = "SHAMAN", - ["Rogue"] = "ROGUE", - } + ["Warlock"] = "WARLOCK", + ["Warrior"] = "WARRIOR", + ["Hunter"] = "HUNTER", + ["Mage"] = "MAGE", + ["Priest"] = "PRIEST", + ["Druid"] = "DRUID", + ["Paladin"] = "PALADIN", + ["Shaman"] = "SHAMAN", + ["Rogue"] = "ROGUE", +} + +pfLocaleSpellEvents["enUS"] = { + ['SPELL_GAINS'] = "(.+) gains (.+).", + ['SPELL_CAST'] = "(.+) begins to cast (.+)." + ['SPELL_PERFORM'] = "(.+) begins to perform (.+)." + ['SPELL_AFFLICTED'] = "(.+) %a+ afflicted by (.+)." + ['SPELL_HIT'] = "Your (.+) %a%a?its (.+) for %d+\." + ['OTHER_SPELL_HIT'] = "%a+'s (.+) %a%a?its (.+) for %d+\." +} + +pfLocaleSpellInterrupts["enUS"] = { + ["Shield Bash"] = true; + ["Pummel"] = true; + ["Kick"] = true; + ["Earth Shock"] = true; +} pfLocaleSpells["enUS"] = { ['"Plucky" Resumes Chicken Form'] = {t=1000, icon="Ability_Racial_BearForm" }; diff --git a/env/locales_frFR.lua b/env/locales_frFR.lua index 6a3f3952..61a762b6 100644 --- a/env/locales_frFR.lua +++ b/env/locales_frFR.lua @@ -1,14 +1,30 @@ pfLocaleClass["frFR"] = { - ["D\195\169moniste"] = "WARLOCK", - ["Guerrier"] = "WARRIOR", - ["Chasseur"] = "HUNTER", - ["Mage"] = "MAGE", - ["Pr\195\170tre"] = "PRIEST", - ["Druide"] = "DRUID", - ["Paladin"] = "PALADIN", - ["Chaman"] = "SHAMAN", - ["Voleur"] = "ROGUE", - } + ["D\195\169moniste"] = "WARLOCK", + ["Guerrier"] = "WARRIOR", + ["Chasseur"] = "HUNTER", + ["Mage"] = "MAGE", + ["Pr\195\170tre"] = "PRIEST", + ["Druide"] = "DRUID", + ["Paladin"] = "PALADIN", + ["Chaman"] = "SHAMAN", + ["Voleur"] = "ROGUE", +} + +pfLocaleSpellEvents["frFR"] = { -- TODO + ['SPELL_GAINS'] = "(.+) gains (.+).", + ['SPELL_CAST'] = "(.+) begins to cast (.+)." + ['SPELL_PERFORM'] = "(.+) begins to perform (.+)." + ['SPELL_AFFLICTED'] = "(.+) %a+ afflicted by (.+)." + ['SPELL_HIT'] = "Your (.+) %a%a?its (.+) for %d+\." + ['OTHER_SPELL_HIT'] = "%a+'s (.+) %a%a?its (.+) for %d+\." +} + +pfLocaleSpellInterrupts["frFR"] = { -- TODO + ["Shield Bash"] = true; + ["Pummel"] = true; + ["Kick"] = true; + ["Earth Shock"] = true; +} pfLocaleSpells["frFR"] = { ['Le Brave reprend sa forme de poulet'] = {t=1000, icon="Ability_Racial_BearForm" }; diff --git a/env/locales_ruRU.lua b/env/locales_ruRU.lua index d24f2737..15209afd 100644 --- a/env/locales_ruRU.lua +++ b/env/locales_ruRU.lua @@ -1,14 +1,30 @@ pfLocaleClass["ruRU"] = { - ["Чернокнижница"] = "WARLOCK", - ["Воин"] = "WARRIOR", - ["Охотница"] = "HUNTER", - ["Маг"] = "MAGE", - ["Жрица"] = "PRIEST", - ["Друид"] = "DRUID", - ["Паладин"] = "PALADIN", - ["Шаманка"] = "SHAMAN", - ["Разбойница"] = "ROGUE", - } + ["Чернокнижница"] = "WARLOCK", + ["Воин"] = "WARRIOR", + ["Охотница"] = "HUNTER", + ["Маг"] = "MAGE", + ["Жрица"] = "PRIEST", + ["Друид"] = "DRUID", + ["Паладин"] = "PALADIN", + ["Шаманка"] = "SHAMAN", + ["Разбойница"] = "ROGUE", +} + +pfLocaleSpellEvents["ruRU"] = { -- TODO + ['SPELL_GAINS'] = "(.+) gains (.+).", + ['SPELL_CAST'] = "(.+) begins to cast (.+)." + ['SPELL_PERFORM'] = "(.+) begins to perform (.+)." + ['SPELL_AFFLICTED'] = "(.+) %a+ afflicted by (.+)." + ['SPELL_HIT'] = "Your (.+) %a%a?its (.+) for %d+\." + ['OTHER_SPELL_HIT'] = "%a+'s (.+) %a%a?its (.+) for %d+\." +} + +pfLocaleSpellInterrupts["ruRU"] = { -- TODO + ["Shield Bash"] = true; + ["Pummel"] = true; + ["Kick"] = true; + ["Earth Shock"] = true; +} pfLocaleSpells["ruRU"] = { ['"Отчаянный" снова принимает облик цыпленка"'] = {t=1000, icon="Ability_Racial_BearForm" }; diff --git a/env/locales_zhCN.lua b/env/locales_zhCN.lua index 2e86eb4d..c24e3ecf 100644 --- a/env/locales_zhCN.lua +++ b/env/locales_zhCN.lua @@ -1,14 +1,30 @@ pfLocaleClass["zhCN"] = { - ["术士"] = "WARLOCK", - ["战士"] = "WARRIOR", - ["猎人"] = "HUNTER", - ["法师"] = "MAGE", - ["牧师"] = "PRIEST", - ["德鲁伊"] = "DRUID", - ["圣骑士"] = "PALADIN", - ["萨满祭司"] = "SHAMAN", - ["盗贼"] = "ROGUE", - } + ["术士"] = "WARLOCK", + ["战士"] = "WARRIOR", + ["猎人"] = "HUNTER", + ["法师"] = "MAGE", + ["牧师"] = "PRIEST", + ["德鲁伊"] = "DRUID", + ["圣骑士"] = "PALADIN", + ["萨满祭司"] = "SHAMAN", + ["盗贼"] = "ROGUE", +} + +pfLocaleSpellEvents["zhCN"] = { -- TODO + ['SPELL_GAINS'] = "(.+) gains (.+).", + ['SPELL_CAST'] = "(.+) begins to cast (.+)." + ['SPELL_PERFORM'] = "(.+) begins to perform (.+)." + ['SPELL_AFFLICTED'] = "(.+) %a+ afflicted by (.+)." + ['SPELL_HIT'] = "Your (.+) %a%a?its (.+) for %d+\." + ['OTHER_SPELL_HIT'] = "%a+'s (.+) %a%a?its (.+) for %d+\." +} + +pfLocaleSpellInterrupts["zhCN"] = { -- TODO + ["Shield Bash"] = true; + ["Pummel"] = true; + ["Kick"] = true; + ["Earth Shock"] = true; +} pfLocaleSpells["zhCN"] = { ['"Plucky" Resumes Chicken Form'] = {t=1000, icon="Ability_Racial_BearForm" }; diff --git a/modules/castbar.lua b/modules/castbar.lua index b6ab4fb7..961af6f5 100644 --- a/modules/castbar.lua +++ b/modules/castbar.lua @@ -191,13 +191,139 @@ pfUI:RegisterModule("castbar", function () end if pfUI.uf.target then - --[[ TODO - pfUI.castbar.target = CreateFrame("Frame",nil, pfUI.uf.target) + + pfUI.castbar.target = CreateFrame("Frame") pfUI.castbar.target:SetBackdrop(pfUI.backdrop) pfUI.castbar.target:SetHeight(pfUI_config.global.font_size * 2) pfUI.castbar.target:SetPoint("TOPRIGHT",pfUI.uf.target,"BOTTOMRIGHT",0,-1) pfUI.castbar.target:SetPoint("TOPLEFT",pfUI.uf.target,"BOTTOMLEFT",0,-1) + + -- statusbar pfUI.castbar.target.bar = CreateFrame("StatusBar", nil, pfUI.castbar.target) - ]]-- + pfUI.castbar.target.bar:SetStatusBarTexture("Interface\\AddOns\\pfUI\\img\\bar") + pfUI.castbar.target.bar:ClearAllPoints() + pfUI.castbar.target.bar:SetPoint("TOPLEFT", pfUI.castbar.target, "TOPLEFT", 3, -3) + pfUI.castbar.target.bar:SetPoint("BOTTOMRIGHT", pfUI.castbar.target, "BOTTOMRIGHT", -3, 3) + pfUI.castbar.target.bar:SetMinMaxValues(0, 100) + pfUI.castbar.target.bar:SetValue(20) + pfUI.castbar.target.bar:SetStatusBarColor(.7,.7,.9,.8) + + -- text left + pfUI.castbar.target.bar.left = pfUI.castbar.target.bar:CreateFontString("Status", "DIALOG", "GameFontNormal") + pfUI.castbar.target.bar.left:ClearAllPoints() + pfUI.castbar.target.bar.left:SetPoint("TOPLEFT", pfUI.castbar.target.bar, "TOPLEFT", 3, 0) + pfUI.castbar.target.bar.left:SetPoint("BOTTOMRIGHT", pfUI.castbar.target.bar, "BOTTOMRIGHT", -3, 0) + pfUI.castbar.target.bar.left:SetNonSpaceWrap(false) + pfUI.castbar.target.bar.left:SetFontObject(GameFontWhite) + pfUI.castbar.target.bar.left:SetTextColor(1,1,1,1) + pfUI.castbar.target.bar.left:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", pfUI_config.global.font_size, "OUTLINE") + pfUI.castbar.target.bar.left:SetText("left") + pfUI.castbar.target.bar.left:SetJustifyH("left") + + -- text right + pfUI.castbar.target.bar.right = pfUI.castbar.target.bar:CreateFontString("Status", "DIALOG", "GameFontNormal") + pfUI.castbar.target.bar.right:ClearAllPoints() + pfUI.castbar.target.bar.right:SetPoint("TOPLEFT", pfUI.castbar.target.bar, "TOPLEFT", 3, 0) + pfUI.castbar.target.bar.right:SetPoint("BOTTOMRIGHT", pfUI.castbar.target.bar, "BOTTOMRIGHT", -3, 0) + pfUI.castbar.target.bar.right:SetNonSpaceWrap(false) + pfUI.castbar.target.bar.right:SetFontObject(GameFontWhite) + pfUI.castbar.target.bar.right:SetTextColor(1,1,1,1) + pfUI.castbar.target.bar.right:SetFont("Interface\\AddOns\\pfUI\\fonts\\arial.ttf", pfUI_config.global.font_size, "OUTLINE") + pfUI.castbar.target.bar.right:SetText("right") + pfUI.castbar.target.bar.right:SetJustifyH("right") + + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_SELF_DAMAGE"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_FRIENDLYPLAYER_DAMAGE"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_FRIENDLYPLAYER_BUFF"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_BUFFS"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_FRIENDLYPLAYER_DAMAGE"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_PARTY_DAMAGE"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_PARTY_BUFF"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_PARTY_DAMAGE"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_PARTY_BUFFS"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS"); + pfUI.castbar.target:RegisterEvent("CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE"); + pfUI.castbar.target:RegisterEvent("PLAYER_TARGET_CHANGED") + + pfUI.castbar.target.casterDB = {} + + pfUI.castbar.target:SetScript("OnEvent", function() + if (arg1 ~= nil) then + for mob, spell in string.gfind(arg1, pfLocaleSpellEvents["deDE"]['SPELL_CAST']) do + pfUI.castbar.target:Action(mob, spell, "casts") + return + end + for mob, spell in string.gfind(arg1, pfLocaleSpellEvents["deDE"]['SPELL_PERFORM']) do + pfUI.castbar.target:Action(mob, spell, "performs") + return + end + for mob, spell in string.gfind(arg1, pfLocaleSpellEvents["deDE"]['SPELL_GAINS']) do + pfUI.castbar.target:Action(mob, spell, "gains") + return + end + for mob, spell in string.gfind(arg1, pfLocaleSpellEvents["deDE"]['SPELL_AFFLICTED']) do + pfUI.castbar.target:Action(mob, spell, "afflicted") + return + end + for spell, mob in string.gfind(arg1, pfLocaleSpellEvents["deDE"]['SPELL_HIT']) do + pfUI.castbar.target:Action(mob, spell, "hit") + return + end + for spell, mob in string.gfind(arg1, pfLocaleSpellEvents["deDE"]['OTHER_SPELL_HIT']) do + pfUI.castbar.target:Action(mob, spell, "hit") + return + end + end + + if UnitExists("target") and pfUI.castbar.target.casterDB[UnitName("target")] then + local starttime = pfUI.castbar.target.casterDB[UnitName("target")].starttime or 0 + local casttime = pfUI.castbar.target.casterDB[UnitName("target")].casttime or 0 + if starttime + casttime > GetTime() then + pfUI.castbar.target:Show() + else + pfUI.castbar.target.casterDB[UnitName("target")] = nil + pfUI.castbar.target:Hide() + end + end + end) + + pfUI.castbar.target.bar:SetScript("OnUpdate", function() + if UnitExists("target") and pfUI.castbar.target.casterDB[UnitName("target")] then + local spellname = pfUI.castbar.target.casterDB[UnitName("target")].cast or 0 + local starttime = pfUI.castbar.target.casterDB[UnitName("target")].starttime or 0 + local casttime = pfUI.castbar.target.casterDB[UnitName("target")].casttime or 0 + + if starttime + casttime > GetTime() then + pfUI.castbar.target.bar:SetMinMaxValues(0, casttime) + pfUI.castbar.target.bar:SetValue(GetTime() - starttime) + pfUI.castbar.target.bar.left:SetText(spellname) + pfUI.castbar.target.bar.right:SetText(round(GetTime() - starttime,1) .. " / " .. casttime) + else + pfUI.castbar.target.casterDB[UnitName("target")] = nil + pfUI.castbar.target:Hide() + end + else + pfUI.castbar.target:Hide() + end + end) + + function pfUI.castbar.target:Action(mob, spell, special) + if pfLocaleSpells["deDE"][spell] ~= nil then + casttime = pfLocaleSpells["deDE"][spell].t / 1000 + icon = pfLocaleSpells["deDE"][spell].icon + pfUI.castbar.target.casterDB[mob] = {cast = spell, starttime = GetTime(), casttime = casttime, icon = icon} + if UnitExists("target") and pfUI.castbar.target.casterDB[UnitName("target")] then + pfUI.castbar.target:Show() + else + pfUI.castbar.target:Hide() + end + end + end end end) \ No newline at end of file diff --git a/pfUI.lua b/pfUI.lua index df2d66ba..e30f8917 100644 --- a/pfUI.lua +++ b/pfUI.lua @@ -31,6 +31,8 @@ pfUI.module = {} pfUI.modules = {} pfLocaleClass = {} pfLocaleSpells = {} +pfLocaleSpellEvents = {} +pfLocaleSpellInterrupts = {} function pfUI:RegisterModule(n, f) pfUI.module[n] = f