Get an Epic Experience with Premium

PitBull Unit Frames 4.0

Unit Frames Login to Add Favorites
  • World of Warcraft
  • 11,402 Monthly Downloads
  • Supports: 5.4.0
  • 3,403,504 Total Downloads
  • Updated 09/30/2013
  • Created 08/01/2008
  • 3,036 Favorites
  • Project Site
  • Comments
  • Release Type: Beta
  • License: All Rights Reserved
  • Newest File: v4.0.0-beta48
Support development! **

About PitBull Unit Frames 4.0

PitBull4 is a continuation of PitBull.

Differences from PitBull 3:

  • It's mostly done, but not entirely done thus why there are still only betas (despite this it is still very stable).
  • Documentation is written before functions
  • Much easier for third-party extensions.
  • Options will be much, much simpler. In 3.0, there's about 200 panels that you can mess with, it's overwhelming. I want to bring this down to somewhere around 10.
    • Layouts are defined deterministically and unit groups use the layout rather than ad-hoc layouts on a per-unit basis. This will make setting up your unit frames far, far easier.
    • Due to some decisions made, 4.0 is actually more configurable than 3.0. As a layout designer, you will have a lot more control over how things look. You can have different fonts on the same frame, different textures, more precise positioning, and a whole slough of other things.
  • CPU Efficiency will be taken much more seriously.
  • It uses Ace3 instead of Rock.



If you want to help localize PitBull in your language, go to

Forum thread:

tag v4.0.0-beta48
Shefki <>
2013-09-30 09:31:18 -0700

Tagging as v4.0.0-beta48


    - This commit should fully fix the problems people have been having with SetFont() errors.  If the font returned from GetFont is nil then use our cached font and size.  Size whenever font is nil will be an uninitialized value and so the existing fix would still throw errors when the size ended up being less than or equal to 0.
    - It doesn't make sense to call GetFont on a new FontString.  The flags should not be preserved, so just set the font and size and leave the flags as "".  The AddFontString call later will set the flags properly. If the font string already exists then you want to preserve the flags.
    - Fix some typos that were fixed on nebula1169's branch.
    - Remove some values I set to help debugging ticket #1050.
    - Hopefully avoid the SetFont errors for sure now assuming that the problem is that GetFont() doesn't work immediately after a SetFont() while the game is still loading in.
    - Missed wrapping a geterrorhandler() in pcall().
    - Protect against Blizzard's error handler throwing an error, which is why the protection code didn't allow the frames to work even when the SetFont error was happening.
    - Stash the DEFAULT_FONT and DEFAULT_FONT_SIZE so I can get people having the font problem to show me what's being stored.
    - Wrap the SetFont and SetAlpha calls in pcalls() which should prevent errors with them from breaking frames entirely.
    - Make the Vengeance fix backwards compatible.
Benjamin Staneck:
    - use a different ID for vengeance that works in 5.4
    - Remove unnecessary constants that I added on accident.
    - Hopefully stop some rare errors in LuaTexts about SetFont.


