kgPanels

Sample Scripts

Sample scripts culled from the forums, credits to thos who posted in the kgPanel thread.

Adjusting Panels based on Raid or 5 Main party

In each Panel set the OnLoad script

 self:RegisterEvent("PLAYER_ENTERING_WORLD")
 self:RegisterEvent("PARTY_MEMBERS_CHANGED")
 self:RegisterEvent("RAID_ROSTER_UPDATE")

Then in each Panel OnEvent script:

 local pmems = GetNumPartyMembers()
 local rmems = GetNumRaidMembers()
 if (pmems < 1 and rmems < 1) or (pmems > 0 and pmems < 6 and rmems < 6) then
    self:Hide()
 else
    self:Show()
 end

Resizing your panel on the fly

Example script to resize based on chatwindow size For OnLoad Code:

self.resized = false

For OnUpdate Code:

if not self.resized then
  ChatFrame1:SetScript("OnSizeChanged", function(f)
    self:SetWidth(f:GetWidth())
    self:SetHeight(f:GetHeight())
  end)
  self:SetWidth(ChatFrame1:GetWidth())
  self:SetHeight(ChatFrame1:GetHeight())
end

What this script does: In OnlLoad we create a variable for the frame called resized, and set it to false In OnUpdate we check that 1. We havent resized yet 2. The the frame we are trying to resize to exists Once this check is passed, we set the OnSizechanged script to call back to this frame an adjust according to the other frame, please NOTE this doesnt have to be the parent or the anchor. We use OnUpdate since it is called often and kgPanels may be loaded before the frame you are trying to hook exists yet.

Using a onClick handler

Be sure you enable mouse clicks on your panel Example: Hide/Show recount when you click the panel

if Recount.MainWindow:IsVisible() then
  Recount.MainWindow:Hide()
else
  Recount.MainWindow:Show()
end

Changing a frame based on Target

OnLoad

self:RegisterEvent("UNIT_TARGET")
self:Hide()

OnEvent

if UnitExists("target") == nil then
   self:Hide()
   return
end
local cl = UnitClassification("target")
if (cl == "elite") or (cl == "worldboss") or (cl == "rareeleite") then
   self:SetBackdropColor(0.1, 0.1, 0.1, 0.1)
   self:Show()
else
   self:SetBackdropColor(1, 1, 1, 1)
   self:Show()
end

Hooking another frame to control your own frame

Examples uses Violation Script Dependacy: Violation OnLoad

local myPanel = self
if Violation0 then
  Violation0:SetScript("OnShow",function(frame)
    myPanel:Show()
  end)
  Violation0:SetScript("OnHide",function(frame)
    myPanel:Hide()
  end)
end
if Violation0:IsVisible() then self:Show() else self:Hide() end

Controlling a panel based on entering a major city

OnLoad

self:RegsiterEvent('CHAT_MSG_CHANNEL_NOTICE')

OnEvent:

if event == "CHAT_MSG_CHANNEL_NOTICE" then
  -- arg1 is either "YOU JOINED", "YOU LEFT" or "THROTTLED"
  -- arg7 is channel type (trade is type 2)
  -- so
  if arg1 == "YOU_JOINED" and arg7 == 2 then
    self:Show()
  end
  if arg1 == "YOU_LEFT" and arg7 == 2 then
    self:Hide()
  end
end

Make your own spell damage display

Create a panel OnLoad

self:RegisterEvent("PLAYER_AURAS_CHANGED")

OnEvent:

dmg = GetSpellBonusDamage(6);
self.text:SetText(dmg)

Change a frame color based on your class

OnLoad

local _, class = UnitClass("player");
	if class == "WARRIOR" then
        self.bg:SetVertexColor(0.95, 0.23, 0.23, self.bg:GetAlpha())
	elseif class == "PRIEST" then
        self.bg:SetVertexColor(1, 0.96, 0.98, self.bg:GetAlpha())
	elseif class == "MAGE" then
        self.bg:SetVertexColor(0.00, 1, 1, self.bg:GetAlpha())
	elseif class == "DRUID" then
        self.bg:SetVertexColor(1, 0.49, 0.04, self.bg:GetAlpha())
	elseif class == "PALADIN" then
        self.bg:SetVertexColor(0.92, 0.22, 0.46, self.bg:GetAlpha())
	elseif class == "HUNTER" then
        self.bg:SetVertexColor(0.33, 0.86, 0.00, self.bg:GetAlpha())
	elseif class == "ROGUE" then
        self.bg:SetVertexColor(1, 0.94, 0.16, self.bg:GetAlpha())
	elseif class == "SHAMAN" then
        self.bg:SetVertexColor(0.13, 0.42, 1, self.bg:GetAlpha())
	elseif class == "WARLOCK" then
        self.bg:SetVertexColor(0.36, 0.18, 1, self.bg:GetAlpha())
	end

