From 983282613fb6732a2452d4008dfb5c7ac4a1b30a Mon Sep 17 00:00:00 2001 From: praxis <889+praxis@noreply.octowow.st> Date: Sun, 13 Sep 2026 09:53:17 +0000 Subject: [PATCH] Add skins/blizzard/gossipquest.lua --- skins/blizzard/gossipquest.lua | 139 +++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 skins/blizzard/gossipquest.lua diff --git a/skins/blizzard/gossipquest.lua b/skins/blizzard/gossipquest.lua new file mode 100644 index 0000000..183347d --- /dev/null +++ b/skins/blizzard/gossipquest.lua @@ -0,0 +1,139 @@ +pfUI:RegisterSkin("Gossip and Quest", "vanilla:tbc", function () + local frames = {'Quest', 'Gossip'} + local panels = {'Greeting', 'Detail', 'Progress', 'Reward'} + local buttons = { + QuestFrameGreetingGoodbyeButton, GossipFrameGreetingGoodbyeButton, + QuestFrameDeclineButton, QuestFrameAcceptButton, + QuestFrameGoodbyeButton, QuestFrameCompleteButton, + QuestFrameCancelButton, QuestFrameCompleteQuestButton + } + + for _, button in pairs(buttons) do + SkinButton(button) + end + + do -- quest gossip + StripTextures(QuestGreetingScrollChildFrame) + + QuestTitleText:SetPoint("TOPLEFT", 10, -10) + QuestProgressTitleText:SetPoint("TOPLEFT", 10, -10) + + StripTextures(QuestRewardItemHighlight) + local QuestRewardItemHighlight = CreateFrame("Frame", nil, QuestRewardScrollChildFrame) + local QuestRewardItemHighlightBG = QuestRewardItemHighlight:CreateTexture(nil, "OVERLAY") + QuestRewardItemHighlightBG:SetTexture(1,1,1,.2) + QuestRewardItemHighlightBG:SetAllPoints() + + hooksecurefunc("QuestFrameItems_Update", function() + QuestRewardItemHighlight:Hide() + end) + + hooksecurefunc("QuestRewardItem_OnClick", function() + if this.type == "choice" then + QuestRewardItemHighlight:SetAllPoints(this.backdrop) + QuestRewardItemHighlight:Show() + end + end) + + for _, name in pairs({ "QuestProgressItem", "QuestDetailItem", "QuestRewardItem" }) do + for i = 1, 6 do + local name = name .. i + local item = _G[name] + local icon = _G[name.."IconTexture"] + local count = _G[name.."Count"] + local title = _G[name.."Name"] + + local xsize = item:GetWidth() -12 + local ysize = item:GetHeight() -12 + + item:SetWidth(xsize) + StripTextures(item) + CreateBackdrop(item, nil, nil, .75) + SetAllPointsOffset(item.backdrop, item, 4) + SetHighlight(item) + + icon:SetWidth(ysize) + icon:SetHeight(ysize) + icon:ClearAllPoints() + icon:SetPoint("LEFT", 6, 0) + icon:SetTexCoord(.08, .92, .08, .92) + icon:SetParent(item.backdrop) + icon:SetDrawLayer("OVERLAY") + + count:SetParent(item.backdrop) + count:SetDrawLayer("OVERLAY") + + title:SetParent(item.backdrop) + title:SetDrawLayer("OVERLAY") + end + end + end + + for _, f in pairs(frames) do + local frameName = f + local frame = _G[frameName.."Frame"] + local NPCName = _G[frame:GetName().."NpcNameText"] + CreateBackdrop(frame, nil, nil, .75) + CreateBackdropShadow(frame) + + frame.backdrop:SetPoint("TOPLEFT", 12, -18) + frame.backdrop:SetPoint("BOTTOMRIGHT", -28, 66) + frame:SetHitRectInsets(12,28,18,66) + EnableMovable(frame) + + SkinCloseButton(_G[frame:GetName()..'CloseButton'], frame.backdrop, -6, -6) + + _G[frame:GetName()..'Portrait']:Hide() + + NPCName:ClearAllPoints() + NPCName:SetPoint("TOP", frame.backdrop, "TOP", 0, -10) + + for _, v in pairs(panels) do + local panel = v + if frameName == 'Gossip' and panel ~= 'Greeting' then break end + + local fname = frame:GetName()..panel.."Panel" + StripTextures(_G[fname]) + + local scroll = _G[frameName..panel.."ScrollFrame"] + scroll:SetHeight(330) + SkinScrollbar(_G[scroll:GetName().."ScrollBar"]) + CreateBackdrop(scroll, nil, true, .75) + + local bg = scroll:CreateTexture(nil, "LOW") + bg:SetAllPoints() + bg:SetTexCoord(.1,1,0,1) + bg:SetTexture("Interface\\Stationery\\StationeryTest1") + + -- assign material backgrounds to the default one + _G[fname.."MaterialTopLeft"].SetTexture = function(self, texture) + bg:SetTexture(texture) + end + + _G[fname.."MaterialTopLeft"].Hide = function() + bg:SetTexture("Interface\\Stationery\\StationeryTest1") + end + + -- disable meterial backgrounds + _G[fname.."MaterialTopLeft"].Show = function() return end + _G[fname.."MaterialTopRight"].Show = function() return end + _G[fname.."MaterialBotLeft"].Show = function() return end + _G[fname.."MaterialBotRight"].Show = function() return end + _G[fname.."MaterialTopLeft"]:Hide() + _G[fname.."MaterialTopRight"]:Hide() + _G[fname.."MaterialBotLeft"]:Hide() + _G[fname.."MaterialBotRight"]:Hide() + + if panel ~= 'Greeting' then + local num_items, hook_func + if panel == 'Progress' then + num_items = MAX_REQUIRED_ITEMS + hook_func = "QuestFrameProgressItems_Update" + else + num_items = MAX_NUM_ITEMS + hook_func = "QuestFrameItems_Update" + end + end + end + end +end)