First Previous Page 216 of 252 Next Last
  • #689
    I would really like an option in further releases that makes the frames seperatable and more movable.
    If I would like to move the Portrait under the rest of the frame like 2-3mm under it, I cant do that now.
    Hope you can make this happen :)
  • #688
    I would really like an option in further releases that makes the frames seperatable and more movable.
    If I would like to move the Portrait under the rest of the frame like 2-3mm under it, I cant do that now.
    Hope you can make this happen :)
  • #687
    It would be very nice if you could add an converter for the old PB3 desings, cause its a plenty of time to redesign a PB3 to PB4 design.

    Or exists a method to carry the PB3 design over to PB4 by hand/editor?
  • #683
    Does anyone know why pitbull shows enemy mob casters as either Paladin or Mage, even though it can be warlock/shaman/priest? It's really annoying, especially in totc5/10/25.
  • #684
    As far as the game is concerned NPC enemies are always a warrior, paladin or a mage. We ask the game what the class is and it tell us one of those three values. Unfortunately, short of making a database of exceptions there's no way to fix this. Pretty much this is Blizzard's fault.
  • #691
    At least with ToCr, would it be possible (while in that raid) to add a check for if the unit has a Tag/Guild (whatever the common term for it is) that is a class, and use that instead?

    I know this is likely actually a change for LibDogTag, but the related conversation was here, so I felt it an appropriate place to follow up.
  • #677
    first of all, the lua error i just posted is happen randomly whenever i kill mob. And also, threat bar aren't showing as it should. maybe it is just me but i try to make it appear, and it wont. So i had to relocate the threat text to 'outside top'. and this error happened. i hope someone could fix this?
  • #676
    Message: [string "PitBull4_LuaTexts:Normal:Lua:Threat"]:3: Usage: UnitDetailedThreatSituation("unit" [, "mob"])
    Time: 10/15/09 04:45:36
    Count: 9

    Interface\AddOns\PitBull4_LuaTexts\LuaTexts.lua:592: in function
    Interface\AddOns\PitBull4_LuaTexts\LuaTexts.lua:657: in function
    Interface\AddOns\PitBull4_LuaTexts\LuaTexts.lua:966: in function `?'
    ...non\libs\CallbackHandler-1.0\CallbackHandler-1.0.lua:146: in function

    [C]: ?
    [string "safecall Dispatcher[2]"]:13: in function `?'
    ...non\libs\CallbackHandler-1.0\CallbackHandler-1.0.lua:91: in function `Fire'
    ...ace\AddOns\Bagnon\libs\AceEvent-3.0\AceEvent-3.0.lua:119: in function

    Locals: font_string = PitBull4_FontString_22 {
    luatexts_name = "Lua:Threat"
    Delete = defined @Interface\AddOns\PitBull4\Controls\Controls.lua:49
    frame = PitBull4_Frames_targettarget {
    0 =
    kind = "FontString"
    db = {
    code = "local unit_a,unit_b = ThreatPair(unit)
    if unit_a and unit_b then
    local _,_,percent = UnitDetailedThreatSituation(unit_a, unit_b)
    if percent and percent ~= 0 then
    return "%s%%",Round(percent,1)
    return ConfigMode()"
    frame = PitBull4_Frames_targettarget {
    LuaTexts;Lua:Power = PitBull4_FontString_18 {
    Activate = defined @Interface\AddOns\PitBull4\Main.lua:417
    populated = true
    LuaTexts;Lua:Name = PitBull4_FontString_15 {
    Border = PitBull4_Frame_5 {
    Deactivate = defined @Interface\AddOns\PitBull4\Main.lua:417
    layout_db = {
    ProxySetAttribute = defined @Interface\AddOns\PitBull4\UnitFrame.lua:214
    CombatIcon = PitBull4_Icon_7 {
    LuaTexts;Lua:Cast time = PitBull4_FontString_16 {
    Background = PitBull4_Texture_37 {
    LuaTexts;Lua:PVPTimer = PitBull4_FontString_14 {
    is_wacky = true
    RefreshVehicle = defined @Interface\AddOns\PitBull4\UnitFrame.lua:439
    IterateControlsOfType = defined @Interface\AddOns\PitBull4\UnitFrame.lua:709
    layout = "Normal"
    PLAYER_REGEN_DISABLED = defined @Interface\AddOns\PitBull4\UnitFrame.lua:272
    UpdateBestUnit = defined @Interface\AddOns\PitBull4\UnitFrame.lua:583
    ForceShow = defined @Interface\AddOns\PitBull4\Main.lua:417
    LuaTexts;Lua:Health = PitBull4_FontString_11 {
    CombatText = PitBull4_FontString_24 {
    LuaTexts;Lua:Threat = PitBull4_FontString_22 {
    UpdateGUID = defined @Interface\AddOns\PitBull4\UnitFrame.lua:650
    LuaTexts = {
    overlay = PitBull4_Frame_3 {
    GetFont = defined @Interface\AddOns\PitBull4\UnitFrame.lua:573
    Update = defined @Interface\AddOns\PitBull4\UnitFrame.lua:607
    unit = "targettarget"
    CastBar = PitBull4_BetterStatusBar_15 {
    aura_debuffs = {
    aura_buffs = {
    LuaTexts;Lua:Class = PitBull4_FontString_26 {
    PowerBar = PitBull4_BetterStatusBar_13 {
    RefixSizeAndPosition = defined @Interface\AddOns\PitBull4\Main.lua:417
    classification = "targettarget"
    HealthBar = PitBull4_BetterStatusBar_4 {
    UpdateLayout = defined @Interface\AddOns\PitBull4\UnitFrameLayout.lua:1517
    RefreshLayout = defined @Interface\AddOns\PitBull4\Main.lua:417
    _RefreshLayout = defined @Interface\AddOns\PitBull4\UnitFrame.lua:458
    is_singleton = true
    classification_db = {
    IterateControls = defined @Interface\AddOns\PitBull4\UnitFrame.lua:683
    0 =
    UnforceShow = defined @Interface\AddOns\PitBull4\Main.lua:417
    menu =
  • #670

    was wondering if anyone else has had the following issue..

    This only happnens when i join a raid and does not occur all the time..

    my party members frames disappear.

    when this happens , even logging out and logging back in do not
    correct the issue.

    i have to log out and disable pitbull (i have not narrowed this down
    to a particular section.

    Thank You
  • #673
    This happened to me the same way when I joined a raid for the first time a few days ago and hadn't set up all my unit frames. (I actually still have Grid loaded (and disabled) just in case PitBull stopped working correctly, but that hasn't happened yet.)

    You probably haven't enabled the raid frame to show when there are less than 20/15/10/5 players in it.
    To do that you have to select your group of frames that displays the raid on the options' "Groups" page (or create a new one for that purpose if you haven't done so already, since they're not included with PB's default settings), then go to the "Filtering" tab and, with a 10-man raid layout, tick the check box for the 10-man raid or, with a 25-man raid layout, you'd probably tick the check box for 15, 20 and 25-man raids (unless you create separate Group/Layout combinations for each them of course).
    Also, you can enable your standard (non-raid) group to show in a 5-man "raid", meaning your raid will show up as a standard group when you're in a raid with less than 5 other players. (Since arena teams are basically handled as a sort of raids, this will show your arena team as well.)

    The Groups/Layouts are then automatically chosen by PitBull based on the filtering you've set up and the actual size of your group/raid. Meaning, if there are more than 5 players it will then show your 10-man raid/layout and if there are more than 10 players it'll show your 25-man raid/layout, otherwise it'll just show your standard group (the one that's included with PB's Default layout and settings).
  • #668
    is there a possibility to filter enemy buffs for only those which i can dispel? I have buff filtering checked under the options, but it only seems to work for friendly targets.
  • #662
    Is it possible to turn buffs/debuffs on/off individually for each frame/party yet? Still cant figure it out.
  • #665
    I'm also wondering about this. It's a feature I really miss from PB3.
  • #669
    Same, its annoying me that much im thinking of going back to pb3. Surely it would only need a drop down for each frame/party under auras?
  • #807
    the lack of features compared to PB3 is what made me shift to using other addons, I hope they'll be added back soon in 4. It's still a beta after all.

  • To post a comment, please login or register a new account.
Login to Curse

Don't have an account? Create One.

Get an epic experience with Curse Premium
  • Faster addon downloads
  • Premium-Only Beta Giveaways
  • Ad-Free Curse experience
  • Premium Curse Client
  • and many More Features
  • Learn More »

Leaguepedia PAX Skin Giveaway