Show a panel based on being in combat

OnLoad

self:RegisterEvent("PLAYER_REGEN_DISABLED")
self:RegisterEvent("PLAYER_REGEN_ENABLED")

OnEvent

if event == "PLAYER_REGEN_ENABLED" then
  self:Hide()
elseif event == "PLAYER_REGEN_DISABLED" then
  self:Show()
end

How to get 8 value tex coords form 4 value examples

For instance you want to use the raid icons blizz provides as a texture. foirst add teh texture to your art library or add it to sharedmedia up to you.

On a Mac ive found use the / slash when entering items is much easier.

Now lets use the status icon as an exmaple

I used onLoad to quickly get the information i wanted.

-- coords found in the FrameXML files
-- left,right,top,bottom
self.bg:SetTexCoord(0.5,1,0,0.5)
local ULx,ULy,LLx,LLy,URx,URy,LRx,LRy = self.bg:GetTexCoord()
print(" ULX: "..ULx)
print(" ULy:"..ULy)
print(" LLX:"..LLx)
print(" LLy:"..LLy)
print(" URx: "..URx)
print(" URy:"..URy)
print(" LRx:"..LRx)
print(" LRy:"..LRy)

Now i have the 8 position coords for the combat icon which is UL(0.5,0) LL(0.5,0.5) UR(1,0) LR(1,0.5)

Its a little bit of a pain, but the 8 coord setup allows for so much more flexibility as you can do transforms. Yhe 4 position method only allows you to make rectangles.

You must login to post a comment. Don't have an account? Register to get one!

  • 9 comments
  • Avatar of Feanaro Feanaro Wed, 11 Nov 2009 14:33:35

    I'am looking for a little on event script that changes the border colors of some of my frames to the energy/mana/rage color. This because I am using the same frame setup for multiple chars atm and I like to make them a bit more specific for each class or form that I am playing in.

  • Avatar of dyzophoria dyzophoria Tue, 20 Oct 2009 12:33:27
    OnLoad 
    
    self:RegisterEvent("PLAYER_REGEN_DISABLED")
    self:RegisterEvent("PLAYER_REGEN_ENABLED")
    OnEvent 
    
    if event == "PLAYER_REGEN_ENABLED" then
      self:Hide()
    elseif event == "PLAYER_REGEN_DISABLED" then
      self:Show()
    end
    

    I was wondering if I could modify this that aside from showing up when Im combat, I want a custom panel to show up whenever I have a debuff. example, show a long horizontal red bar and in it my debuffs, so I can easily see whenever I have one

  • Avatar of Leak Leak Tue, 25 Aug 2009 21:53:56

    Hi im a Rogue and i would like to Show a panel when im in Stealth and Hide the panel when NOT in stealth

  • Avatar of Aoifern Aoifern Tue, 21 Jul 2009 18:18:18

    How could you make it that so when you clicked on frame to open recount or omen it will open recount and a frame behind it for texture. Also how would you make one for when u target someone.

  • Avatar of mattdude mattdude Wed, 27 May 2009 03:11:50

    the focus change got me for a while too. but i just got it, and it works perfectly. in onLoad:

    self:RegisterEvent("PLAYER_FOCUS_CHANGED")

    self:Hide()

    and in onEvent:

    if UnitExists("focus") == nil then

    self:Hide()

    return

    else

    self:Show()

    return

    end

    this should work.

  • Avatar of chomolisa chomolisa Tue, 05 May 2009 15:07:06

    Hi, I have never used script before and i was hoping someone could help me, I am looking to set a frame to show on focus target , target of target and my cast bar. I am using Pitbull 4 for unit frames and Macaroon for my bars and my cast bar.

    any kind soul out there that is a good mood, if so many thanks.

  • Avatar of esullivan esullivan Fri, 17 Apr 2009 15:51:30

    I am sorry to be a noob and ask, but I have one panel I would like to ONLY show if I am in a party or raid. How would this be done?

    I guess it would just be the first example correct?

    I tried the first one and couldn't get it to work. When I joined a party the panel didn't show.

  • Avatar of kasprague84 kasprague84 Sat, 11 Apr 2009 06:25:59

    Put the class based script in OnUpdate and put:

    self:RegisterEvent("UNIT_TARGET")

    in OnEvent

    EDIT - Oh, and the first script that is exampled above:

    local _, class = UnitClass("player");

    Make 'player' target. SO it should look like this:

    local _, class = UnitClass("target");

  • Avatar of Harpz Harpz Fri, 12 Dec 2008 16:59:17

    The change a frame color based on your class script doesn't work for me

  • 9 comments