diff --git a/skins/blizzard/character.lua b/skins/blizzard/character.lua new file mode 100644 index 0000000..88d4775 --- /dev/null +++ b/skins/blizzard/character.lua @@ -0,0 +1,322 @@ +pfUI:RegisterSkin("Character", "vanilla:tbc", function () + local rawborder, border = GetBorderSize() + local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel() + + -- Compatibility + if PlayerTitleDropDown then -- tbc, wotlk + -- Character Tab + SkinDropDown(PlayerTitleDropDown) + PlayerTitleDropDown:SetPoint("TOP", CharacterLevelText, "BOTTOM", 0, -2) + PlayerTitleDropDownText:SetPoint("LEFT", PlayerTitleDropDown.backdrop, "LEFT", 6, 2) + SkinDropDown(PlayerStatFrameLeftDropDown) + SkinDropDown(PlayerStatFrameRightDropDown) + + -- Honor Tab + StripTextures(PVPFrame) + else -- vanilla + -- Honor Tab + StripTextures(HonorFrame) + + HonorFrameProgressBar:SetStatusBarTexture(pfUI.media["img:bar"]) + CreateBackdrop(HonorFrameProgressBar) + HonorFrameProgressBar:SetHeight(24) + end + + local magicResTextureCords = { + {0.21875, 0.78125, 0.25, 0.3203125}, + {0.21875, 0.78125, 0.0234375, 0.09375}, + {0.21875, 0.78125, 0.13671875, 0.20703125}, + {0.21875, 0.78125, 0.36328125, 0.43359375}, + {0.21875, 0.78125, 0.4765625, 0.546875} + } + + CreateBackdrop(CharacterFrame, nil, nil, .75) + CreateBackdropShadow(CharacterFrame) + + CharacterFrame.backdrop:SetPoint("TOPLEFT", 10, -10) + CharacterFrame.backdrop:SetPoint("BOTTOMRIGHT", -30, 72) + CharacterFrame:SetHitRectInsets(10,30,10,72) + EnableMovable("CharacterFrame", nil, CHARACTERFRAME_SUBFRAMES) + + SkinCloseButton(CharacterFrameCloseButton, CharacterFrame.backdrop, -6, -6) + + CharacterFrame:DisableDrawLayer("ARTWORK") + + CharacterNameText:ClearAllPoints() + CharacterNameText:SetPoint("TOP", CharacterFrame.backdrop, "TOP", 0, -10) + + CharacterFrameTab1:ClearAllPoints() + CharacterFrameTab1:SetPoint("TOPLEFT", CharacterFrame.backdrop, "BOTTOMLEFT", bpad, -(border + (border == 1 and 1 or 2))) + for i = 1, 5 do + local tab = _G["CharacterFrameTab"..i] + local lastTab = _G["CharacterFrameTab"..(i-1)] + if lastTab and lastTab:IsShown() then + tab:ClearAllPoints() + tab:SetPoint("LEFT", lastTab, "RIGHT", border*2 + 1, 0) + end + SkinTab(tab) + end + + do -- Character Tab + local slots = { + "HeadSlot", + "NeckSlot", + "ShoulderSlot", + "BackSlot", + "ChestSlot", + "ShirtSlot", + "TabardSlot", + "WristSlot", + "HandsSlot", + "WaistSlot", + "LegsSlot", + "FeetSlot", + "Finger0Slot", + "Finger1Slot", + "Trinket0Slot", + "Trinket1Slot", + "MainHandSlot", + "SecondaryHandSlot", + "RangedSlot", + "AmmoSlot" + } + + local function RefreshPetPosition() + CharacterFrameTab3:ClearAllPoints() + CharacterFrameTab3:SetPoint("LEFT", HasPetUI() and CharacterFrameTab2 or CharacterFrameTab1, "RIGHT", border*2 + 1, 0) + end + + local function RefreshCharacterSlot(slot) + local slotId = slot:GetID() + local link = GetInventoryItemLink("player", slotId) + if slot and slot.backdrop then + if link then + local isBroken = GetInventoryItemBroken("player", slotId) + local quality = GetInventoryItemQuality("player", slotId) + if isBroken then + slot.backdrop:SetBackdropBorderColor(0.9, 0, 0, 1) + elseif quality and quality > 0 then + local r, g, b = GetItemQualityColor(quality) + slot.backdrop:SetBackdropBorderColor(r, g, b, 1) + else + slot.backdrop:SetBackdropBorderColor(pfUI.cache.er, pfUI.cache.eg, pfUI.cache.eb, pfUI.cache.ea) + end + else + slot.backdrop:SetBackdropBorderColor(pfUI.cache.er, pfUI.cache.eg, pfUI.cache.eb, pfUI.cache.ea) + end + + if ShaguScore and link then + local _, _, itemID = string.find(GetInventoryItemLink("player", slotId), "item:(%d+):%d+:%d+:%d+") + local itemLevel = ShaguScore.Database[tonumber(itemID)] or 0 + local _, _, quality, _, _, _, _, _, itemSlot, _ = GetItemInfo(itemID) + local score = ShaguScore:Calculate(itemSlot, quality, itemLevel) + if score and score > 0 and quality and quality > 0 then + local r,g,b = GetItemQualityColor(quality) + slot.scoreText:SetText(score) + slot.scoreText:SetTextColor(r, g, b, 1) + else + slot.scoreText:SetText("") + slot.scoreText:SetTextColor(1, 1, 1, 1) + end + else + slot.scoreText:SetText("") + slot.scoreText:SetTextColor(1, 1, 1, 1) + end + end + end + local function RefreshCharacterSlots() + for _, slotName in pairs(slots) do + local slot = _G["Character"..slotName] + RefreshCharacterSlot(slot) + end + end + + HookScript(CharacterFrame, "OnShow", function() + RefreshCharacterSlots() + RefreshPetPosition() + + if not this.hooked then + hooksecurefunc("PaperDollItemSlotButton_Update", function() + -- update only character slots! + if string.find(this:GetName(), "^Character.-Slot$") then + RefreshCharacterSlot(this) + end + end) + hooksecurefunc("PetTab_Update", RefreshPetPosition) + this.hooked = true + end + end) + + StripTextures(PaperDollFrame) + StripTextures(CharacterAttributesFrame) + StripTextures(CharacterResistanceFrame) + + EnableClickRotate(CharacterModelFrame) + CharacterModelFrameRotateLeftButton:Hide() + CharacterModelFrameRotateRightButton:Hide() + + for i,c in pairs(magicResTextureCords) do + local magicResFrame = _G["MagicResFrame"..i] + magicResFrame:SetWidth(26) + magicResFrame:SetHeight(26) + CreateBackdrop(magicResFrame) + SetAllPointsOffset(magicResFrame.backdrop, magicResFrame, 2) + local icon = GetNoNameObject(magicResFrame, "Texture", "BACKGROUND", "ResistanceIcons") + SetAllPointsOffset(icon, magicResFrame, 3) + icon:SetTexCoord(c[1], c[2], c[3], c[4]) + end + + for _, slotName in pairs(slots) do + local frame = _G["Character"..slotName] + StripTextures(frame) + CreateBackdrop(frame) + SetAllPointsOffset(frame.backdrop, frame, 0) + + HandleIcon(frame.backdrop, _G["Character"..slotName.."IconTexture"]) + + if not frame.scoreText then + frame.scoreText = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal") + frame.scoreText:SetFont(pfUI.font_default, 12, "OUTLINE") + frame.scoreText:SetPoint("TOPRIGHT", 0, 0) + end + end + end + + do -- Pet Tab + StripTextures(PetPaperDollFrame) + + PetNameText:ClearAllPoints() + PetNameText:SetPoint("TOP", CharacterFrame.backdrop, "TOP", 0, -10) + + EnableClickRotate(PetModelFrame) + PetModelFrameRotateLeftButton:Hide() + PetModelFrameRotateRightButton:Hide() + + PetPaperDollCloseButton:Hide() + + StripTextures(PetAttributesFrame) + StripTextures(PetPaperDollFrameExpBar) + CreateBackdrop(PetPaperDollFrameExpBar, nil, true) + PetPaperDollFrameExpBar:SetStatusBarTexture(pfUI.media["img:bar"]) + PetPaperDollFrameExpBar:ClearAllPoints() + PetPaperDollFrameExpBar:SetPoint("BOTTOM", PetModelFrame, "BOTTOM", 0, -120) + + PetTrainingPointLabel:ClearAllPoints() + PetTrainingPointLabel:SetPoint("TOPLEFT", PetArmorFrame, "BOTTOMLEFT", 0, -16) + + PetTrainingPointText:ClearAllPoints() + PetTrainingPointText:SetPoint("TOPRIGHT", PetArmorFrame, "BOTTOMRIGHT", 0, -16) + + PetPaperDollPetInfo:ClearAllPoints() + PetPaperDollPetInfo:SetPoint("TOPLEFT", PetModelFrame, "TOPLEFT") + PetPaperDollPetInfo:SetFrameLevel(255) + + PetResistanceFrame:ClearAllPoints() + PetResistanceFrame:SetPoint("TOPRIGHT", PetModelFrame, "TOPRIGHT") + + for i,c in pairs(magicResTextureCords) do + local magicResFrame = _G["PetMagicResFrame"..i] + magicResFrame:SetWidth(26) + magicResFrame:SetHeight(26) + CreateBackdrop(magicResFrame) + SetAllPointsOffset(magicResFrame.backdrop, magicResFrame, 2) + local icon = GetNoNameObject(magicResFrame, "Texture", "BACKGROUND", "ResistanceIcons") + SetAllPointsOffset(icon, magicResFrame, 3) + icon:SetTexCoord(c[1], c[2], c[3], c[4]) + end + end + + do -- Reputation Tab + StripTextures(ReputationFrame) + + for i = 1, NUM_FACTIONS_DISPLAYED do + local bar = _G["ReputationBar" .. i] + StripTextures(bar) + CreateBackdrop(bar) + bar:SetStatusBarTexture(pfUI.media["img:bar"]) + + local war = _G["ReputationBar"..i.."AtWarCheck"] + StripTextures(war) + war:SetWidth(13) + war:SetHeight(13) + war:ClearAllPoints() + war:SetPoint("LEFT", bar.backdrop, "RIGHT", 6, 0) + war.icon = war:CreateTexture(nil, "OVERLAY") + war.icon:SetPoint("LEFT", -3, -8) + war.icon:SetTexture("Interface\\Buttons\\UI-CheckBox-SwordCheck") + + SkinCollapseButton(_G["ReputationHeader"..i]) + end + + StripTextures(ReputationListScrollFrame) + SkinScrollbar(ReputationListScrollFrameScrollBar) + + StripTextures(ReputationDetailFrame) + CreateBackdrop(ReputationDetailFrame, nil, nil, .75) + SkinCloseButton(ReputationDetailCloseButton, ReputationDetailFrame.backdrop, -6, -6) + + ReputationDetailFrame:ClearAllPoints() + ReputationDetailFrame:SetPoint("TOPLEFT", CharacterFrame.backdrop, "TOPRIGHT", 2*border, 0) + + SkinCheckbox(ReputationDetailAtWarCheckBox) + SkinCheckbox(ReputationDetailInactiveCheckBox) + SkinCheckbox(ReputationDetailMainScreenCheckBox) + end + + do -- Skills Tab + StripTextures(SkillFrame) + + SkillFrameExpandButtonFrame:DisableDrawLayer("BACKGROUND") + + SkillFrameCancelButton:Hide() + + StripTextures(SkillFrameCollapseAllButton) + SkinCollapseButton(SkillFrameCollapseAllButton, true) + SkillFrameCollapseAllButton:ClearAllPoints() + SkillFrameCollapseAllButton:SetPoint("BOTTOMLEFT", SkillTypeLabel1, "TOPLEFT", 2, 2) + + for i = 1, SKILLS_TO_DISPLAY do + local header = _G["SkillTypeLabel"..i] + StripTextures(header) + SkinCollapseButton(header) + + StripTextures(_G["SkillRankFrame"..i.."Border"]) + + local frame = _G["SkillRankFrame" .. i] + local lastframe = _G["SkillRankFrame" .. i-1] + StripTextures(frame) + CreateBackdrop(frame) + + if lastframe then + frame:ClearAllPoints() + frame:SetPoint("TOPLEFT", lastframe, "BOTTOMLEFT", 0, -6) + end + frame:SetStatusBarTexture(pfUI.media["img:bar"]) + frame:SetHeight(12) + end + + StripTextures(SkillListScrollFrame) + SkinScrollbar(SkillListScrollFrameScrollBar) + + StripTextures(SkillDetailScrollFrame) + SkillDetailScrollFrameScrollBar:Hide() + SkillDetailScrollChildFrame:Hide() + + SkillDetailCostText:SetParent(SkillDetailScrollFrame) + SkillDetailDescriptionText:SetParent(SkillDetailScrollFrame) + + StripTextures(SkillDetailStatusBar) + CreateBackdrop(SkillDetailStatusBar) + SkillDetailStatusBar:SetStatusBarTexture(pfUI.media["img:bar"]) + SkillDetailStatusBar:SetParent(SkillDetailScrollFrame) + + StripTextures(SkillDetailStatusBarUnlearnButton) + SkillDetailStatusBarUnlearnButton:SetWidth(20) + SkillDetailStatusBarUnlearnButton:SetHeight(20) + SkillDetailStatusBarUnlearnButton:SetHitRectInsets(0,0,0,0) + SkillDetailStatusBarUnlearnButton:ClearAllPoints() + SkillDetailStatusBarUnlearnButton:SetPoint("LEFT", SkillDetailStatusBar, "RIGHT", 6, 0) + SkillDetailStatusBarUnlearnButton:SetPushedTexture(nil) + SkillDetailStatusBarUnlearnButton:SetNormalTexture("Interface\\Buttons\\UI-GroupLoot-Pass-Up") + end +end)