5842eb7a2b
Traduction - Identifiants en anglais dans tout le module : addon, ecrans d'accueil, outils Python, banc d'essai et patcheur C#. - Fichiers au nom francais renommes (Gabarits.lua -> Templates.lua, Textes_*.lua -> Texts_*.lua, deployer.py -> deploy.py, tools/patcheur -> tools/patcher, etc.). - Commandes /fui et options de deploy.py en anglais (--check, --server, --remove-dbc). - Cles des variables sauvegardees et de data/dbc/statistics.json traduites, sans reprise des anciennes cles. - API de la micro-barre : ForeverUI.AddMicroButton(def) avec les champs name, atlasSet, after, tooltip, onClick, ready, et ForeverUI.UpdateMicro(name, isOpen). - Commentaires reecrits en anglais, courts, sans dates ni historique ; les fonctions au nom peu parlant et leurs parametres sont expliques. Code mort - Exports, fonctions et variables jamais lus retires. - Retires a la demande des modules : ForeverUI.PvPJauge, les exports FondEntete / TuilerEntete / Polices de TradeSkill, l'art legacy-up-c60, honorfill(half)blue et inv_misc_book_09, leurs entrees d'atlas et les parties d'outils correspondantes. Verifications : liaisons des noms comparees avant et apres, banc vert, chemins de textures inchanges, generateurs reproduisant les fichiers, patcheur identique octet pour octet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
208 lines
6.2 KiB
Lua
208 lines
6.2 KiB
Lua
-- ForeverUI: player frame extras: PvP icon, raid group, play time and damage taken.
|
|
-- They live in ForeverUI.PlayerFrame's overlayHolder (above the art) and move with the frame.
|
|
-- Sizes and offsets: camelot PlayerFrame_ShowPvPIcon (circle at scale 0.8) and mainline
|
|
-- PlayerFrame.xml (GroupIndicator, PlayerPlayTime, HitIndicator).
|
|
|
|
local frame = ForeverUI.PlayerFrame
|
|
local holder = frame.overlayHolder
|
|
|
|
local PVP_CIRCLE = "ui-hud-unitframe-smallcircle"
|
|
local PVP_FFA = "ui-hud-unitframe-player-pvp-ffaicon"
|
|
local PVP_FACTION = {
|
|
Alliance = "ui-hud-unitframe-smallcircle-alliance",
|
|
Horde = "ui-hud-unitframe-smallcircle-horde",
|
|
}
|
|
local GROUP_LEFT = "ui-hud-unitframe-player-groupindicatorleft"
|
|
local GROUP_RIGHT = "ui-hud-unitframe-player-groupindicatorright"
|
|
local GROUP_MID = "_ui-hud-unitframe-player-groupindicatormid"
|
|
local PLAYTIME_TIRED_ATLAS = "ui-hud-unitframe-player-playtimetired"
|
|
local PLAYTIME_UNHEALTHY_ATLAS = "ui-hud-unitframe-player-playtimeunhealthy"
|
|
|
|
-- ------------------------------------------------------------------- PvP
|
|
local pvpCircle = holder:CreateTexture(nil, "ARTWORK")
|
|
ForeverUI.SetAtlas(pvpCircle, PVP_CIRCLE)
|
|
pvpCircle:SetPoint("TOP", frame, "TOPLEFT", 20, -50)
|
|
pvpCircle:SetWidth(39 * 0.8)
|
|
pvpCircle:SetHeight(39 * 0.8)
|
|
pvpCircle:Hide()
|
|
|
|
local pvpIcon = holder:CreateTexture(nil, "OVERLAY")
|
|
pvpIcon:SetPoint("CENTER", pvpCircle, "CENTER", 0, 0)
|
|
pvpIcon:Hide()
|
|
|
|
local function updatePvP()
|
|
local faction = UnitFactionGroup("player")
|
|
|
|
if UnitIsPVPFreeForAll("player") then
|
|
if ForeverUI.SetAtlas(pvpIcon, PVP_FFA) then
|
|
pvpIcon:SetWidth(24 * 0.8)
|
|
pvpIcon:SetHeight(27 * 0.8)
|
|
pvpCircle:Show()
|
|
pvpIcon:Show()
|
|
return
|
|
end
|
|
elseif faction and faction ~= "Neutral" and UnitIsPVP("player") then
|
|
local atlas = PVP_FACTION[faction]
|
|
if atlas and ForeverUI.SetAtlas(pvpIcon, atlas) then
|
|
pvpIcon:SetWidth(24 * 0.8)
|
|
pvpIcon:SetHeight(27 * 0.8)
|
|
pvpCircle:Show()
|
|
pvpIcon:Show()
|
|
return
|
|
end
|
|
end
|
|
|
|
pvpCircle:Hide()
|
|
pvpIcon:Hide()
|
|
end
|
|
|
|
-- ------------------------------------------------------------ raid group
|
|
local groupIndicator = CreateFrame("Frame", nil, holder)
|
|
groupIndicator:SetWidth(10)
|
|
groupIndicator:SetHeight(16)
|
|
groupIndicator:SetPoint("BOTTOMRIGHT", frame, "TOPLEFT", 210, -29)
|
|
groupIndicator:Hide()
|
|
|
|
local groupLeft = groupIndicator:CreateTexture(nil, "BACKGROUND")
|
|
ForeverUI.SetAtlas(groupLeft, GROUP_LEFT)
|
|
groupLeft:SetPoint("TOPLEFT")
|
|
|
|
local groupRight = groupIndicator:CreateTexture(nil, "BACKGROUND")
|
|
ForeverUI.SetAtlas(groupRight, GROUP_RIGHT)
|
|
groupRight:SetPoint("TOPRIGHT")
|
|
|
|
local groupMid = groupIndicator:CreateTexture(nil, "BACKGROUND")
|
|
ForeverUI.SetAtlas(groupMid, GROUP_MID, true)
|
|
groupMid:SetPoint("LEFT", groupLeft, "RIGHT")
|
|
groupMid:SetPoint("RIGHT", groupRight, "LEFT")
|
|
|
|
local groupText = groupIndicator:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall")
|
|
groupText:SetAlpha(0.7)
|
|
groupText:SetPoint("LEFT", 20, 2)
|
|
|
|
local function updateGroup()
|
|
local members = GetNumRaidMembers and GetNumRaidMembers() or 0
|
|
if members == 0 then
|
|
groupIndicator:Hide()
|
|
return
|
|
end
|
|
|
|
local playerName = UnitName("player")
|
|
for index = 1, members do
|
|
local name, _, subgroup = GetRaidRosterInfo(index)
|
|
if name == playerName and subgroup then
|
|
groupText:SetText(GROUP .. " " .. subgroup)
|
|
groupIndicator:SetWidth(groupText:GetWidth() + 40)
|
|
groupIndicator:Show()
|
|
return
|
|
end
|
|
end
|
|
|
|
groupIndicator:Hide()
|
|
end
|
|
|
|
-- ------------------------------------------------------------- play time
|
|
local playTime = CreateFrame("Frame", nil, holder)
|
|
playTime:SetWidth(29)
|
|
playTime:SetHeight(29)
|
|
playTime:SetPoint("TOPLEFT", frame, "TOPRIGHT", -21, -24)
|
|
playTime:EnableMouse(true)
|
|
playTime:Hide()
|
|
|
|
local playTimeIcon = playTime:CreateTexture(nil, "ARTWORK")
|
|
playTimeIcon:SetAllPoints(playTime)
|
|
|
|
playTime:SetScript("OnEnter", function(self)
|
|
if not self.tooltip then
|
|
return
|
|
end
|
|
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
|
|
GameTooltip:SetText(self.tooltip, nil, nil, nil, nil, true)
|
|
end)
|
|
playTime:SetScript("OnLeave", function()
|
|
GameTooltip:Hide()
|
|
end)
|
|
|
|
local function updatePlayTime()
|
|
if PartialPlayTime and PartialPlayTime() then
|
|
ForeverUI.SetAtlas(playTimeIcon, PLAYTIME_TIRED_ATLAS, true)
|
|
playTime.tooltip = PLAYTIME_TIRED
|
|
playTime:Show()
|
|
elseif NoPlayTime and NoPlayTime() then
|
|
ForeverUI.SetAtlas(playTimeIcon, PLAYTIME_UNHEALTHY_ATLAS, true)
|
|
playTime.tooltip = PLAYTIME_UNHEALTHY
|
|
playTime:Show()
|
|
else
|
|
playTime:Hide()
|
|
end
|
|
end
|
|
|
|
-- ---------------------------------------------------------- damage taken
|
|
local hitText = holder:CreateFontString(nil, "OVERLAY", "NumberFontNormalHuge")
|
|
hitText:SetPoint("CENTER", frame, "TOPLEFT", 54, -50)
|
|
hitText:Hide()
|
|
|
|
if CombatFeedback_Initialize then
|
|
CombatFeedback_Initialize(frame, hitText, 30)
|
|
end
|
|
|
|
-- ---------------------------------------------------------------- events
|
|
local extras = CreateFrame("Frame")
|
|
extras:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
extras:RegisterEvent("PLAYER_FLAGS_CHANGED")
|
|
extras:RegisterEvent("UNIT_FACTION")
|
|
extras:RegisterEvent("RAID_ROSTER_UPDATE")
|
|
extras:RegisterEvent("PARTY_MEMBERS_CHANGED")
|
|
extras:RegisterEvent("PLAYTIME_CHANGED")
|
|
extras:RegisterEvent("UNIT_COMBAT")
|
|
|
|
extras:SetScript("OnEvent", function(_self, event, unit, action, descriptor, damage, damageType)
|
|
if event == "UNIT_COMBAT" then
|
|
if unit == "player" and CombatFeedback_OnCombatEvent then
|
|
CombatFeedback_OnCombatEvent(frame, action, descriptor, damage, damageType)
|
|
end
|
|
return
|
|
end
|
|
|
|
if event == "PLAYTIME_CHANGED" then
|
|
updatePlayTime()
|
|
return
|
|
end
|
|
|
|
if event == "RAID_ROSTER_UPDATE" or event == "PARTY_MEMBERS_CHANGED" then
|
|
updateGroup()
|
|
return
|
|
end
|
|
|
|
if event == "UNIT_FACTION" and unit ~= "player" then
|
|
return
|
|
end
|
|
|
|
updatePvP()
|
|
if event == "PLAYER_ENTERING_WORLD" then
|
|
updateGroup()
|
|
updatePlayTime()
|
|
end
|
|
end)
|
|
|
|
-- The client's CombatFeedback code animates the damage text: UNIT_COMBAT feeds it (above)
|
|
-- and it runs every frame, as in PlayerFrame_OnUpdate.
|
|
extras:SetScript("OnUpdate", function(_self, elapsed)
|
|
if CombatFeedback_OnUpdate then
|
|
CombatFeedback_OnUpdate(frame, elapsed)
|
|
end
|
|
end)
|
|
|
|
ForeverUI.PlayerFrameExtras = {
|
|
pvpCircle = pvpCircle,
|
|
pvpIcon = pvpIcon,
|
|
groupIndicator = groupIndicator,
|
|
groupText = groupText,
|
|
playTime = playTime,
|
|
playTimeIcon = playTimeIcon,
|
|
hitText = hitText,
|
|
updatePvP = updatePvP,
|
|
updateGroup = updateGroup,
|
|
updatePlayTime = updatePlayTime,
|
|
}
|