mirror of
https://github.com/brues-code/pfUI.git
synced 2026-09-27 01:46:03 +00:00
Version 6.1.0 - Raid/Party Frame Fixes
Bugfixes: - Fixed 40-yard range check not working for raid/party frames - Fixed aggro indicator not displaying properly on raid/party frames - Improved aggro cache to only cache positive results for instant detection - Fixed HP/Mana not updating with "Use Raid Frames for group" enabled - Added SuperWoW nil-check for SpellInfo - Added missing events: PARTY_MEMBER_ENABLE, PARTY_MEMBER_DISABLE, PLAYER_UPDATE_RESTING UI Improvements: - Share/Hoverbind buttons now show warning when module is disabled
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
github: [shagu]
|
||||
ko_fi: shagu
|
||||
@@ -0,0 +1,24 @@
|
||||
name: Close inactive issues
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "30 1 * * *"
|
||||
|
||||
jobs:
|
||||
close-issues:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/stale@v5
|
||||
with:
|
||||
operations-per-run: 100
|
||||
days-before-issue-stale: 30
|
||||
days-before-issue-close: 14
|
||||
stale-issue-label: "stale"
|
||||
stale-issue-message: "This issue is stale because it has been open for 30 days with no activity."
|
||||
close-issue-message: "This issue was closed because it has been inactive for 14 days since being marked as stale."
|
||||
days-before-pr-stale: -1
|
||||
days-before-pr-close: -1
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -1,146 +1,325 @@
|
||||
pfUI performance updates, use on own risk.
|
||||
# pfUI - Turtle WoW Edition
|
||||
|
||||
## DLL Integrations
|
||||
[](https://github.com/me0wg4ming/pfUI)
|
||||
[](https://turtlecraft.gg/)
|
||||
[](https://github.com/balakethelock/SuperWoW)
|
||||
[](https://gitea.com/avitasia/nampower)
|
||||
[](https://codeberg.org/konaka/UnitXP_SP3)
|
||||
|
||||
pfUI includes optional integration modules for client DLLs that provide enhanced functionality beyond what the standard WoW 1.12 client supports. These features are only enabled when the corresponding DLL is installed.
|
||||
**A pfUI fork specifically optimized for [Turtle WoW](https://turtlecraft.gg/) with full SuperWoW, Nampower, and UnitXP_SP3 DLL integration.**
|
||||
|
||||
This version includes significant performance improvements, DLL-enhanced features, and TBC spell indicators that work with Turtle WoW's expanded spell library.
|
||||
|
||||
> **Looking for TBC support?** Visit the original pfUI by Shagu: [https://github.com/shagu/pfUI](https://github.com/shagu/pfUI)
|
||||
|
||||
---
|
||||
|
||||
## What's New in Version 6.1.0 (January 8, 2026)
|
||||
|
||||
### 🐛 Bugfixes
|
||||
|
||||
- ✅ **40-Yard Range Check Fix** - Fixed range check not working for raid/party frames due to throttle variable conflict (`this.tick` vs `this.throttleTick`)
|
||||
- ✅ **Aggro Indicator Fix** - Fixed aggro indicator not displaying properly on raid/party frames (same throttle issue)
|
||||
- ✅ **Aggro Detection Cache** - Improved aggro cache to only cache positive results, allowing instant detection when aggro changes while maintaining performance
|
||||
- ✅ **Raid Frames with Group Display** - Fixed HP/Mana not updating when "Use Raid Frames to display group members" was enabled without being in a raid
|
||||
- ✅ **SuperWoW nil-check** - Added nil-check for `SpellInfo` in superwow.lua to prevent errors when SuperWoW is not installed
|
||||
- ✅ **Missing Event Registration** - Added missing events for raid/party frames: `PARTY_MEMBER_ENABLE`, `PARTY_MEMBER_DISABLE`, `PLAYER_UPDATE_RESTING`
|
||||
|
||||
### 🎨 UI Improvements
|
||||
|
||||
- ✅ **Share Button Warning** - Shows message when Share module is disabled instead of doing nothing
|
||||
- ✅ **Hoverbind Button Warning** - Shows message when Hoverbind module is disabled instead of doing nothing
|
||||
|
||||
---
|
||||
|
||||
## What's New in Version 6.0.0 (January 5, 2026)
|
||||
|
||||
### 🚀 Major Performance Improvements
|
||||
|
||||
- ✅ **Central Raid/Party Event Handler** - Replaced per-frame event registration with a centralized system using O(1) unitmap lookups instead of O(n) iteration. Reduces event processing from ~5,760 calls/sec to ~400 calls/sec in 40-man raids (97.5% improvement)
|
||||
- ✅ **Raid HP/Mana Update Fix** - Fixed race condition where unitmap wasn't rebuilt after frame IDs were reassigned, causing HP/Mana bars to not update when players swap positions
|
||||
- ✅ **OnUpdate Throttling** - Added configurable throttles to reduce CPU usage:
|
||||
- Nameplates: 0.1s throttle (target updates remain instant)
|
||||
- Tooltip cursor following: 0.1s throttle
|
||||
- Chat tab mouseover: 0.1s throttle
|
||||
- Panel alignment: 0.2s throttle
|
||||
- Autohide hover check: 0.05s throttle
|
||||
- Libpredict cleanup: 0.1s throttle
|
||||
|
||||
### 🔧 Castbar & Pushback System
|
||||
|
||||
- ✅ **Pushback Fix** - Fixed spell pushback calculation: now correctly adds delay to `casttime` instead of `start` time, matching actual WoW behavior
|
||||
- ✅ **Player GUID Caching** - Caches player GUID on PLAYER_ENTERING_WORLD for efficient self-cast detection
|
||||
- ✅ **Hybrid Detection System** - Uses libcast.db for player casts (handles SPELLCAST_DELAYED events) and SuperWoW's UNIT_CASTEVENT for NPC/other player casts
|
||||
- ✅ **2-Decimal Precision** - Castbar timer now displays with 2 decimal places (e.g., "1.45 / 2.50") for more precise timing
|
||||
|
||||
### 🐱 Druid Stealth Detection
|
||||
|
||||
- ✅ **Event-Based Detection** - Replaced polling-based stealth detection with event-driven system using UNIT_CASTEVENT and PLAYER_AURAS_CHANGED
|
||||
- ✅ **Instant Cat Form Detection** - Detects Cat Form via UNIT_CASTEVENT (spell ID 768) for immediate actionbar page switch
|
||||
- ✅ **Smart Buff Scanning** - Only scans buffs when actually needed (entering Cat Form), eliminates 31-buff scan every frame
|
||||
- ✅ **Cached Variables** - Caches stealth state to prevent redundant checks
|
||||
|
||||
### 🎯 Nameplate Improvements
|
||||
|
||||
- ✅ **Friendly Player Classification** - Fixed friendly players being classified as FRIENDLY_NPC, now correctly uses FRIENDLY_PLAYER for proper nameplate coloring and behavior
|
||||
- ✅ **Performance Throttle** - 0.1s update throttle for non-target nameplates while keeping target nameplate updates instant
|
||||
|
||||
### 🆕 New Modules
|
||||
|
||||
*Modules by [jrc13245](https://github.com/jrc13245/)*
|
||||
|
||||
- ✅ **nampower.lua** - Nampower DLL integration module:
|
||||
- Spell Queue Indicator (shows queued spell icon near castbar)
|
||||
- GCD Indicator
|
||||
- Reactive Spell Indicator
|
||||
- Enhanced buff tracking
|
||||
- Requires [Nampower DLL](https://gitea.com/avitasia/nampower)
|
||||
|
||||
- ✅ **unitxp.lua** - UnitXP_SP3 DLL integration module:
|
||||
- Line of Sight Indicator on target frame
|
||||
- Behind Indicator on target frame
|
||||
- OS Notifications for combat events
|
||||
- Distance-based features
|
||||
- Requires [UnitXP_SP3 DLL](https://codeberg.org/konaka/UnitXP_SP3)
|
||||
|
||||
- ✅ **bgscore.lua** - Battleground Score frame positioning:
|
||||
- Movable BG score frame
|
||||
- Position saving across sessions
|
||||
|
||||
### 🛠️ DLL Detection & API Helpers
|
||||
|
||||
- ✅ **HasSuperWoW()** - Detects SuperWoW DLL presence
|
||||
- ✅ **HasUnitXP()** - Detects UnitXP_SP3 DLL presence
|
||||
- ✅ **HasNampower()** - Detects Nampower DLL presence
|
||||
- ✅ **GetUnitDistance(unit1, unit2)** - Returns distance using best available method (UnitXP or SuperWoW)
|
||||
- ✅ **UnitInLineOfSight(unit1, unit2)** - Line of sight check via UnitXP
|
||||
- ✅ **UnitIsBehind(unit1, unit2)** - Behind check via UnitXP
|
||||
|
||||
### 📝 New Slash Commands
|
||||
|
||||
- ✅ **/pfdll** - Shows DLL status for SuperWoW, Nampower, and UnitXP with detailed diagnostics
|
||||
- ✅ **/pfbehind** - Test command for Behind/LOS detection on current target
|
||||
|
||||
### 🎮 SuperWoW API Wrappers
|
||||
|
||||
- ✅ **TrackUnit API** - Track group members on minimap (configurable)
|
||||
- ✅ **Raid Marker Targeting** - Target units by raid marker ("mark1" to "mark8")
|
||||
- ✅ **GetUnitOwner** - Get owner of pets/totems using "owner" suffix
|
||||
- ✅ **Enhanced SpellInfo** - Wrapper returning structured spell data
|
||||
- ✅ **Clickthrough API** - Toggle clicking through corpses
|
||||
- ✅ **Autoloot API** - Control autoloot setting
|
||||
- ✅ **GetPlayerBuffSpellId** - Get spell ID from buff index
|
||||
- ✅ **LogToCombatLog** - Add custom entries to combat log
|
||||
- ✅ **SetLocalRaidTarget** - Set raid markers only visible to self
|
||||
- ✅ **GetItemCharges** - Get item charges (SuperWoW returns as negative)
|
||||
- ✅ **GetUnitWeaponEnchants** - Get weapon enchant info on any unit
|
||||
|
||||
### 💬 Chat Enhancements
|
||||
|
||||
- ✅ **Player Level Display** - Shows player level next to names in chat (color-coded by difficulty)
|
||||
- ✅ **Tab Mouseover Throttle** - 0.1s throttle for chat tab hover effects
|
||||
|
||||
### ⚙️ New Configuration Options
|
||||
|
||||
All new features are configurable via `/pfui`:
|
||||
|
||||
**Unit Frames → SuperWoW Settings:**
|
||||
- Track Group on Minimap
|
||||
|
||||
**Unit Frames → Nampower Settings:**
|
||||
- Show Spell Queue Indicator
|
||||
- Spell Queue Icon Size
|
||||
- Show Reactive Spell Indicator
|
||||
- Reactive Indicator Size
|
||||
- Enhanced Buff Tracking
|
||||
|
||||
**Unit Frames → UnitXP Settings:**
|
||||
- Show Line of Sight Indicator
|
||||
- Show Behind Indicator
|
||||
- Enable OS Notifications
|
||||
|
||||
**Chat → Text:**
|
||||
- Enable Player Levels
|
||||
|
||||
### 🐛 Bugfixes
|
||||
|
||||
- ✅ **superwow_active Variable** - Fixed inconsistent SuperWoW detection across modules (nameplates, castbar, librange, unitframes)
|
||||
- ✅ **Unitmap Race Condition** - Fixed HP/Mana not updating when raid members swap positions
|
||||
- ✅ **Friendly Nameplate Color** - Fixed friendly players using NPC color instead of player color
|
||||
|
||||
### 🐢 Turtle WoW TBC Spell Indicators
|
||||
|
||||
Turtle WoW includes TBC spells in the Vanilla client. This version includes all TBC buff indicators:
|
||||
- ✅ Commanding Shout indicator
|
||||
- ✅ Misdirection indicator
|
||||
- ✅ Earth Shield indicator
|
||||
- ✅ Prayer of Mending indicator
|
||||
|
||||
---
|
||||
|
||||
**Version:** 6.1.0
|
||||
**Release Date:** January 8, 2026
|
||||
**Compatibility:** Turtle WoW 1.18.0
|
||||
**Optional DLLs:** SuperWoW, Nampower, UnitXP_SP3 (enhanced features when available)
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
1. Download **[Latest Version](https://github.com/me0wg4ming/pfUI/archive/master.zip)**
|
||||
2. Unpack the Zip file
|
||||
3. Rename the folder "pfUI-master" to "pfUI"
|
||||
4. Copy "pfUI" into Wow-Directory\Interface\AddOns
|
||||
5. Restart Wow
|
||||
|
||||
## Optional DLL Enhancements
|
||||
|
||||
pfUI 6.0.0 includes optional integrations with client-side DLLs for enhanced functionality. These DLLs are fully supported on Turtle WoW:
|
||||
|
||||
### SuperWoW
|
||||
**Repository:** [https://github.com/balakethelock/SuperWoW](https://github.com/balakethelock/SuperWoW)
|
||||
|
||||
**Repository:** https://github.com/balakethelock/SuperWoW
|
||||
|
||||
SuperWoW provides GUID-based unit tracking, spell information APIs, and various client enhancements.
|
||||
|
||||
#### Features
|
||||
|
||||
- **GUID-Based Focus Frame** - Focus frame uses actual unit GUIDs instead of name-based emulation
|
||||
- **Native Mouseover Casting** - `/pfcast` supports true mouseover targeting via `CastSpellByName(spell, unit)`
|
||||
- **Druid Mana Bar** - Shows mana while in feral forms (requires `unitframes.druidmanabar` config)
|
||||
- **Enhanced Cast Bars** - Uses `UNIT_CASTEVENT` for accurate cast/channel tracking with spell IDs
|
||||
- **Enhanced Debuff Tracking** - Accurate debuff application via `UNIT_CASTEVENT` with caster info
|
||||
- **Group Minimap Tracking** - Track party/raid members on minimap via `TrackUnit()` API
|
||||
- **Raid Marker Targeting** - Target units by raid marker (`mark1` to `mark8`)
|
||||
- **Clickthrough Mode** - Click through corpses to loot underneath (`/clickthrough` or `/ct`)
|
||||
- **Config Import/Export** - Save and load pfUI configs via `/pfexport` and `/pfimport`
|
||||
- **Local Raid Markers** - Set raid markers visible only to yourself
|
||||
- **Enchanting Link Fixes** - Converts enchant links for compatibility with non-SuperWoW clients
|
||||
|
||||
#### API Functions
|
||||
|
||||
| Function | Description |
|
||||
|----------|-------------|
|
||||
| `pfUI.api.GetMarkedUnit(index)` | Get unit ID for raid marker 1-8 |
|
||||
| `pfUI.api.TargetMark(index)` | Target unit with raid marker |
|
||||
| `pfUI.api.GetUnitOwner(unit)` | Get owner of pet/totem |
|
||||
| `pfUI.api.GetSpellInfo(spellId)` | Get spell name, rank, texture, range |
|
||||
| `pfUI.api.SetClickthrough(enabled)` | Enable/disable clickthrough |
|
||||
| `pfUI.api.ToggleClickthrough()` | Toggle clickthrough mode |
|
||||
| `pfUI.api.SetAutoloot(enabled)` | Enable/disable autoloot |
|
||||
| `pfUI.api.ExportConfig(filename)` | Export config to file |
|
||||
| `pfUI.api.ImportConfig(filename)` | Import config from file |
|
||||
| `pfUI.api.GetPlayerBuffSpellId(index)` | Get spell ID for player buff |
|
||||
| `pfUI.api.LogToCombatLog(text)` | Add text to combat log |
|
||||
| `pfUI.api.SetLocalRaidTarget(unit, index)` | Set local-only raid marker |
|
||||
| `pfUI.api.GetItemCharges(bag, slot)` | Get item charges (returns positive) |
|
||||
| `pfUI.api.GetUnitWeaponEnchants(unit)` | Get weapon enchant info |
|
||||
|
||||
---
|
||||
Provides:
|
||||
- Enhanced castbar detection via UNIT_CASTEVENT
|
||||
- UnitPosition for distance calculations
|
||||
- SetMouseoverUnit for improved targeting
|
||||
- SpellInfo for spell data queries
|
||||
|
||||
### Nampower
|
||||
**Repository:** [https://gitea.com/avitasia/nampower](https://gitea.com/avitasia/nampower)
|
||||
|
||||
**Repository:** https://gitea.com/avitasia/nampower
|
||||
|
||||
Nampower provides spell queuing, precise cooldown tracking, and detailed aura/buff information.
|
||||
|
||||
#### Features
|
||||
|
||||
- **Spell Queue Indicator** - Shows queued spell icon near castbar (requires `unitframes.spellqueue` config)
|
||||
- **Reactive Spell Indicator** - Highlights when Overpower, Revenge, Execute, Riposte, etc. are usable (requires `unitframes.reactive_indicator`)
|
||||
- **Enhanced Debuff Tracking** - GUID-based debuff tracking via `DEBUFF_ADDED/REMOVED` events
|
||||
- **Enhanced Buff Tracking** - GUID-based buff tracking via `BUFF_ADDED/REMOVED` events (requires `unitframes.nampower_buffs`)
|
||||
- **Swing Timer** - Track main-hand and off-hand auto-attack timers
|
||||
- **Disenchant All** - `/disenchantall` or `/dea` to disenchant eligible items
|
||||
|
||||
#### API Functions
|
||||
|
||||
| Function | Description |
|
||||
|----------|-------------|
|
||||
| `pfUI.api.GetUnitAuras(unit)` | Get all buffs/debuffs with spell IDs via `GetUnitField` |
|
||||
| `pfUI.api.UnitHasAura(unit, spellId)` | Check if unit has specific aura |
|
||||
| `pfUI.api.GetUnitResistances(unit)` | Get unit's resistances (armor, fire, frost, etc.) |
|
||||
| `pfUI.api.GetPreciseCooldown(spellId)` | Get precise cooldown info (remaining ms, GCD state) |
|
||||
| `pfUI.api.GetPreciseItemCooldown(itemId)` | Get precise item cooldown |
|
||||
| `pfUI.api.GetEquippedTrinkets()` | Get equipped trinket info |
|
||||
| `pfUI.api.GetTrinketCooldown(slot)` | Get trinket cooldown |
|
||||
| `pfUI.api.UseTrinket(slot, target)` | Use trinket |
|
||||
| `pfUI.api.GetNampowerItemStats(itemId)` | Get item stats |
|
||||
| `pfUI.api.GetNampowerItemLevel(itemId)` | Get item level |
|
||||
| `pfUI.api.GetSpellBonus(spellId, modType)` | Get spell modifiers (damage, crit, cost) |
|
||||
| `pfUI.api.GetSpellDamageBonus(spellId)` | Get spell damage bonus |
|
||||
| `pfUI.api.GetSpellCritBonus(spellId)` | Get spell crit bonus |
|
||||
| `pfUI.api.GetSpellCostReduction(spellId)` | Get spell cost reduction |
|
||||
| `pfUI.api.GetAllBagItems()` | Get all bag items |
|
||||
| `pfUI.api.FindItem(itemIdOrName)` | Find item in bags |
|
||||
| `pfUI.api.UseItem(itemIdOrName, target)` | Use item |
|
||||
| `pfUI.api.GetPlayerEquipment()` | Get player's equipped items |
|
||||
| `pfUI.api.GetTargetEquipment()` | Get target's equipped items |
|
||||
| `pfUI.api.GetMaxRankSpellId(spellName)` | Get spell ID for max rank |
|
||||
| `pfUI.api.GetSpellSlotInfo(spellName)` | Get spell slot/book info |
|
||||
| `pfUI.api.QueueLuaScript(script, priority)` | Queue Lua script for execution |
|
||||
| `pfUI.api.QueueSpell(spellName)` | Queue spell by name |
|
||||
| `pfUI.api.StopChannelNextTick()` | Stop channeling next tick |
|
||||
| `pfUI.api.GetSpellRecord(spellId)` | Get full spell database record |
|
||||
| `pfUI.api.GetSpellSchool(spellId)` | Get spell school (Fire, Frost, etc.) |
|
||||
| `pfUI.api.GetSwingTimers()` | Get auto-attack swing timers |
|
||||
| `pfUI.api.libdebuff_nampower(unit, id)` | Enhanced UnitDebuff with Nampower data |
|
||||
|
||||
---
|
||||
Provides:
|
||||
- Spell queue indicator
|
||||
- GCD indicator
|
||||
- Reactive spell detection
|
||||
- Enhanced cast information
|
||||
|
||||
### UnitXP_SP3
|
||||
**Repository:** [https://codeberg.org/konaka/UnitXP_SP3](https://codeberg.org/konaka/UnitXP_SP3)
|
||||
|
||||
**Repository:** https://github.com/allfoxwy/UnitXP_SP3
|
||||
Provides:
|
||||
- Line of Sight detection
|
||||
- Behind detection
|
||||
- Accurate distance calculations
|
||||
- OS notifications
|
||||
|
||||
UnitXP provides line-of-sight checks, positional information, precise distances, and OS-level notifications.
|
||||
Use `/pfdll` in-game to check which DLLs are detected.
|
||||
|
||||
#### Features
|
||||
## Commands
|
||||
|
||||
- **Line of Sight Indicator** - Shows "NO LOS" text on target frame when target is obstructed (requires `unitframes.los_indicator`)
|
||||
- **Behind Indicator** - Shows "BEHIND" text on target frame when positioned behind target (requires `unitframes.behind_indicator`)
|
||||
- **OS Notifications** - Flashes taskbar and plays system sound on whispers, ready checks, BG queue pops (requires `unitframes.unitxp_notify`)
|
||||
- **Precise Distance** - Exact yard distance between units
|
||||
- **Smart Targeting** - Target nearest enemy, highest HP, cycle through enemies
|
||||
/pfui Open the configuration GUI
|
||||
/pfdll Show DLL detection status (SuperWoW, Nampower, UnitXP)
|
||||
/pfbehind Test Behind/LOS detection on current target
|
||||
/clickthrough Toggle clickthrough mode (or /ct)
|
||||
/share Open the configuration import/export dialog
|
||||
/gm Open the ticket Dialog
|
||||
/rl Reload the whole UI
|
||||
/farm Toggles the Farm-Mode
|
||||
/pfcast Same as /cast but for mouseover units
|
||||
/focus Creates a Focus-Frame for the current target
|
||||
/castfocus Same as /cast but for focus frame
|
||||
/clearfocus Clears the Focus-Frame
|
||||
/swapfocus Toggle Focus and Target-Frame
|
||||
/pftest Toggle pfUI Unitframe Test Mode
|
||||
/abp Addon Button Panel
|
||||
|
||||
#### API Functions
|
||||
## Languages
|
||||
pfUI supports and contains language specific code for the following gameclients.
|
||||
* English (enUS)
|
||||
* Korean (koKR)
|
||||
* French (frFR)
|
||||
* German (deDE)
|
||||
* Chinese (zhCN)
|
||||
* Spanish (esES)
|
||||
* Russian (ruRU)
|
||||
|
||||
| Function | Description |
|
||||
|----------|-------------|
|
||||
| `pfUI.api.GetPreciseDistance(unit1, unit2)` | Get exact distance in yards |
|
||||
| `pfUI.api.IsInMeleeRange(unit)` | Check if unit is in melee range |
|
||||
| `pfUI.api.GetAoEDistance(unit1, unit2)` | Get distance for AoE calculations |
|
||||
| `pfUI.api.TargetNearestEnemy()` | Target nearest hostile unit |
|
||||
| `pfUI.api.TargetHighestHP()` | Target enemy with most HP |
|
||||
| `pfUI.api.TargetNextEnemy()` | Cycle to next enemy |
|
||||
| `pfUI.api.TargetPreviousEnemy()` | Cycle to previous enemy |
|
||||
| `pfUI.api.TargetNextMarked(order)` | Target next marked enemy in order |
|
||||
| `pfUI.api.UnitInLineOfSight(unit1, unit2)` | Check line of sight between units |
|
||||
| `pfUI.api.UnitIsBehind(unit1, unit2)` | Check if unit1 is behind unit2 |
|
||||
## Recommended Addons
|
||||
* [pfQuest](https://shagu.org/pfQuest) A simple database and quest helper
|
||||
* [WIM (continued)](https://github.com/me0wg4ming/WIM/) Give whispers an instant messenger feel
|
||||
|
||||
## Plugins
|
||||
* [pfUI-eliteoverlay](https://shagu.org/pfUI-eliteoverlay) Add elite dragons to unitframes
|
||||
* [pfUI-fonts](https://shagu.org/pfUI-fonts) Additional fonts for pfUI
|
||||
* [pfUI-CustomMedia](https://github.com/mrrosh/pfUI-CustomMedia) Additional textures for pfUI
|
||||
* [pfUI-Gryphons](https://github.com/mrrosh/pfUI-Gryphons) Add back the gryphons to your actionbars
|
||||
|
||||
## FAQ
|
||||
**What does "pfUI" stand for?**
|
||||
The term "*pfui!*" is german and simply stands for "*pooh!*", because I'm not a
|
||||
big fan of creating configuration UI's, especially not via the Wow-API
|
||||
(you might have noticed that in ShaguUI).
|
||||
|
||||
**How can I donate?**
|
||||
You can donate via [GitHub](https://github.com/sponsors/shagu) or [Ko-fi](https://ko-fi.com/shagu)
|
||||
|
||||
**How do I report a Bug?**
|
||||
Please provide as much information as possible in the [Bugtracker](https://github.com/me0wg4ming/pfUI/issues).
|
||||
If there is an error message, provide the full content of it. Just telling that "there is an error" won't help any of us.
|
||||
Please consider adding additional information such as: since when did you got the error,
|
||||
does it still happen using a clean configuration, what other addons are loaded and which version you're running.
|
||||
When playing with a non-english client, the language might be relevant too. If possible, explain how people can reproduce the issue.
|
||||
|
||||
**How can I contribute?**
|
||||
Report errors and issues in the [Bugtracker](https://github.com/me0wg4ming/pfUI/issues).
|
||||
Please make sure to have the latest version installed and check for conflicting addons beforehand.
|
||||
|
||||
**I have bad performance, what can I do?**
|
||||
Version 6.0.0 includes significant performance optimizations. If you still experience issues:
|
||||
1. Disable "Frame Shadows" in Settings → Appearance → Enable Frame Shadows
|
||||
2. Check `/pfdll` to see which DLLs are active (some features require DLLs)
|
||||
3. Disable all AddOns but pfUI and enable one-by-one to identify conflicts
|
||||
4. Report issues via the [Bugtracker](https://github.com/me0wg4ming/pfUI/issues)
|
||||
|
||||
**Where is the happiness indicator for pets?**
|
||||
The pet happiness is shown as the color of your pet's frame. Depending on your skin, this can either be the text or the background color of your pet's healthbar:
|
||||
|
||||
- Green = Happy
|
||||
- Yellow = Content
|
||||
- Red = Unhappy
|
||||
|
||||
Since version 4.0.7 there is also an additional icon that can be enabled from the pet unit frame options.
|
||||
|
||||
**Can I use Clique with pfUI?**
|
||||
This addon already includes support for clickcasting. If you still want to make use of clique, all pfUI's unitframes are already compatible to Clique-TBC. For Vanilla, a pfUI compatible version can be found [Here](https://github.com/shagu/Clique/archive/master.zip). If you want to keep your current version of Clique, you'll have to apply this [Patch](https://github.com/shagu/Clique/commit/a5ee56c3f803afbdda07bae9cd330e0d4a75d75a).
|
||||
|
||||
**Where is the Experience Bar?**
|
||||
The experience bar shows up on mouseover and whenever you gain experience, next to left chatframe by default. There's also an option to make it stay visible all the time.
|
||||
|
||||
**How do I show the Damage- and Threatmeter Dock?**
|
||||
If you enabled the "dock"-feature for your external (third-party) meters such as DPSMate or KTM, then you'll be able to toggle between them and the Right Chat by clicking on the ">" symbol on the bottom-right panel.
|
||||
|
||||
**Why is my chat always resetting to only 3 lines of text?**
|
||||
This happens if "Simple Chat" is enabled in blizzards interface settings (Advanced Options).
|
||||
Paste the following command into your chat to disable that option: `/run SIMPLE_CHAT="0"; pfUI.chat.SetupPositions(); ReloadUI()`
|
||||
|
||||
**How can I enable mouseover cast?**
|
||||
On Vanilla, create a macro with "/pfcast SPELLNAME". If you also want to see the cooldown, You might want to add "/run if nil then CastSpellByName("SPELLNAME") end" on top of the macro.
|
||||
|
||||
**Everything from scratch?! Are you insane?**
|
||||
Most probably, yes.
|
||||
|
||||
---
|
||||
|
||||
### Configuration Options
|
||||
## 🤝 Credits & Acknowledgments
|
||||
|
||||
These DLL features can be enabled/disabled via `/pfui` settings under Unit Frames:
|
||||
- **Shagu** - Original pfUI creator ([https://github.com/shagu/pfUI](https://github.com/shagu/pfUI))
|
||||
- **me0wg4ming** - pfUI fork maintainer and Turtle WoW enhancements
|
||||
- **jrc13245** - Nampower, UnitXP, and BGScore module integration ([https://github.com/jrc13245/](https://github.com/jrc13245/))
|
||||
- **SuperWoW Team** - SuperWoW framework development
|
||||
- **avitasia** - Nampower DLL development
|
||||
- **konaka** - UnitXP_SP3 DLL development
|
||||
- **Turtle WoW Team** - For the amazing Vanilla+ experience
|
||||
- **Community** - Bug reports, feature suggestions, and testing
|
||||
|
||||
| Setting | DLL | Description |
|
||||
|---------|-----|-------------|
|
||||
| `unitframes.druidmanabar` | SuperWoW | Show mana bar while shapeshifted |
|
||||
| `unitframes.track_group` | SuperWoW | Track group members on minimap |
|
||||
| `unitframes.spellqueue` | Nampower | Show spell queue indicator |
|
||||
| `unitframes.spellqueuesize` | Nampower | Spell queue icon size |
|
||||
| `unitframes.reactive_indicator` | Nampower | Show reactive ability procs |
|
||||
| `unitframes.reactive_size` | Nampower | Reactive indicator icon size |
|
||||
| `unitframes.nampower_buffs` | Nampower | Enhanced buff tracking |
|
||||
| `unitframes.los_indicator` | UnitXP | Show line of sight indicator |
|
||||
| `unitframes.behind_indicator` | UnitXP | Show behind indicator |
|
||||
| `unitframes.unitxp_notify` | UnitXP | Enable OS notifications |
|
||||
---
|
||||
|
||||
## 📄 License
|
||||
|
||||
Same as original pfUI - free to use and modify.
|
||||
|
||||
---
|
||||
|
||||
**Version:** 6.0.0
|
||||
**Release Date:** January 5, 2026
|
||||
**Compatibility:** Turtle WoW 1.18.0
|
||||
**Status:** Stable
|
||||
|
||||
+8
-4
@@ -3,10 +3,6 @@ pfUI.api = { }
|
||||
-- load pfUI environment
|
||||
setfenv(1, pfUI:GetEnvironment())
|
||||
|
||||
-- Client API shortcuts
|
||||
gfind = string.gmatch or string.gfind
|
||||
mod = math.mod or mod
|
||||
|
||||
-- [ DLL Detection Helpers ]
|
||||
-- Detects presence of various DLL extensions for enhanced functionality
|
||||
|
||||
@@ -83,6 +79,10 @@ function pfUI.api.UnitIsBehind(unit1, unit2)
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Client API shortcuts
|
||||
gfind = string.gmatch or string.gfind
|
||||
mod = math.mod or mod
|
||||
|
||||
-- [ strsplit ]
|
||||
-- Splits a string using a delimiter.
|
||||
-- 'delimiter' [string] characters that will be interpreted as delimiter
|
||||
@@ -1260,6 +1260,10 @@ function pfUI.api.EnableAutohide(frame, timeout, combat)
|
||||
end
|
||||
|
||||
frame.hover:SetScript("OnUpdate", function()
|
||||
-- throttle to 0.05s
|
||||
if (this.tick or 0) > GetTime() then return end
|
||||
this.tick = GetTime() + 0.05
|
||||
|
||||
if this.activeTo == "keep" then return end
|
||||
|
||||
if MouseIsOver(this, 10, -10, -10, 10) then
|
||||
|
||||
+10
-6
@@ -221,6 +221,13 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("unitframes", nil, "druidmanabar", "1")
|
||||
pfUI:UpdateConfig("unitframes", nil, "druidmanaheight", "2")
|
||||
pfUI:UpdateConfig("unitframes", nil, "druidmanatext", "0")
|
||||
pfUI:UpdateConfig("unitframes", nil, "rangechecki", "4")
|
||||
pfUI:UpdateConfig("unitframes", nil, "combowidth", "6")
|
||||
pfUI:UpdateConfig("unitframes", nil, "comboheight", "6")
|
||||
pfUI:UpdateConfig("unitframes", nil, "abbrevnum", "1")
|
||||
pfUI:UpdateConfig("unitframes", nil, "abbrevname", "1")
|
||||
|
||||
-- Nampower Settings
|
||||
pfUI:UpdateConfig("unitframes", nil, "spellqueue", "1")
|
||||
pfUI:UpdateConfig("unitframes", nil, "spellqueuesize", "24")
|
||||
pfUI:UpdateConfig("unitframes", nil, "gcd_indicator", "0")
|
||||
@@ -229,15 +236,12 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("unitframes", nil, "reactive_indicator", "0")
|
||||
pfUI:UpdateConfig("unitframes", nil, "reactive_size", "28")
|
||||
pfUI:UpdateConfig("unitframes", nil, "damage_tracking", "0")
|
||||
|
||||
-- UnitXP Settings
|
||||
pfUI:UpdateConfig("unitframes", nil, "los_indicator", "0")
|
||||
pfUI:UpdateConfig("unitframes", nil, "behind_indicator", "0")
|
||||
pfUI:UpdateConfig("unitframes", nil, "unitxp_notify", "0")
|
||||
pfUI:UpdateConfig("unitframes", nil, "track_group", "0")
|
||||
pfUI:UpdateConfig("unitframes", nil, "rangechecki", "4")
|
||||
pfUI:UpdateConfig("unitframes", nil, "combowidth", "6")
|
||||
pfUI:UpdateConfig("unitframes", nil, "comboheight", "6")
|
||||
pfUI:UpdateConfig("unitframes", nil, "abbrevnum", "1")
|
||||
pfUI:UpdateConfig("unitframes", nil, "abbrevname", "1")
|
||||
|
||||
pfUI:UpdateConfig("unitframes", nil, "selfingroup", "0")
|
||||
pfUI:UpdateConfig("unitframes", nil, "selfinraid", "0")
|
||||
@@ -725,8 +729,8 @@ function pfUI:LoadConfig()
|
||||
pfUI:UpdateConfig("chat", "text", "playerlinks", "1")
|
||||
pfUI:UpdateConfig("chat", "text", "detecturl", "1")
|
||||
pfUI:UpdateConfig("chat", "text", "classcolor", "1")
|
||||
pfUI:UpdateConfig("chat", "text", "playerlevel", "1")
|
||||
pfUI:UpdateConfig("chat", "text", "whosearchunknown", "0")
|
||||
pfUI:UpdateConfig("chat", "text", "playerlevel", "1")
|
||||
pfUI:UpdateConfig("chat", "left", "width", "380")
|
||||
pfUI:UpdateConfig("chat", "left", "height", "180")
|
||||
pfUI:UpdateConfig("chat", "right", "enable", "0")
|
||||
|
||||
+32
-10
@@ -1,6 +1,8 @@
|
||||
-- load pfUI environment
|
||||
setfenv(1, pfUI:GetEnvironment())
|
||||
|
||||
local superwow_active = HasSuperWoW()
|
||||
|
||||
pfUI.uf = CreateFrame("Frame", nil, UIParent)
|
||||
pfUI.uf:SetScript("OnUpdate", function()
|
||||
if InCombatLockdown and not InCombatLockdown() then
|
||||
@@ -29,17 +31,21 @@ pfUI.uf.RebuildUnitmap = function()
|
||||
if pfUI.uf.raid then
|
||||
for i = 1, 40 do
|
||||
local frame = pfUI.uf.raid[i]
|
||||
if frame and frame.id and frame.id ~= 0 then
|
||||
pfUI.uf.unitmap["raid" .. frame.id] = frame
|
||||
if frame and frame.id and frame.id ~= 0 and frame.label then
|
||||
-- ✅ Jetzt auch party-Frames in Raid-Frames unterstützen
|
||||
local unitstr = frame.label .. frame.id
|
||||
pfUI.uf.unitmap[unitstr] = frame
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Rebuild party mappings
|
||||
for i = 1, 4 do
|
||||
local frame = _G["pfGroup" .. i]
|
||||
if frame and frame.label == "party" then
|
||||
pfUI.uf.unitmap["party" .. frame.id] = frame
|
||||
-- Rebuild party mappings (nur wenn nicht als Raid verwendet)
|
||||
if C.unitframes.raidforgroup ~= "1" then
|
||||
for i = 1, 4 do
|
||||
local frame = _G["pfGroup" .. i]
|
||||
if frame and frame.label == "party" then
|
||||
pfUI.uf.unitmap["party" .. frame.id] = frame
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -242,7 +248,8 @@ end)
|
||||
|
||||
local aggrodata = { }
|
||||
function pfUI.api.UnitHasAggro(unit)
|
||||
if aggrodata[unit] and GetTime() < aggrodata[unit].check + 1 then
|
||||
-- Only cache positive results (has aggro) - allows fast detection when aggro changes
|
||||
if aggrodata[unit] and aggrodata[unit].state > 0 and GetTime() < aggrodata[unit].check + 1 then
|
||||
return aggrodata[unit].state
|
||||
end
|
||||
|
||||
@@ -984,8 +991,8 @@ function pfUI.uf.OnUpdate()
|
||||
-- Throttle for raid/party frames: only process updates every 0.1s
|
||||
-- This reduces OnUpdate calls from 5760/sec (40 frames * 144fps) to ~400/sec
|
||||
if this.label == "raid" or this.label == "party" then
|
||||
if (this.tick or 0) > GetTime() then return end
|
||||
this.tick = GetTime() + 0.1
|
||||
if (this.throttleTick or 0) > GetTime() then return end
|
||||
this.throttleTick = GetTime() + 0.1
|
||||
end
|
||||
|
||||
-- process indicator update events
|
||||
@@ -1259,6 +1266,9 @@ function pfUI.uf:EnableEvents()
|
||||
f:RegisterEvent("RAID_ROSTER_UPDATE")
|
||||
f:RegisterEvent("PARTY_LOOT_METHOD_CHANGED")
|
||||
f:RegisterEvent("RAID_TARGET_UPDATE")
|
||||
f:RegisterEvent("PARTY_MEMBER_ENABLE")
|
||||
f:RegisterEvent("PARTY_MEMBER_DISABLE")
|
||||
f:RegisterEvent("PLAYER_UPDATE_RESTING")
|
||||
|
||||
-- Unitmap aktualisieren
|
||||
pfUI.uf.RebuildUnitmap()
|
||||
@@ -2403,6 +2413,8 @@ function pfUI.uf:SetupBuffIndicators(config)
|
||||
if myclass == "WARRIOR" then
|
||||
-- Battle Shout
|
||||
table.insert(indicators, "interface\\icons\\ability_warrior_battleshout")
|
||||
-- Commanding Shout (TBC)
|
||||
table.insert(indicators, "interface\\icons\\ability_warrior_rallyingcry")
|
||||
end
|
||||
|
||||
if myclass == "MAGE" then
|
||||
@@ -2421,6 +2433,14 @@ function pfUI.uf:SetupBuffIndicators(config)
|
||||
|
||||
-- Aspect of the Pack
|
||||
table.insert(indicators, "interface\\icons\\ability_mount_whitetiger")
|
||||
|
||||
-- Misdirection (TBC)
|
||||
table.insert(indicators, "interface\\icons\\ability_hunter_misdirection")
|
||||
end
|
||||
|
||||
if myclass == "SHAMAN" then
|
||||
-- Earth Shield (TBC)
|
||||
table.insert(indicators, "interface\\icons\\spell_nature_skinofearth")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2449,6 +2469,8 @@ function pfUI.uf:SetupBuffIndicators(config)
|
||||
table.insert(indicators, "interface\\icons\\spell_holy_renew")
|
||||
-- Power Word: Shield
|
||||
table.insert(indicators, "interface\\icons\\spell_holy_powerwordshield")
|
||||
-- Prayer of Mending (TBC)
|
||||
table.insert(indicators, "interface\\icons\\spell_holy_prayerofmendingtga")
|
||||
end
|
||||
|
||||
if myclass == "DRUID" or config.all_hots == "1" then
|
||||
|
||||
+1960
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,4 @@
|
||||
<Ui xmlns="http://www.blizzard.com/wow/ui/">
|
||||
<Include file="..\compat\vanilla.lua"/>
|
||||
<Include file="..\compat\tbc.lua"/>
|
||||
</Ui>
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
<Include file="..\modules\questitem.lua"/>
|
||||
<Include file="..\modules\thirdparty.lua"/>
|
||||
<Include file="..\modules\thirdparty-vanilla.lua"/>
|
||||
<Include file="..\modules\thirdparty-tbc.lua"/>
|
||||
<Include file="..\modules\buff.lua"/>
|
||||
<Include file="..\modules\buffwatch.lua"/>
|
||||
<Include file="..\modules\nameplates.lua"/>
|
||||
@@ -65,6 +66,7 @@
|
||||
<Include file="..\modules\afkcam.lua"/>
|
||||
<Include file="..\modules\screenshot.lua"/>
|
||||
<Include file="..\modules\addoncompat.lua"/>
|
||||
<Include file="..\modules\combatlogfix.lua"/>
|
||||
<Include file="..\modules\energytick.lua"/>
|
||||
<Include file="..\modules\totems.lua"/>
|
||||
<Include file="..\modules\macrotweak.lua"/>
|
||||
@@ -72,4 +74,5 @@
|
||||
<Include file="..\modules\superwow.lua"/>
|
||||
<Include file="..\modules\nampower.lua"/>
|
||||
<Include file="..\modules\unitxp.lua"/>
|
||||
<Include file="..\modules\bgscore.lua"/>
|
||||
</Ui>
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
<Include file="..\skins\blizzard\game_menu.lua"/>
|
||||
<Include file="..\skins\blizzard\guild_registrar.lua"/>
|
||||
<Include file="..\skins\blizzard\help.lua"/>
|
||||
<Include file="..\skins\blizzard\options-interface.lua"/>
|
||||
<Include file="..\skins\blizzard\options-sound.lua"/>
|
||||
<Include file="..\skins\blizzard\options-video.lua"/>
|
||||
<Include file="..\skins\blizzard\petition.lua"/>
|
||||
@@ -33,4 +34,13 @@
|
||||
<Include file="..\skins\blizzard\tooltips.lua"/>
|
||||
<Include file="..\skins\blizzard\tabard.lua"/>
|
||||
<Include file="..\skins\blizzard\itemtext.lua"/>
|
||||
|
||||
<!-- TBC -->
|
||||
<Include file="..\skins\blizzard\tracking.lua"/>
|
||||
<Include file="..\skins\blizzard\guildbank.lua"/>
|
||||
<Include file="..\skins\blizzard\socket.lua"/>
|
||||
<Include file="..\skins\blizzard\arena_registrar.lua"/>
|
||||
<Include file="..\skins\blizzard\arena.lua"/>
|
||||
<Include file="..\skins\blizzard\time_manager.lua"/>
|
||||
<Include file="..\skins\blizzard\lfg.lua"/>
|
||||
</Ui>
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
-- load pfUI environment
|
||||
setfenv(1, pfUI:GetEnvironment())
|
||||
|
||||
local superwow_active = HasSuperWoW()
|
||||
|
||||
--[[ librange ]]--
|
||||
-- A pfUI library that detects and caches distance to units.
|
||||
--
|
||||
|
||||
+51
-21
@@ -395,6 +395,14 @@ pfUI:RegisterModule("actionbar", "vanilla", function ()
|
||||
for line in gfind(body, "[^%\n]+") do
|
||||
_, _, match = string.find(line, '^#showtooltip (.+)')
|
||||
|
||||
-- skip any further manual macro scanning on
|
||||
-- gameclients with native macro spell detection
|
||||
if pfUI.client > 11200 and match then
|
||||
self.spellslot = nil
|
||||
self.booktype = nil
|
||||
return
|
||||
end
|
||||
|
||||
-- allow the user to disable the scan
|
||||
if match and strfind(match, "disable") then
|
||||
return
|
||||
@@ -972,17 +980,25 @@ pfUI:RegisterModule("actionbar", "vanilla", function ()
|
||||
pageswitch:SetScript("OnEvent", function()
|
||||
if class ~= "DRUID" then return end
|
||||
|
||||
-- UNIT_CASTEVENT: detect Cat Form and Prowl cast instantly
|
||||
-- Cat Form: 768 | Prowl: 5215 (R1), 6783 (R2), 9913 (R3)
|
||||
-- On login/reload: full scan
|
||||
if event == "PLAYER_ENTERING_WORLD" then
|
||||
prowling = FullScan()
|
||||
return
|
||||
end
|
||||
|
||||
-- UNIT_CASTEVENT: detect Prowl cast instantly
|
||||
-- Prowl Spell IDs: 5215 (Rank 1), 6783 (Rank 2), 9913 (Rank 3)
|
||||
if event == "UNIT_CASTEVENT" then
|
||||
local guid, target, cEvent, spellId = arg1, arg2, arg3, arg4
|
||||
local _, playerGuid = UnitExists("player")
|
||||
if guid == playerGuid and cEvent == "CAST" then
|
||||
if spellId == 5215 or spellId == 6783 or spellId == 9913 then
|
||||
-- Prowl cast detected
|
||||
inCatForm = true
|
||||
prowlActive = true
|
||||
prowling = true
|
||||
elseif spellId == 768 then
|
||||
-- Cat Form cast (Spell ID 768)
|
||||
inCatForm = true
|
||||
end
|
||||
end
|
||||
@@ -1294,26 +1310,40 @@ pfUI:RegisterModule("actionbar", "vanilla", function ()
|
||||
if enable == "1" then
|
||||
-- handle pet bar
|
||||
if i == 12 then
|
||||
-- only show when pet actions exists
|
||||
if PetHasActionBar() or pfUI.unlock and pfUI.unlock:IsShown() then
|
||||
bars[i]:Show()
|
||||
else
|
||||
bars[i]:Hide()
|
||||
end
|
||||
|
||||
-- show/hide petbar on petbar updates
|
||||
if init then
|
||||
bars[i]:RegisterEvent("PET_BAR_UPDATE")
|
||||
bars[i]:SetScript("OnEvent", function()
|
||||
-- hide obsolete buttons
|
||||
for i=1, NUM_PET_ACTION_SLOTS do
|
||||
if not PetHasActionBar() and bars[12][i] then
|
||||
bars[12][i]:Hide()
|
||||
end
|
||||
if pfUI.client > 11200 then
|
||||
if InCombatLockdown and InCombatLockdown() then
|
||||
-- don't process those events during combat
|
||||
else
|
||||
-- set state driver for pet bars
|
||||
bars[i]:SetAttribute("unit", "pet")
|
||||
local visibility = pfUI.unlock and pfUI.unlock:IsShown() and "show" or petvisibility
|
||||
if bars[i].visibility ~= visibility then
|
||||
RegisterStateDriver(bars[i], 'visibility', visibility)
|
||||
bars[i].visibility = visibility
|
||||
end
|
||||
-- refresh layout
|
||||
CreateActionBar(12)
|
||||
end)
|
||||
end
|
||||
else
|
||||
-- only show when pet actions exists
|
||||
if PetHasActionBar() or pfUI.unlock and pfUI.unlock:IsShown() then
|
||||
bars[i]:Show()
|
||||
else
|
||||
bars[i]:Hide()
|
||||
end
|
||||
|
||||
-- show/hide petbar on petbar updates
|
||||
if init then
|
||||
bars[i]:RegisterEvent("PET_BAR_UPDATE")
|
||||
bars[i]:SetScript("OnEvent", function()
|
||||
-- hide obsolete buttons
|
||||
for i=1, NUM_PET_ACTION_SLOTS do
|
||||
if not PetHasActionBar() and bars[12][i] then
|
||||
bars[12][i]:Hide()
|
||||
end
|
||||
end
|
||||
-- refresh layout
|
||||
CreateActionBar(12)
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
-- handle shapeshift bar
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("addonbuttons", "vanilla", function ()
|
||||
pfUI:RegisterModule("addonbuttons", "vanilla:tbc", function ()
|
||||
if not pfUI.minimap then return end
|
||||
if C.abuttons.enable == "0" then return end
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("addons", "vanilla", function ()
|
||||
pfUI:RegisterModule("addons", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
|
||||
-- add main menu button
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("afkcam", "vanilla", function ()
|
||||
pfUI:RegisterModule("afkcam", "vanilla:tbc", function ()
|
||||
local MARKED_AFK_CAPTURE = SanitizePattern(MARKED_AFK_MESSAGE)
|
||||
local social_chats = {
|
||||
"CHAT_MSG_SAY",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("autovendor", "vanilla", function ()
|
||||
pfUI:RegisterModule("autovendor", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
local processed = {}
|
||||
|
||||
+3
-3
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("bags", "vanilla", function ()
|
||||
pfUI:RegisterModule("bags", "vanilla:tbc", function ()
|
||||
local rawborder, default_border = GetBorderSize("bags")
|
||||
|
||||
local knownInventorySpellTextures = {
|
||||
@@ -573,8 +573,8 @@ pfUI:RegisterModule("bags", "vanilla", function ()
|
||||
SlotLeave()
|
||||
end)
|
||||
|
||||
-- The OnEvent function of the template scans for framenames,
|
||||
-- and doesn't know the pf-Names. Therefore, triggering
|
||||
-- On TBC, the OnEvent function of the template scans for framenames,
|
||||
-- and obviously doesn't know the pf-Names. Therefore, triggering
|
||||
-- the update function on each frame manually
|
||||
if frame == pfUI.bag.left and BankFrameItemButton_Update then
|
||||
local SlotUpdate = frame.bagslots.slots[slot].frame:GetScript("OnUpdate")
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("bubbles", "vanilla", function ()
|
||||
pfUI:RegisterModule("bubbles", "vanilla:tbc", function ()
|
||||
|
||||
local alpha = tonumber(C.chat.bubbles.alpha)
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("buff", "vanilla", function ()
|
||||
pfUI:RegisterModule("buff", "vanilla:tbc", function ()
|
||||
-- Hide Blizz
|
||||
BuffFrame:Hide()
|
||||
BuffFrame:UnregisterAllEvents()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("buffwatch", "vanilla", function ()
|
||||
pfUI:RegisterModule("buffwatch", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize("panels")
|
||||
local scanner = libtipscan:GetScanner("buffwatch")
|
||||
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
pfUI:RegisterModule("castbar", "vanilla", function ()
|
||||
local superwow_active = HasSuperWoW()
|
||||
|
||||
local font = C.castbar.use_unitfonts == "1" and pfUI.font_unit or pfUI.font_default
|
||||
local font_size = C.castbar.use_unitfonts == "1" and C.global.font_unit_size or C.global.font_size
|
||||
local rawborder, default_border = GetBorderSize("unitframes")
|
||||
|
||||
+3
-2
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("chat", "vanilla", function ()
|
||||
pfUI:RegisterModule("chat", "vanilla:tbc", function ()
|
||||
local panelfont = C.panel.use_unitfonts == "1" and pfUI.font_unit or pfUI.font_default
|
||||
local panelfont_size = C.panel.use_unitfonts == "1" and C.global.font_unit_size or C.global.font_size
|
||||
local rawborder, default_border = GetBorderSize("chat")
|
||||
@@ -753,7 +753,8 @@ pfUI:RegisterModule("chat", "vanilla", function ()
|
||||
end
|
||||
|
||||
-- Remove prat CLINKs
|
||||
text = gsub(text, "{CLINK:(%x+):([%d-]-:[%d-]-:[%d-]-:[%d-]-):([^}]-)}", "|c%1|Hitem:%2|h[%3]|h|r")
|
||||
text = gsub(text, "{CLINK:(%x+):([%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-):([^}]-)}", "|c%1|Hitem:%2|h[%3]|h|r") -- tbc
|
||||
text = gsub(text, "{CLINK:(%x+):([%d-]-:[%d-]-:[%d-]-:[%d-]-):([^}]-)}", "|c%1|Hitem:%2|h[%3]|h|r") -- vanilla
|
||||
|
||||
-- Remove chatter CLINKs
|
||||
text = gsub(text, "{CLINK:item:(%x+):([%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-):([^}]-)}", "|c%1|Hitem:%2|h[%3]|h|r")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("chatcopy", "vanilla", function ()
|
||||
pfUI:RegisterModule("chatcopy", "vanilla:tbc", function ()
|
||||
local limit = 100
|
||||
local f = CreateFrame("Frame")
|
||||
f:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
pfUI:RegisterModule("combatlogfix", "tbc", function ()
|
||||
-- Fixes the combatlog break bugs that exist since patch 2.4 by simply clearing the whole log
|
||||
-- on every update. This is required in order to receive new log events. Otherwise, addons like
|
||||
-- Omen or Recount won't work and simply don't receive any new data at a given time.
|
||||
local combatlog = CreateFrame("Frame", "pfCombatLogFix", UIParent)
|
||||
combatlog:SetScript("OnUpdate", CombatLogClearEntries)
|
||||
end)
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("combopoints", "vanilla", function ()
|
||||
pfUI:RegisterModule("combopoints", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
|
||||
-- Hide Blizzard combo point frame and unregister all events to prevent it from popping up again
|
||||
|
||||
+11
-4
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("cooldown", "vanilla", function ()
|
||||
pfUI:RegisterModule("cooldown", "vanilla:tbc", function ()
|
||||
-- cache values
|
||||
local lowcolor = {strsplit(",", C.appearance.cd.lowcolor)}
|
||||
local normalcolor = {strsplit(",", C.appearance.cd.normalcolor)}
|
||||
@@ -134,7 +134,14 @@ pfUI:RegisterModule("cooldown", "vanilla", function ()
|
||||
end
|
||||
end
|
||||
|
||||
-- vanilla does not have a cooldown frame type, so we hook the
|
||||
-- regular SetTimer function that each one is calling.
|
||||
hooksecurefunc("CooldownFrame_SetTimer", SetCooldown)
|
||||
if pfUI.expansion == "vanilla" then
|
||||
-- vanilla does not have a cooldown frame type, so we hook the
|
||||
-- regular SetTimer function that each one is calling.
|
||||
hooksecurefunc("CooldownFrame_SetTimer", SetCooldown)
|
||||
else
|
||||
-- tbc and later expansion have a cooldown frametype, so we can
|
||||
-- hook directly into the frame creation and add our function there.
|
||||
local methods = getmetatable(CreateFrame('Cooldown', nil, nil, 'CooldownFrameTemplate')).__index
|
||||
hooksecurefunc(methods, 'SetCooldown', SetCooldown)
|
||||
end
|
||||
end)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("easteregg", "vanilla", function ()
|
||||
pfUI:RegisterModule("easteregg", "vanilla:tbc", function ()
|
||||
-- merry x-mas!
|
||||
if date("%m%d") == "1224" or date("%m%d") == "1225" then
|
||||
local title = (UnitFactionGroup("player") == "Horde") and PVP_RANK_18_0 or PVP_RANK_18_1
|
||||
|
||||
+7
-17
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("energytick", "vanilla", function ()
|
||||
pfUI:RegisterModule("energytick", "vanilla:tbc", function ()
|
||||
if not pfUI.uf or not pfUI.uf.player then return end
|
||||
|
||||
local energytick = CreateFrame("Frame", nil, pfUI.uf.player.power.bar)
|
||||
@@ -7,9 +7,6 @@ pfUI:RegisterModule("energytick", "vanilla", function ()
|
||||
energytick:RegisterEvent("UNIT_DISPLAYPOWER")
|
||||
energytick:RegisterEvent("UNIT_ENERGY")
|
||||
energytick:RegisterEvent("UNIT_MANA")
|
||||
energytick:RegisterEvent("CHAT_MSG_SPELL_SELF_BUFF")
|
||||
energytick:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS")
|
||||
|
||||
energytick:SetScript("OnEvent", function()
|
||||
if UnitPowerType("player") == 0 and C.unitframes.player.manatick == "1" then
|
||||
this.mode = "MANA"
|
||||
@@ -21,14 +18,6 @@ pfUI:RegisterModule("energytick", "vanilla", function ()
|
||||
this:Hide()
|
||||
end
|
||||
|
||||
-- Filter nur eigene Energy-Gewinne von Talents/Buffs
|
||||
if event == "CHAT_MSG_SPELL_SELF_BUFF" or event == "CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS" then
|
||||
if string.find(arg1, "You gain") and string.find(arg1, "Energy from") then
|
||||
this.ignoreNextGain = true
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if event == "PLAYER_ENTERING_WORLD" then
|
||||
this.lastMana = UnitMana("player")
|
||||
end
|
||||
@@ -49,10 +38,7 @@ pfUI:RegisterModule("energytick", "vanilla", function ()
|
||||
this.badtick = diff
|
||||
end
|
||||
elseif this.mode == "ENERGY" and diff > 0 then
|
||||
if not this.ignoreNextGain then
|
||||
this.target = 2
|
||||
end
|
||||
this.ignoreNextGain = false
|
||||
this.target = 2
|
||||
end
|
||||
this.lastMana = this.currentMana
|
||||
end
|
||||
@@ -83,10 +69,14 @@ pfUI:RegisterModule("energytick", "vanilla", function ()
|
||||
energytick.spark:SetWidth(C.unitframes.player.pheight + 5)
|
||||
energytick.spark:SetBlendMode('ADD')
|
||||
|
||||
-- update spark size on player frame changes
|
||||
local hookUpdateConfig = pfUI.uf.player.UpdateConfig
|
||||
function pfUI.uf.player.UpdateConfig()
|
||||
-- update spark sizes
|
||||
energytick.spark:SetHeight(C.unitframes.player.pheight + 15)
|
||||
energytick.spark:SetWidth(C.unitframes.player.pheight + 5)
|
||||
|
||||
-- run default unitframe update function
|
||||
hookUpdateConfig(pfUI.uf.player)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("farmmode", "vanilla", function ()
|
||||
pfUI:RegisterModule("farmmode", "vanilla:tbc", function ()
|
||||
local function ToggleFarmMode()
|
||||
if pfUI.farmmap:IsShown() then
|
||||
pfUI.farmmap:Hide()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("feigndeath", "vanilla", function ()
|
||||
pfUI:RegisterModule("feigndeath", "vanilla:tbc", function ()
|
||||
local cache = { }
|
||||
local scanner = libtipscan:GetScanner("feigndeath")
|
||||
local healthbar = scanner:GetChildren()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("firstrun", "vanilla", function ()
|
||||
pfUI:RegisterModule("firstrun", "vanilla:tbc", function ()
|
||||
pfUI.firstrun = CreateFrame("Frame", "pfFirstRunWizard", UIParent)
|
||||
pfUI.firstrun.steps = {}
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("focus", "vanilla", function ()
|
||||
pfUI:RegisterModule("focus", "vanilla:tbc", function ()
|
||||
-- do not go further on disabled UFs
|
||||
if C.unitframes.disable == "1" then return end
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("group", "vanilla", function ()
|
||||
pfUI:RegisterModule("group", "vanilla:tbc", function ()
|
||||
-- do not go further on disabled UFs
|
||||
if C.unitframes.disable == "1" then return end
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("gryphons", "vanilla", function ()
|
||||
pfUI:RegisterModule("gryphons", "vanilla:tbc", function ()
|
||||
pfUI.gryphons = {
|
||||
frames = {
|
||||
left = CreateFrame("Frame"),
|
||||
|
||||
+37
-21
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("gui", "vanilla", function ()
|
||||
pfUI:RegisterModule("gui", "vanilla:tbc", function ()
|
||||
local Reload, U, CreateConfig, CreateTabFrame, CreateArea, CreateGUIEntry, EntryUpdate
|
||||
|
||||
-- "searchDB" gets populated when CreateConfig is called. The table holds
|
||||
@@ -656,7 +656,11 @@ pfUI:RegisterModule("gui", "vanilla", function ()
|
||||
pfUI.gui.hoverbind:SetHeight(25)
|
||||
pfUI.gui.hoverbind:SetText(T["Hoverbind"])
|
||||
pfUI.gui.hoverbind:SetScript("OnClick", function()
|
||||
if pfUI.hoverbind then pfUI.hoverbind:Show() end
|
||||
if pfUI.hoverbind then
|
||||
pfUI.hoverbind:Show()
|
||||
else
|
||||
message("Please enable the Hoverbind module to use this feature.")
|
||||
end
|
||||
end)
|
||||
|
||||
SkinButton(pfUI.gui.hoverbind)
|
||||
@@ -671,6 +675,8 @@ pfUI:RegisterModule("gui", "vanilla", function ()
|
||||
if pfShare then
|
||||
pfShare:Show()
|
||||
pfShareExport:Click()
|
||||
else
|
||||
message("Please enable the Share module to share your config.")
|
||||
end
|
||||
end)
|
||||
SkinButton(pfUI.gui.share)
|
||||
@@ -2402,26 +2408,36 @@ pfUI:RegisterModule("gui", "vanilla", function ()
|
||||
CreateConfig(nil, "ShaguDPS (" .. T["Dock"] .. ")", C.thirdparty.shagudps, "dock", "checkbox")
|
||||
CreateConfig(nil, "DPSMate (" .. T["Skin"] .. ")", C.thirdparty.dpsmate, "skin", "checkbox")
|
||||
CreateConfig(nil, "DPSMate (" .. T["Dock"] .. ")", C.thirdparty.dpsmate, "dock", "checkbox")
|
||||
CreateConfig(nil, "SWStats (" .. T["Skin"] .. ")", C.thirdparty.swstats, "skin", "checkbox")
|
||||
CreateConfig(nil, "SWStats (" .. T["Dock"] .. ")", C.thirdparty.swstats, "dock", "checkbox")
|
||||
CreateConfig(nil, "KLH Threat Meter (" .. T["Skin"] .. ")", C.thirdparty.ktm, "skin", "checkbox")
|
||||
CreateConfig(nil, "KLH Threat Meter (" .. T["Dock"] .. ")", C.thirdparty.ktm, "dock", "checkbox")
|
||||
CreateConfig(nil, "TW Threatmeter (" .. T["Skin"] .. ")", C.thirdparty.twt, "skin", "checkbox")
|
||||
CreateConfig(nil, "TW Threatmeter (" .. T["Dock"] .. ")", C.thirdparty.twt, "dock", "checkbox")
|
||||
CreateConfig(nil, "WIM", C.thirdparty.wim, "enable", "checkbox")
|
||||
CreateConfig(nil, "HealComm", C.thirdparty.healcomm, "enable", "checkbox")
|
||||
CreateConfig(nil, "SortBags", C.thirdparty.sortbags, "enable", "checkbox")
|
||||
CreateConfig(nil, "Recount (" .. T["Skin"] .. ")", C.thirdparty.recount, "skin", "checkbox", nil, nil, nil, nil, "tbc")
|
||||
CreateConfig(nil, "Recount (" .. T["Dock"] .. ")", C.thirdparty.recount, "dock", "checkbox", nil, nil, nil, nil, "tbc")
|
||||
CreateConfig(nil, "Omen (" .. T["Skin"] .. ")", C.thirdparty.omen, "skin", "checkbox", nil, nil, nil, nil, "tbc")
|
||||
CreateConfig(nil, "Omen (" .. T["Dock"] .. ")", C.thirdparty.omen, "dock", "checkbox", nil, nil, nil, nil, "tbc")
|
||||
CreateConfig(nil, "SWStats (" .. T["Skin"] .. ")", C.thirdparty.swstats, "skin", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "SWStats (" .. T["Dock"] .. ")", C.thirdparty.swstats, "dock", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "KLH Threat Meter (" .. T["Skin"] .. ")", C.thirdparty.ktm, "skin", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "KLH Threat Meter (" .. T["Dock"] .. ")", C.thirdparty.ktm, "dock", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "TW Threatmeter (" .. T["Skin"] .. ")", C.thirdparty.twt, "skin", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "TW Threatmeter (" .. T["Dock"] .. ")", C.thirdparty.twt, "dock", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "WIM", C.thirdparty.wim, "enable", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "HealComm", C.thirdparty.healcomm, "enable", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "SortBags", C.thirdparty.sortbags, "enable", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "Bag_Sort", C.thirdparty.bag_sort, "enable", "checkbox", nil, nil, nil, nil, "tbc")
|
||||
CreateConfig(nil, "MrPlow", C.thirdparty.mrplow, "enable", "checkbox")
|
||||
CreateConfig(nil, "BetterCharacterStats", C.thirdparty.bcs, "enable", "checkbox")
|
||||
CreateConfig(nil, "Crafty", C.thirdparty.crafty, "enable", "checkbox")
|
||||
CreateConfig(nil, "CleverMacro", C.thirdparty.clevermacro, "enable", "checkbox")
|
||||
CreateConfig(nil, "FlightMap", C.thirdparty.flightmap, "enable", "checkbox")
|
||||
CreateConfig(nil, "TheoryCraft", C.thirdparty.theorycraft, "enable", "checkbox")
|
||||
CreateConfig(nil, "SuperMacro", C.thirdparty.supermacro, "enable", "checkbox")
|
||||
CreateConfig(nil, "AtlasLoot", C.thirdparty.atlasloot, "enable", "checkbox")
|
||||
CreateConfig(nil, "MyRolePlay", C.thirdparty.myroleplay, "enable", "checkbox")
|
||||
CreateConfig(nil, "DruidManaBar", C.thirdparty.druidmana, "enable", "checkbox")
|
||||
CreateConfig(nil, "NoteIt", C.thirdparty.noteit, "enable", "checkbox")
|
||||
CreateConfig(nil, "BetterCharacterStats", C.thirdparty.bcs, "enable", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "Crafty", C.thirdparty.crafty, "enable", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "CleverMacro", C.thirdparty.clevermacro, "enable", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "AckisRecipeList", C.thirdparty.ackis, "enable", "checkbox", nil, nil, nil, nil, "tbc")
|
||||
CreateConfig(nil, "SheepWatch", C.thirdparty.sheepwatch, "enable", "checkbox", nil, nil, nil, nil, "tbc")
|
||||
CreateConfig(nil, "TotemTimers", C.thirdparty.totemtimers, "enable", "checkbox", nil, nil, nil, nil, "tbc")
|
||||
CreateConfig(nil, "DruidBar", C.thirdparty.druidbar, "enable", "checkbox", nil, nil, nil, nil, "tbc")
|
||||
CreateConfig(nil, "BCEPGP", C.thirdparty.bcepgp, "enable", "checkbox", nil, nil, nil, nil, "tbc")
|
||||
CreateConfig(nil, "FlightMap", C.thirdparty.flightmap, "enable", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "TheoryCraft", C.thirdparty.theorycraft, "enable", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "SuperMacro", C.thirdparty.supermacro, "enable", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "AtlasLoot", C.thirdparty.atlasloot, "enable", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "MyRolePlay", C.thirdparty.myroleplay, "enable", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "DruidManaBar", C.thirdparty.druidmana, "enable", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
CreateConfig(nil, "NoteIt", C.thirdparty.noteit, "enable", "checkbox", nil, nil, nil, nil, "vanilla")
|
||||
end)
|
||||
|
||||
CreateGUIEntry(T["Components"], T["Modules"], function()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("hoverbind", "vanilla", function ()
|
||||
pfUI:RegisterModule("hoverbind", "vanilla:tbc", function ()
|
||||
local keymap = {
|
||||
-- buttons to binding association
|
||||
["pfActionBarMainButton"] = "ACTIONBUTTON",
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("infight", "vanilla", function ()
|
||||
pfUI:RegisterModule("infight", "vanilla:tbc", function ()
|
||||
local function OnUpdate()
|
||||
if not this.infight and not this.aggro and not this.health then return end
|
||||
if ( this.tick or 1) > GetTime() then return else this.tick = GetTime() + .1 end
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("loot", "vanilla", function ()
|
||||
pfUI:RegisterModule("loot", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
|
||||
pfUI.loot = CreateFrame("Frame", "pfLootFrame", UIParent)
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("map", "vanilla", function ()
|
||||
pfUI:RegisterModule("map", "vanilla:tbc", function ()
|
||||
table.insert(UISpecialFrames, "WorldMapFrame")
|
||||
|
||||
local function UpdateTooltipScale()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("mapreveal", "vanilla", function ()
|
||||
pfUI:RegisterModule("mapreveal", "vanilla:tbc", function ()
|
||||
-- do not load if other map addon is loaded
|
||||
if Cartographer then return end
|
||||
if METAMAP_TITLE then return end
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("minimap", "vanilla", function ()
|
||||
pfUI:RegisterModule("minimap", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local size = tonumber(C.appearance.minimap.size) or 140
|
||||
|
||||
@@ -39,7 +39,7 @@ pfUI:RegisterModule("minimap", "vanilla", function ()
|
||||
Minimap:SetWidth(size)
|
||||
Minimap:SetHeight(size)
|
||||
|
||||
-- do the best to detect the minimap arrow
|
||||
-- vanilla+tbc: do the best to detect the minimap arrow
|
||||
local arrowscale = tonumber(C.appearance.minimap.arrowscale)
|
||||
local minimaparrow = ({Minimap:GetChildren()})[9]
|
||||
for k, v in pairs({Minimap:GetChildren()}) do
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("mirrortimers", "vanilla", function ()
|
||||
pfUI:RegisterModule("mirrortimers", "vanilla:tbc", function ()
|
||||
local font = pfUI.font_default
|
||||
local fontsize = tonumber(C.global.font_size)
|
||||
local height = fontsize * 1.3
|
||||
|
||||
+198
-81
@@ -2,6 +2,10 @@ pfUI:RegisterModule("nameplates", "vanilla", function ()
|
||||
-- disable original castbars
|
||||
pcall(SetCVar, "ShowVKeyCastbar", 0)
|
||||
|
||||
-- check for SuperWoW support (use SUPERWOW_VERSION global)
|
||||
local superwow_active = SUPERWOW_VERSION ~= nil
|
||||
--print("pfUI Nameplates: SuperWoW " .. (superwow_active and "ACTIVE" or "INACTIVE"))
|
||||
|
||||
local unitcolors = {
|
||||
["ENEMY_NPC"] = { .9, .2, .3, .8 },
|
||||
["NEUTRAL_NPC"] = { 1, 1, .3, .8 },
|
||||
@@ -37,6 +41,10 @@ pfUI:RegisterModule("nameplates", "vanilla", function ()
|
||||
local registry = {}
|
||||
local debuffdurations = C.appearance.cd.debuffs == "1" and true or nil
|
||||
|
||||
-- NEW: Cast event cache like Overhead.lua
|
||||
local CastEvents = {}
|
||||
local _, PlayerGUID = UnitExists("player")
|
||||
|
||||
-- cache default border color
|
||||
local er, eg, eb, ea = GetStringColor(pfUI_config.appearance.border.color)
|
||||
|
||||
@@ -67,6 +75,15 @@ pfUI:RegisterModule("nameplates", "vanilla", function ()
|
||||
return
|
||||
end
|
||||
|
||||
local function wipe(table)
|
||||
if type(table) ~= "table" then
|
||||
return
|
||||
end
|
||||
for k in pairs(table) do
|
||||
table[k] = nil
|
||||
end
|
||||
end
|
||||
|
||||
local function IsNamePlate(frame)
|
||||
if frame:GetObjectType() ~= NAMEPLATE_FRAMETYPE then return nil end
|
||||
regions = plate:GetRegions()
|
||||
@@ -311,18 +328,65 @@ pfUI:RegisterModule("nameplates", "vanilla", function ()
|
||||
nameplates:RegisterEvent("UNIT_COMBO_POINTS")
|
||||
nameplates:RegisterEvent("PLAYER_COMBO_POINTS")
|
||||
nameplates:RegisterEvent("UNIT_AURA")
|
||||
|
||||
-- NEW: Register cast events like Overhead.lua
|
||||
if superwow_active then
|
||||
nameplates:RegisterEvent("UNIT_CASTEVENT")
|
||||
end
|
||||
|
||||
nameplates:SetScript("OnEvent", function()
|
||||
if event == "PLAYER_ENTERING_WORLD" then
|
||||
this:SetGameVariables()
|
||||
elseif event == "UNIT_CASTEVENT" then
|
||||
-- NEW: Event-based cast handling from Overhead.lua
|
||||
local casterGUID = arg1
|
||||
if casterGUID == PlayerGUID then return end
|
||||
|
||||
local eventType = arg3 -- "START", "CAST", "FAIL", "CHANNEL"
|
||||
local spellID = arg4
|
||||
local castDuration = arg5
|
||||
local spellName, _, icon = SpellInfo(spellID)
|
||||
|
||||
if eventType == "MAINHAND" or eventType == "OFFHAND" then
|
||||
return
|
||||
end
|
||||
|
||||
if eventType == "CAST" then
|
||||
if not CastEvents[casterGUID] or spellID ~= CastEvents[casterGUID].spell then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
if eventType == "START" or eventType == "CHANNEL" then
|
||||
if not CastEvents[casterGUID] then
|
||||
CastEvents[casterGUID] = {}
|
||||
end
|
||||
wipe(CastEvents[casterGUID])
|
||||
CastEvents[casterGUID].event = eventType
|
||||
CastEvents[casterGUID].spellID = spellID
|
||||
CastEvents[casterGUID].spellName = spellName
|
||||
CastEvents[casterGUID].icon = icon
|
||||
CastEvents[casterGUID].startTime = GetTime()
|
||||
CastEvents[casterGUID].endTime = castDuration and GetTime() + castDuration / 1000
|
||||
CastEvents[casterGUID].duration = castDuration and castDuration / 1000 or nil
|
||||
elseif eventType == "FAIL" then
|
||||
if CastEvents[casterGUID] then
|
||||
wipe(CastEvents[casterGUID])
|
||||
end
|
||||
end
|
||||
|
||||
-- Propagate cast event to all nameplates
|
||||
for plate in pairs(registry) do
|
||||
plate.eventcache = true
|
||||
end
|
||||
else
|
||||
this.eventcache = true
|
||||
end
|
||||
end)
|
||||
|
||||
nameplates:SetScript("OnUpdate", function()
|
||||
-- throttle to 10 updates per second instead of every frame
|
||||
if (this.tick or 0.1) > GetTime() then return else this.tick = GetTime() + 0.1 end
|
||||
-- Throttle main scanner to reasonable rate
|
||||
if (this.tick or 0) > GetTime() then return else this.tick = GetTime() + 0.05 end
|
||||
|
||||
-- propagate events to all nameplates
|
||||
if this.eventcache then
|
||||
@@ -631,6 +695,7 @@ pfUI:RegisterModule("nameplates", "vanilla", function ()
|
||||
end
|
||||
|
||||
if player and unittype == "ENEMY_NPC" then unittype = "ENEMY_PLAYER" end
|
||||
if player and unittype == "FRIENDLY_NPC" then unittype = "FRIENDLY_PLAYER" end
|
||||
elite = plate.original.levelicon:IsShown() and not player and "boss" or elite
|
||||
if not class then plate.wait_for_scan = true end
|
||||
|
||||
@@ -874,12 +939,19 @@ pfUI:RegisterModule("nameplates", "vanilla", function ()
|
||||
end
|
||||
|
||||
nameplates.OnUpdate = function(frame)
|
||||
local update
|
||||
local frame = frame or this
|
||||
local nameplate = frame.nameplate
|
||||
|
||||
-- OPTIMIZED: Minimal throttle - only skip if very recent update
|
||||
local target = UnitExists("target") and frame:GetAlpha() == 1 or nil
|
||||
local throttle = target and 0.02 or 0.02
|
||||
|
||||
if (nameplate.lasttick or 0) + throttle > GetTime() then return end
|
||||
nameplate.lasttick = GetTime()
|
||||
|
||||
local update
|
||||
local original = nameplate.original
|
||||
local name = original.name:GetText()
|
||||
local target = UnitExists("target") and frame:GetAlpha() == 1 or nil
|
||||
local mouseover = UnitExists("mouseover") and original.glow:IsShown() or nil
|
||||
local namefightcolor = C.nameplates.namefightcolor == "1"
|
||||
|
||||
@@ -889,12 +961,11 @@ pfUI:RegisterModule("nameplates", "vanilla", function ()
|
||||
nameplate.eventcache = nil
|
||||
end
|
||||
|
||||
-- reset strata cache on target change
|
||||
-- OPTIMIZED: Cache strata changes
|
||||
if nameplate.istarget ~= target then
|
||||
nameplate.target_strata = nil
|
||||
end
|
||||
|
||||
-- keep target nameplate above others
|
||||
if target and nameplate.target_strata ~= 1 then
|
||||
nameplate:SetFrameStrata("LOW")
|
||||
nameplate.target_strata = 1
|
||||
@@ -903,15 +974,22 @@ pfUI:RegisterModule("nameplates", "vanilla", function ()
|
||||
nameplate.target_strata = 0
|
||||
end
|
||||
|
||||
-- cache target value
|
||||
nameplate.istarget = target
|
||||
|
||||
-- set non-target plate alpha
|
||||
-- OPTIMIZED: Cache alpha changes
|
||||
local newAlpha
|
||||
if target or not UnitExists("target") then
|
||||
nameplate:SetAlpha(1)
|
||||
newAlpha = 1
|
||||
else
|
||||
frame:SetAlpha(.95)
|
||||
nameplate:SetAlpha(tonumber(C.nameplates.notargalpha))
|
||||
newAlpha = tonumber(C.nameplates.notargalpha)
|
||||
end
|
||||
|
||||
if nameplate.cachedAlpha ~= newAlpha then
|
||||
if not target and UnitExists("target") then
|
||||
frame:SetAlpha(.95)
|
||||
end
|
||||
nameplate:SetAlpha(newAlpha)
|
||||
nameplate.cachedAlpha = newAlpha
|
||||
end
|
||||
|
||||
-- queue update on visual target update
|
||||
@@ -939,7 +1017,7 @@ pfUI:RegisterModule("nameplates", "vanilla", function ()
|
||||
|
||||
if namefightcolor then
|
||||
if r > .9 and g < .2 and b < .2 then
|
||||
nameplate.name:SetTextColor(1,0.4,0.2,1) -- infight
|
||||
nameplate.name:SetTextColor(1,0.4,0.2,1)
|
||||
else
|
||||
nameplate.name:SetTextColor(r,g,b,1)
|
||||
end
|
||||
@@ -979,97 +1057,136 @@ pfUI:RegisterModule("nameplates", "vanilla", function ()
|
||||
nameplate.tick = GetTime() + .5
|
||||
end
|
||||
|
||||
-- target zoom
|
||||
local w, h = nameplate.health:GetWidth(), nameplate.health:GetHeight()
|
||||
-- OPTIMIZED: Cache zoom dimensions
|
||||
if target and C.nameplates.targetzoom == "1" then
|
||||
local zoomval = tonumber(C.nameplates.targetzoomval)+1
|
||||
local wc = tonumber(C.nameplates.width)*zoomval
|
||||
local hc = tonumber(C.nameplates.heighthealth)*(zoomval*.9)
|
||||
local animation = false
|
||||
|
||||
if not nameplate.health.zoomed then
|
||||
local zoomval = tonumber(C.nameplates.targetzoomval)+1
|
||||
local wc = tonumber(C.nameplates.width)*zoomval
|
||||
local hc = tonumber(C.nameplates.heighthealth)*(zoomval*.9)
|
||||
nameplate.health.targetWidth = wc
|
||||
nameplate.health.targetHeight = hc
|
||||
end
|
||||
|
||||
local w, h = nameplate.health:GetWidth(), nameplate.health:GetHeight()
|
||||
local wc, hc = nameplate.health.targetWidth, nameplate.health.targetHeight
|
||||
|
||||
if wc >= w then
|
||||
wc = w*1.05
|
||||
nameplate.health:SetWidth(wc)
|
||||
nameplate.health:SetWidth(w*1.05)
|
||||
nameplate.health.zoomTransition = true
|
||||
animation = true
|
||||
end
|
||||
|
||||
if hc >= h then
|
||||
hc = h*1.05
|
||||
nameplate.health:SetHeight(hc)
|
||||
elseif hc >= h then
|
||||
nameplate.health:SetHeight(h*1.05)
|
||||
nameplate.health.zoomTransition = true
|
||||
animation = true
|
||||
end
|
||||
|
||||
if animation == false and not nameplate.health.zoomed then
|
||||
nameplate.health:SetWidth(wc)
|
||||
nameplate.health:SetHeight(hc)
|
||||
nameplate.health.zoomTransition = nil
|
||||
else
|
||||
if nameplate.health.zoomTransition then
|
||||
nameplate.health:SetWidth(wc)
|
||||
nameplate.health:SetHeight(hc)
|
||||
nameplate.health.zoomTransition = nil
|
||||
end
|
||||
nameplate.health.zoomed = true
|
||||
end
|
||||
elseif nameplate.health.zoomed or nameplate.health.zoomTransition then
|
||||
local w, h = nameplate.health:GetWidth(), nameplate.health:GetHeight()
|
||||
local wc = tonumber(C.nameplates.width)
|
||||
local hc = tonumber(C.nameplates.heighthealth)
|
||||
local animation = false
|
||||
|
||||
if wc <= w then
|
||||
wc = w*.95
|
||||
nameplate.health:SetWidth(wc)
|
||||
animation = true
|
||||
end
|
||||
|
||||
if hc <= h then
|
||||
hc = h*0.95
|
||||
nameplate.health:SetHeight(hc)
|
||||
animation = true
|
||||
end
|
||||
|
||||
if animation == false then
|
||||
nameplate.health:SetWidth(w*.95)
|
||||
elseif hc <= h then
|
||||
nameplate.health:SetHeight(h*0.95)
|
||||
else
|
||||
nameplate.health:SetWidth(wc)
|
||||
nameplate.health:SetHeight(hc)
|
||||
nameplate.health.zoomTransition = nil
|
||||
nameplate.health.zoomed = nil
|
||||
nameplate.health.targetWidth = nil
|
||||
nameplate.health.targetHeight = nil
|
||||
end
|
||||
end
|
||||
|
||||
-- castbar update
|
||||
-- OPTIMIZED: UNIT_CASTEVENT implementation
|
||||
if C.nameplates["showcastbar"] == "1" and ( C.nameplates["targetcastbar"] == "0" or target ) then
|
||||
local channel, cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill
|
||||
|
||||
-- detect cast or channel bars
|
||||
cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitCastingInfo(target and "target" or name)
|
||||
if not cast then channel, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo(target and "target" or name) end
|
||||
|
||||
-- read enemy casts from SuperWoW if enabled
|
||||
if superwow_active then
|
||||
cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitCastingInfo(nameplate.parent:GetName(1))
|
||||
if not cast then channel, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo(nameplate.parent:GetName(1)) end
|
||||
local unitstr = target and "target" or nil
|
||||
|
||||
-- Use SuperWoW GUID if available
|
||||
if superwow_active and not unitstr then
|
||||
unitstr = nameplate.parent:GetName(1)
|
||||
end
|
||||
|
||||
if not cast and not channel then
|
||||
nameplate.castbar:Hide()
|
||||
elseif cast or channel then
|
||||
local effect = cast or channel
|
||||
local duration = endTime - startTime
|
||||
local max = duration / 1000
|
||||
local cur = GetTime() - startTime / 1000
|
||||
|
||||
-- invert castbar values while channeling
|
||||
if channel then cur = max + startTime/1000 - GetTime() end
|
||||
|
||||
nameplate.castbar:SetMinMaxValues(0, duration/1000)
|
||||
nameplate.castbar:SetValue(cur)
|
||||
nameplate.castbar.text:SetText(round(cur,1))
|
||||
if C.nameplates.spellname == "1" then
|
||||
nameplate.castbar.spell:SetText(effect)
|
||||
|
||||
-- Check event-based cast cache first
|
||||
local castInfo = unitstr and CastEvents[unitstr]
|
||||
|
||||
if castInfo and castInfo.spellID then
|
||||
-- Check if cast is still valid
|
||||
if castInfo.startTime + castInfo.duration < GetTime() then
|
||||
wipe(castInfo)
|
||||
nameplate.castbar:Hide()
|
||||
elseif castInfo.event == "CAST" or castInfo.event == "FAIL" then
|
||||
wipe(castInfo)
|
||||
nameplate.castbar:Hide()
|
||||
else
|
||||
nameplate.castbar.spell:SetText("")
|
||||
-- Update from cached event data
|
||||
nameplate.castbar:SetMinMaxValues(castInfo.startTime, castInfo.endTime)
|
||||
|
||||
local barValue
|
||||
if castInfo.event == "CHANNEL" then
|
||||
barValue = castInfo.startTime + (castInfo.endTime - GetTime())
|
||||
else
|
||||
barValue = GetTime()
|
||||
end
|
||||
|
||||
nameplate.castbar:SetValue(barValue)
|
||||
nameplate.castbar.text:SetText(round(GetTime() - castInfo.startTime, 1))
|
||||
|
||||
if C.nameplates.spellname == "1" then
|
||||
nameplate.castbar.spell:SetText(castInfo.spellName)
|
||||
else
|
||||
nameplate.castbar.spell:SetText("")
|
||||
end
|
||||
|
||||
if castInfo.icon then
|
||||
nameplate.castbar.icon.tex:SetTexture(castInfo.icon)
|
||||
nameplate.castbar.icon.tex:SetTexCoord(.1,.9,.1,.9)
|
||||
end
|
||||
|
||||
nameplate.castbar:Show()
|
||||
end
|
||||
nameplate.castbar:Show()
|
||||
else
|
||||
-- Fallback to API calls if no event data (for non-SuperWoW or target)
|
||||
local channel, cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill
|
||||
|
||||
if target then
|
||||
cast, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitCastingInfo("target")
|
||||
if not cast then
|
||||
channel, nameSubtext, text, texture, startTime, endTime, isTradeSkill = UnitChannelInfo("target")
|
||||
end
|
||||
end
|
||||
|
||||
if not cast and not channel then
|
||||
nameplate.castbar:Hide()
|
||||
else
|
||||
local effect = cast or channel
|
||||
local duration = endTime - startTime
|
||||
local max = duration / 1000
|
||||
local cur = GetTime() - startTime / 1000
|
||||
|
||||
if texture then
|
||||
nameplate.castbar.icon.tex:SetTexture(texture)
|
||||
nameplate.castbar.icon.tex:SetTexCoord(.1,.9,.1,.9)
|
||||
if channel then cur = max + startTime/1000 - GetTime() end
|
||||
|
||||
nameplate.castbar:SetMinMaxValues(0, duration/1000)
|
||||
nameplate.castbar:SetValue(cur)
|
||||
nameplate.castbar.text:SetText(round(cur,1))
|
||||
|
||||
if C.nameplates.spellname == "1" then
|
||||
nameplate.castbar.spell:SetText(effect)
|
||||
else
|
||||
nameplate.castbar.spell:SetText("")
|
||||
end
|
||||
|
||||
nameplate.castbar:Show()
|
||||
|
||||
if texture then
|
||||
nameplate.castbar.icon.tex:SetTexture(texture)
|
||||
nameplate.castbar.icon.tex:SetTexCoord(.1,.9,.1,.9)
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
@@ -1236,4 +1353,4 @@ pfUI:RegisterModule("nameplates", "vanilla", function ()
|
||||
end
|
||||
|
||||
pfUI.nameplates = nameplates
|
||||
end)
|
||||
end)
|
||||
+88
-81
@@ -111,7 +111,7 @@ pfUI:RegisterModule("nampower", "vanilla", function ()
|
||||
if SpellInfo then
|
||||
spellName, spellRank, texture = SpellInfo(spellId)
|
||||
end
|
||||
if GetSpellNameAndRankForId then
|
||||
if not spellName and GetSpellNameAndRankForId then
|
||||
spellName, spellRank = GetSpellNameAndRankForId(spellId)
|
||||
end
|
||||
|
||||
@@ -123,9 +123,9 @@ pfUI:RegisterModule("nampower", "vanilla", function ()
|
||||
end
|
||||
|
||||
-- Try GetSpellRec for duration if libdebuff doesn't have it
|
||||
if duration == 0 and GetSpellRec then
|
||||
local spellRec = GetSpellRec(spellId)
|
||||
if spellRec and spellRec.durationIndex and spellRec.durationIndex > 0 then
|
||||
if duration == 0 and GetSpellRec and spellId then
|
||||
local success, spellRec = pcall(GetSpellRec, spellId)
|
||||
if success and spellRec and spellRec.durationIndex and spellRec.durationIndex > 0 then
|
||||
-- Duration index maps to spell duration - common values:
|
||||
-- This is a rough approximation since we don't have the duration table
|
||||
duration = 30 -- Default fallback
|
||||
@@ -170,21 +170,25 @@ pfUI:RegisterModule("nampower", "vanilla", function ()
|
||||
local effect, rank, texture, stacks, dtype, duration, timeleft, caster = originalUnitDebuff(self, unit, id)
|
||||
|
||||
-- If we have Nampower data for this unit, try to enhance it
|
||||
local _, guid = UnitExists(unit)
|
||||
if guid and debuffdb[guid] then
|
||||
-- Find the debuff by slot
|
||||
for spellId, data in pairs(debuffdb[guid]) do
|
||||
if data.slot == id then
|
||||
-- Use Nampower data for more accurate timing
|
||||
if data.duration and data.duration > 0 and data.start then
|
||||
duration = data.duration
|
||||
timeleft = data.duration + data.start - GetTime()
|
||||
if timeleft < 0 then timeleft = 0 end
|
||||
caster = data.caster
|
||||
stacks = data.stacks or stacks
|
||||
end
|
||||
break
|
||||
if not UnitExists then return effect, rank, texture, stacks, dtype, duration, timeleft, caster end
|
||||
|
||||
local exists, guid = UnitExists(unit)
|
||||
if not exists or not guid or not debuffdb[guid] then
|
||||
return effect, rank, texture, stacks, dtype, duration, timeleft, caster
|
||||
end
|
||||
|
||||
-- Find the debuff by slot
|
||||
for spellId, data in pairs(debuffdb[guid]) do
|
||||
if data.slot == id then
|
||||
-- Use Nampower data for more accurate timing
|
||||
if data.duration and data.duration > 0 and data.start then
|
||||
duration = data.duration
|
||||
timeleft = data.duration + data.start - GetTime()
|
||||
if timeleft < 0 then timeleft = 0 end
|
||||
caster = data.caster
|
||||
stacks = data.stacks or stacks
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
@@ -222,20 +226,22 @@ pfUI:RegisterModule("nampower", "vanilla", function ()
|
||||
if SpellInfo then
|
||||
spellName, spellRank, texture = SpellInfo(spellId)
|
||||
end
|
||||
if GetSpellNameAndRankForId then
|
||||
if not spellName and GetSpellNameAndRankForId then
|
||||
spellName, spellRank = GetSpellNameAndRankForId(spellId)
|
||||
end
|
||||
|
||||
buffdb[guid][spellId] = {
|
||||
spellId = spellId,
|
||||
name = spellName,
|
||||
rank = spellRank,
|
||||
texture = texture,
|
||||
stacks = stackCount or 1,
|
||||
start = GetTime(),
|
||||
slot = slot,
|
||||
auraLevel = auraLevel
|
||||
}
|
||||
if spellName then
|
||||
buffdb[guid][spellId] = {
|
||||
spellId = spellId,
|
||||
name = spellName,
|
||||
rank = spellRank,
|
||||
texture = texture,
|
||||
stacks = stackCount or 1,
|
||||
start = GetTime(),
|
||||
slot = slot,
|
||||
auraLevel = auraLevel
|
||||
}
|
||||
end
|
||||
elseif event == "BUFF_REMOVED_OTHER" or event == "BUFF_REMOVED_SELF" then
|
||||
if buffdb[guid] and buffdb[guid][spellId] then
|
||||
buffdb[guid][spellId] = nil
|
||||
@@ -294,13 +300,13 @@ pfUI:RegisterModule("nampower", "vanilla", function ()
|
||||
local res = GetUnitField(unit, "resistances")
|
||||
if not res then return nil end
|
||||
return {
|
||||
armor = res[1],
|
||||
holy = res[2],
|
||||
fire = res[3],
|
||||
nature = res[4],
|
||||
frost = res[5],
|
||||
shadow = res[6],
|
||||
arcane = res[7]
|
||||
armor = res[1] or 0,
|
||||
holy = res[2] or 0,
|
||||
fire = res[3] or 0,
|
||||
nature = res[4] or 0,
|
||||
frost = res[5] or 0,
|
||||
shadow = res[6] or 0,
|
||||
arcane = res[7] or 0
|
||||
}
|
||||
end
|
||||
end
|
||||
@@ -389,13 +395,13 @@ pfUI:RegisterModule("nampower", "vanilla", function ()
|
||||
local cd = GetSpellIdCooldown(spellId)
|
||||
if not cd then return nil end
|
||||
return {
|
||||
onCooldown = cd.isOnCooldown == 1,
|
||||
remaining = cd.cooldownRemainingMs / 1000,
|
||||
remainingMs = cd.cooldownRemainingMs,
|
||||
gcdRemaining = cd.gcdCategoryRemainingMs / 1000,
|
||||
gcdRemainingMs = cd.gcdCategoryRemainingMs,
|
||||
individualRemaining = cd.individualRemainingMs / 1000,
|
||||
categoryRemaining = cd.categoryRemainingMs / 1000,
|
||||
onCooldown = (cd.isOnCooldown or 0) == 1,
|
||||
remaining = (cd.cooldownRemainingMs or 0) / 1000,
|
||||
remainingMs = cd.cooldownRemainingMs or 0,
|
||||
gcdRemaining = (cd.gcdCategoryRemainingMs or 0) / 1000,
|
||||
gcdRemainingMs = cd.gcdCategoryRemainingMs or 0,
|
||||
individualRemaining = (cd.individualRemainingMs or 0) / 1000,
|
||||
categoryRemaining = (cd.categoryRemainingMs or 0) / 1000,
|
||||
}
|
||||
end
|
||||
|
||||
@@ -405,9 +411,9 @@ pfUI:RegisterModule("nampower", "vanilla", function ()
|
||||
local cd = GetItemIdCooldown(itemId)
|
||||
if not cd then return nil end
|
||||
return {
|
||||
onCooldown = cd.isOnCooldown == 1,
|
||||
remaining = cd.cooldownRemainingMs / 1000,
|
||||
remainingMs = cd.cooldownRemainingMs,
|
||||
onCooldown = (cd.isOnCooldown or 0) == 1,
|
||||
remaining = (cd.cooldownRemainingMs or 0) / 1000,
|
||||
remainingMs = cd.cooldownRemainingMs or 0,
|
||||
}
|
||||
end
|
||||
end
|
||||
@@ -433,9 +439,10 @@ pfUI:RegisterModule("nampower", "vanilla", function ()
|
||||
if GetTrinkets then
|
||||
pfUI.api.GetEquippedTrinkets = function()
|
||||
local trinkets = GetTrinkets()
|
||||
if not trinkets then return {} end
|
||||
local equipped = {}
|
||||
for _, trinket in pairs(trinkets) do
|
||||
if trinket.bagIndex == nil then -- nil bagIndex = equipped
|
||||
if trinket and trinket.bagIndex == nil then -- nil bagIndex = equipped
|
||||
table.insert(equipped, trinket)
|
||||
end
|
||||
end
|
||||
@@ -445,11 +452,11 @@ pfUI:RegisterModule("nampower", "vanilla", function ()
|
||||
pfUI.api.GetTrinketCooldown = function(slot)
|
||||
if not GetTrinketCooldown then return nil end
|
||||
local cd = GetTrinketCooldown(slot)
|
||||
if cd == -1 then return nil end
|
||||
if cd == -1 or not cd then return nil end
|
||||
return {
|
||||
onCooldown = cd.isOnCooldown == 1,
|
||||
remaining = cd.cooldownRemainingMs / 1000,
|
||||
remainingMs = cd.cooldownRemainingMs,
|
||||
onCooldown = (cd.isOnCooldown or 0) == 1,
|
||||
remaining = (cd.cooldownRemainingMs or 0) / 1000,
|
||||
remainingMs = cd.cooldownRemainingMs or 0,
|
||||
}
|
||||
end
|
||||
|
||||
@@ -473,7 +480,7 @@ pfUI:RegisterModule("nampower", "vanilla", function ()
|
||||
return GetItemLevel(itemId)
|
||||
end
|
||||
local success, stats = pcall(GetItemStats, itemId, true)
|
||||
if success and stats then
|
||||
if success and stats and stats.itemLevel then
|
||||
return stats.itemLevel
|
||||
end
|
||||
return nil
|
||||
@@ -587,41 +594,41 @@ pfUI:RegisterModule("nampower", "vanilla", function ()
|
||||
-- Spell Database Access via GetSpellRec
|
||||
if GetSpellRec then
|
||||
pfUI.api.GetSpellRecord = function(spellId)
|
||||
local rec = GetSpellRec(spellId)
|
||||
if not rec then return nil end
|
||||
local success, rec = pcall(GetSpellRec, spellId)
|
||||
if not success or not rec then return nil end
|
||||
return {
|
||||
spellId = spellId,
|
||||
name = rec.name,
|
||||
rank = rec.rank,
|
||||
description = rec.description,
|
||||
manaCost = rec.manaCost,
|
||||
baseLevel = rec.baseLevel,
|
||||
spellLevel = rec.spellLevel,
|
||||
maxLevel = rec.maxLevel,
|
||||
maxTargetLevel = rec.maxTargetLevel,
|
||||
maxTargets = rec.maxTargets,
|
||||
durationIndex = rec.durationIndex,
|
||||
powerType = rec.powerType,
|
||||
rangeIndex = rec.rangeIndex,
|
||||
speed = rec.speed,
|
||||
schoolMask = rec.schoolMask,
|
||||
runeCostID = rec.runeCostID,
|
||||
spellMissileID = rec.spellMissileID,
|
||||
iconID = rec.iconID,
|
||||
activeIconID = rec.activeIconID,
|
||||
nameSubtext = rec.nameSubtext,
|
||||
castingTimeIndex = rec.castingTimeIndex,
|
||||
categoryRecoveryTime = rec.categoryRecoveryTime,
|
||||
recoveryTime = rec.recoveryTime,
|
||||
startRecoveryCategory = rec.startRecoveryCategory,
|
||||
startRecoveryTime = rec.startRecoveryTime,
|
||||
name = rec.name or "",
|
||||
rank = rec.rank or "",
|
||||
description = rec.description or "",
|
||||
manaCost = rec.manaCost or 0,
|
||||
baseLevel = rec.baseLevel or 0,
|
||||
spellLevel = rec.spellLevel or 0,
|
||||
maxLevel = rec.maxLevel or 0,
|
||||
maxTargetLevel = rec.maxTargetLevel or 0,
|
||||
maxTargets = rec.maxTargets or 0,
|
||||
durationIndex = rec.durationIndex or 0,
|
||||
powerType = rec.powerType or 0,
|
||||
rangeIndex = rec.rangeIndex or 0,
|
||||
speed = rec.speed or 0,
|
||||
schoolMask = rec.schoolMask or 0,
|
||||
runeCostID = rec.runeCostID or 0,
|
||||
spellMissileID = rec.spellMissileID or 0,
|
||||
iconID = rec.iconID or 0,
|
||||
activeIconID = rec.activeIconID or 0,
|
||||
nameSubtext = rec.nameSubtext or "",
|
||||
castingTimeIndex = rec.castingTimeIndex or 0,
|
||||
categoryRecoveryTime = rec.categoryRecoveryTime or 0,
|
||||
recoveryTime = rec.recoveryTime or 0,
|
||||
startRecoveryCategory = rec.startRecoveryCategory or 0,
|
||||
startRecoveryTime = rec.startRecoveryTime or 0,
|
||||
}
|
||||
end
|
||||
|
||||
-- Get spell school (fire, frost, nature, etc.)
|
||||
pfUI.api.GetSpellSchool = function(spellId)
|
||||
local rec = GetSpellRec(spellId)
|
||||
if not rec then return nil end
|
||||
local success, rec = pcall(GetSpellRec, spellId)
|
||||
if not success or not rec or not rec.schoolMask then return nil end
|
||||
local schools = {
|
||||
[1] = "Physical",
|
||||
[2] = "Holy",
|
||||
@@ -740,4 +747,4 @@ pfUI:RegisterModule("nampower", "vanilla", function ()
|
||||
},
|
||||
}
|
||||
end
|
||||
end)
|
||||
end)
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("panel", "vanilla", function()
|
||||
pfUI:RegisterModule("panel", "vanilla:tbc", function()
|
||||
-- initialize gold cache if not yet happened
|
||||
pfUI_cache["gold"] = pfUI_cache["gold"] or {}
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("pet", "vanilla", function ()
|
||||
pfUI:RegisterModule("pet", "vanilla:tbc", function ()
|
||||
-- do not go further on disabled UFs
|
||||
if C.unitframes.disable == "1" then return end
|
||||
pfUI.uf.pet = pfUI.uf:CreateUnitFrame("Pet", nil, C.unitframes.pet)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("pettarget", "vanilla", function ()
|
||||
pfUI:RegisterModule("pettarget", "vanilla:tbc", function ()
|
||||
-- do not go further on disabled UFs
|
||||
if C.unitframes.disable == "1" then return end
|
||||
local rawborder, default_border = GetBorderSize("unitframes")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("pixelperfect", "vanilla", function ()
|
||||
pfUI:RegisterModule("pixelperfect", "vanilla:tbc", function ()
|
||||
-- pre-calculated min values
|
||||
local statics = {
|
||||
[4] = 1.4222222222222,
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("player", "vanilla", function ()
|
||||
pfUI:RegisterModule("player", "vanilla:tbc", function ()
|
||||
-- do not go further on disabled UFs
|
||||
if C.unitframes.disable == "1" then return end
|
||||
|
||||
|
||||
@@ -96,7 +96,11 @@ pfUI:RegisterModule("questitem", function ()
|
||||
SelectQuestLogEntry(quest)
|
||||
|
||||
-- detect and ignore quest headers
|
||||
_, _, _, header = GetQuestLogTitle(quest)
|
||||
if pfUI.client <= 11200 then -- vanilla
|
||||
_, _, _, header = GetQuestLogTitle(quest)
|
||||
elseif pfUI.client > 11200 then -- tbc
|
||||
_, _, _, _, header = GetQuestLogTitle(quest)
|
||||
end
|
||||
|
||||
if not header then
|
||||
text, objective = GetQuestLogQuestText()
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("raid", "vanilla", function ()
|
||||
pfUI:RegisterModule("raid", "vanilla:tbc", function ()
|
||||
-- do not go further on disabled UFs
|
||||
if C.unitframes.disable == "1" then return end
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("roll", "vanilla", function ()
|
||||
pfUI:RegisterModule("roll", "vanilla:tbc", function ()
|
||||
pfUI.roll = CreateFrame("Frame", "pfLootRoll", UIParent)
|
||||
pfUI.roll.frames = {}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("screenshot", "vanilla", function ()
|
||||
pfUI:RegisterModule("screenshot", "vanilla:tbc", function ()
|
||||
if C.screenshot.interval == "0"
|
||||
and C.screenshot.levelup == "0"
|
||||
and C.screenshot.pvprank == "0"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("sellvalue", "vanilla", function ()
|
||||
pfUI:RegisterModule("sellvalue", "vanilla:tbc", function ()
|
||||
local function AddVendorPrices(frame, id, count)
|
||||
if pfSellData[id] then
|
||||
local _, _, sell, buy = strfind(pfSellData[id], "(.*),(.*)")
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("share", "vanilla", function ()
|
||||
pfUI:RegisterModule("share", "vanilla:tbc", function ()
|
||||
local function serialize(tbl, comp, name, ignored, spacing)
|
||||
local spacing = spacing or ""
|
||||
local match = nil
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("socialmod", "vanilla", function ()
|
||||
pfUI:RegisterModule("socialmod", "vanilla:tbc", function ()
|
||||
local playerdb = _G.pfUI_playerDB
|
||||
pfUI.socialmod = CreateFrame("Frame", "pfSocialMod", UIParent)
|
||||
pfUI.socialmod:RegisterEvent("CHAT_MSG_SYSTEM")
|
||||
|
||||
+8
-65
@@ -316,6 +316,7 @@ pfUI:RegisterModule("superwow", "vanilla", function ()
|
||||
-- assign all required data
|
||||
local unit = UnitName(target)
|
||||
local unitlevel = UnitLevel(target)
|
||||
if not SpellInfo then return end
|
||||
local effect, rank = SpellInfo(spell)
|
||||
local duration = libdebuff:GetDuration(effect, rank)
|
||||
local caster = "player"
|
||||
@@ -439,70 +440,6 @@ pfUI:RegisterModule("superwow", "vanilla", function ()
|
||||
end
|
||||
end
|
||||
|
||||
-- Config Import/Export API using ImportFile/ExportFile
|
||||
if ImportFile and ExportFile then
|
||||
pfUI.api.ExportConfig = function(filename)
|
||||
filename = filename or "pfUI_config_backup.txt"
|
||||
local configStr = ""
|
||||
|
||||
-- Serialize config to string
|
||||
local function serialize(tbl, indent)
|
||||
indent = indent or ""
|
||||
local result = "{\n"
|
||||
for k, v in pairs(tbl) do
|
||||
local keyStr = type(k) == "string" and '["' .. k .. '"]' or "[" .. tostring(k) .. "]"
|
||||
if type(v) == "table" then
|
||||
result = result .. indent .. " " .. keyStr .. " = " .. serialize(v, indent .. " ") .. ",\n"
|
||||
elseif type(v) == "string" then
|
||||
result = result .. indent .. " " .. keyStr .. ' = "' .. v .. '",\n'
|
||||
else
|
||||
result = result .. indent .. " " .. keyStr .. " = " .. tostring(v) .. ",\n"
|
||||
end
|
||||
end
|
||||
return result .. indent .. "}"
|
||||
end
|
||||
|
||||
if pfUI_config then
|
||||
configStr = "pfUI_config = " .. serialize(pfUI_config)
|
||||
ExportFile(filename, configStr)
|
||||
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffccpfUI|r: Config exported to imports/" .. filename)
|
||||
return true
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
pfUI.api.ImportConfig = function(filename)
|
||||
filename = filename or "pfUI_config_backup.txt"
|
||||
local content = ImportFile(filename)
|
||||
if content and content ~= "" then
|
||||
-- Load the config string
|
||||
local func, err = loadstring(content)
|
||||
if func then
|
||||
func()
|
||||
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffccpfUI|r: Config imported from imports/" .. filename)
|
||||
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffccpfUI|r: Please /reload to apply changes")
|
||||
return true
|
||||
else
|
||||
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffccpfUI|r: Error parsing config: " .. (err or "unknown"))
|
||||
end
|
||||
else
|
||||
DEFAULT_CHAT_FRAME:AddMessage("|cff33ffccpfUI|r: Could not read imports/" .. filename)
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- Slash commands for config backup
|
||||
SLASH_PFEXPORT1 = "/pfexport"
|
||||
SlashCmdList["PFEXPORT"] = function(msg)
|
||||
pfUI.api.ExportConfig(msg ~= "" and msg or nil)
|
||||
end
|
||||
|
||||
SLASH_PFIMPORT1 = "/pfimport"
|
||||
SlashCmdList["PFIMPORT"] = function(msg)
|
||||
pfUI.api.ImportConfig(msg ~= "" and msg or nil)
|
||||
end
|
||||
end
|
||||
|
||||
-- GetPlayerBuffID wrapper
|
||||
if GetPlayerBuffID then
|
||||
pfUI.api.GetPlayerBuffSpellId = function(buffIndex)
|
||||
@@ -559,7 +496,7 @@ pfUI:RegisterModule("superwow", "vanilla", function ()
|
||||
end
|
||||
end
|
||||
|
||||
-- Enhance libcast with SuperWoW data for NPCs and other players only
|
||||
-- Enhance libcast with SuperWoW data for NPCs and other players
|
||||
-- Player casts use SPELLCAST_* events for proper pushback handling
|
||||
local supercast = CreateFrame("Frame")
|
||||
local playerGuid = nil
|
||||
@@ -622,6 +559,9 @@ pfUI:RegisterModule("superwow", "vanilla", function ()
|
||||
-- skip on buff procs during cast
|
||||
if event_type == "CAST" then
|
||||
if not libcast.db[guid] or libcast.db[guid].cast ~= spell then
|
||||
-- ignore casts without 'START' event, while there is already another cast.
|
||||
-- those events can be for example a frost shield proc while casting frostbolt.
|
||||
-- we want to keep the cast itself, so we simply skip those.
|
||||
return
|
||||
end
|
||||
end
|
||||
@@ -639,7 +579,10 @@ pfUI:RegisterModule("superwow", "vanilla", function ()
|
||||
libcast.db[dbKey].icon = icon
|
||||
libcast.db[dbKey].channel = event_type == "CHANNEL" or false
|
||||
elseif arg3 == "FAIL" then
|
||||
-- For player: use playerName, for others: use GUID
|
||||
local dbKey = isPlayer and UnitName("player") or guid
|
||||
|
||||
-- delete all cast entries
|
||||
if libcast.db[dbKey] then
|
||||
libcast.db[dbKey].cast = nil
|
||||
libcast.db[dbKey].rank = nil
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("target", "vanilla", function ()
|
||||
pfUI:RegisterModule("target", "vanilla:tbc", function ()
|
||||
-- do not go further on disabled UFs
|
||||
if C.unitframes.disable == "1" then return end
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("targettarget", "vanilla", function ()
|
||||
pfUI:RegisterModule("targettarget", "vanilla:tbc", function ()
|
||||
-- do not go further on disabled UFs
|
||||
if C.unitframes.disable == "1" then return end
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("targettargettarget", "vanilla", function ()
|
||||
pfUI:RegisterModule("targettargettarget", "vanilla:tbc", function ()
|
||||
-- do not go further on disabled UFs
|
||||
if C.unitframes.disable == "1" then return end
|
||||
|
||||
|
||||
@@ -0,0 +1,381 @@
|
||||
pfUI:RegisterModule("thirdparty-tbc", "tbc", function ()
|
||||
-- abort when thirdparty core module is not loaded
|
||||
if not pfUI.thirdparty then return end
|
||||
local rawborder, default_border = GetBorderSize()
|
||||
|
||||
HookAddonOrVariable("Omen", function()
|
||||
local docktable = { "omen", "Omen", "OmenBarList",
|
||||
function() -- single
|
||||
Omen.BarList:ClearAllPoints()
|
||||
Omen.BarList:SetPoint("TOPLEFT", pfUI.chat.right, "TOPLEFT", -5, 5)
|
||||
Omen.BarList:SetPoint("BOTTOMRIGHT", pfUI.chat.right, "BOTTOMRIGHT", 5, pfUI.panel.right:GetHeight()-5)
|
||||
Omen.BarList:SetWidth(pfUI.chat.right:GetWidth() + 7)
|
||||
|
||||
-- backdrop adjustments
|
||||
if Omen.BarList.backdrop then
|
||||
Omen.BarList.backdrop:SetPoint("TOPLEFT", -default_border+5, default_border-5)
|
||||
Omen.BarList.backdrop:SetPoint("BOTTOMRIGHT", default_border-5, -18-default_border+5)
|
||||
end
|
||||
end,
|
||||
function() -- dual
|
||||
Omen.BarList:ClearAllPoints()
|
||||
Omen.BarList:SetPoint("TOPLEFT", pfUI.chat.right, "TOPLEFT", -5, 5)
|
||||
Omen.BarList:SetPoint("BOTTOMRIGHT", pfUI.chat.right, "BOTTOM", -default_border+5, pfUI.panel.right:GetHeight()-5)
|
||||
Omen.BarList:SetWidth(pfUI.chat.right:GetWidth() / 2 + 7)
|
||||
|
||||
-- backdrop adjustments
|
||||
if Omen.BarList.backdrop then
|
||||
Omen.BarList.backdrop:SetPoint("TOPLEFT", -default_border+5, default_border-5)
|
||||
Omen.BarList.backdrop:SetPoint("BOTTOMRIGHT", default_border-5, -18-default_border+5)
|
||||
end
|
||||
end,
|
||||
function() -- show
|
||||
Omen:UpdateDisplay()
|
||||
Omen:EnableLastModule()
|
||||
Omen:LayoutModuleIcons()
|
||||
|
||||
Omen.ModuleList:SetPoint("BOTTOMLEFT", Omen.BarList, "TOPLEFT", 5, default_border*3-5)
|
||||
Omen.ModuleList:SetPoint("BOTTOMRIGHT", Omen.BarList, "TOPRIGHT", -5, default_border*3)
|
||||
|
||||
-- fake sizes to retain proper button sizes
|
||||
Omen.ModuleList._GetHeight = Omen.ModuleList._GetHeight or Omen.ModuleList.GetHeight
|
||||
Omen.ModuleList.GetHeight = function() return 30 end
|
||||
Omen:LayoutModuleIcons()
|
||||
Omen.ModuleList.GetHeight = Omen.ModuleList._GetHeight
|
||||
Omen.ModuleList:SetHeight(20)
|
||||
|
||||
OmenResizeGrip:Hide()
|
||||
Omen:Toggle(true)
|
||||
end,
|
||||
function() -- hide
|
||||
Omen:Toggle(nil)
|
||||
end,
|
||||
function() -- once
|
||||
Omen.Title:Hide()
|
||||
Omen.Title.Show = function() return end
|
||||
EnableAutohide(Omen.ModuleList, 1)
|
||||
|
||||
local hookUpdateDisplay = Omen.UpdateDisplay
|
||||
Omen.UpdateDisplay = function(self)
|
||||
hookUpdateDisplay(self)
|
||||
pfUI.thirdparty.meters:Resize()
|
||||
end
|
||||
|
||||
Omen.UpdateVisible = function()
|
||||
if pfUI.thirdparty.meters.state then
|
||||
Omen.Anchor:Show()
|
||||
else
|
||||
Omen.Anchor:Hide()
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
pfUI.thirdparty.meters:RegisterMeter("threat", docktable)
|
||||
|
||||
if C.thirdparty.omen.skin == "1" then
|
||||
if Omen.Anchor then
|
||||
|
||||
local hookUpdateDisplay = Omen.UpdateDisplay
|
||||
Omen.UpdateDisplay = function(self)
|
||||
hookUpdateDisplay(self)
|
||||
|
||||
StripTextures(Omen.Title)
|
||||
StripTextures(Omen.ModuleList)
|
||||
StripTextures(Omen.BarList)
|
||||
|
||||
if not Omen.Title.backdrop or not Omen.ModuleList.backdrop or not Omen.BarList.backdrop then
|
||||
CreateBackdrop(Omen.Title, nil, nil, (C.thirdparty.chatbg == "1" and .8))
|
||||
CreateBackdropShadow(Omen.Title)
|
||||
|
||||
CreateBackdrop(Omen.ModuleList, nil, nil, (C.thirdparty.chatbg == "1" and .8))
|
||||
CreateBackdropShadow(Omen.ModuleList)
|
||||
|
||||
CreateBackdrop(Omen.BarList, nil, nil, (C.thirdparty.chatbg == "1" and .8))
|
||||
CreateBackdropShadow(Omen.BarList)
|
||||
end
|
||||
|
||||
if C.thirdparty.chatbg == "1" and C.chat.global.custombg == "1" then
|
||||
local r, g, b, a = strsplit(",", C.chat.global.background)
|
||||
Omen.BarList.backdrop:SetBackdropColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
|
||||
Omen.ModuleList.backdrop:SetBackdropColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
|
||||
|
||||
local r, g, b, a = strsplit(",", C.chat.global.border)
|
||||
Omen.BarList.backdrop:SetBackdropBorderColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
|
||||
Omen.ModuleList.backdrop:SetBackdropColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
|
||||
end
|
||||
end
|
||||
|
||||
HookScript(Omen.Anchor, "OnShow", function()
|
||||
for i, child in pairs({ OmenModuleButtons:GetChildren() }) do
|
||||
if child and child:IsObjectType("Button") then
|
||||
child:GetNormalTexture():SetTexCoord(.08, .92, .08, .92)
|
||||
CreateBackdrop(child, nil, true)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
Omen:UpdateDisplay()
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
HookAddonOrVariable("Recount", function()
|
||||
local docktable = { "recount", "Recount", "Recount_MainWindow",
|
||||
function() -- single
|
||||
Recount.MainWindow:ClearAllPoints()
|
||||
Recount.MainWindow:SetPoint("TOPLEFT", pfUI.chat.right, "TOPLEFT", 0, 10)
|
||||
Recount.MainWindow:SetPoint("BOTTOMRIGHT", pfUI.chat.right, "BOTTOMRIGHT", 0, 18)
|
||||
Recount.MainWindow:SetWidth(pfUI.chat.right:GetWidth())
|
||||
end,
|
||||
function() -- dual
|
||||
Recount.MainWindow:ClearAllPoints()
|
||||
Recount.MainWindow:SetPoint("TOPLEFT", pfUI.chat.right, "TOP", default_border, 10)
|
||||
Recount.MainWindow:SetPoint("BOTTOMRIGHT", pfUI.chat.right, "BOTTOMRIGHT", 0, 18)
|
||||
Recount.MainWindow:SetWidth(pfUI.chat.right:GetWidth() / 2)
|
||||
end,
|
||||
function() -- show
|
||||
Recount.MainWindow:Show()
|
||||
Recount:ResizeMainWindow()
|
||||
Recount:RefreshMainWindow()
|
||||
end,
|
||||
function() -- hide
|
||||
Recount.MainWindow:Hide()
|
||||
end,
|
||||
function() -- once
|
||||
local hookResize = Recount.ResizeMainWindow
|
||||
Recount.ResizeMainWindow = function()
|
||||
hookResize()
|
||||
|
||||
local a, b, c = Recount.MainWindow:GetPoint()
|
||||
if b == pfUI.chat.right and Recount.MainWindow.backdrop then
|
||||
Recount.MainWindow.backdrop:SetPoint("BOTTOMRIGHT", default_border, -18-default_border)
|
||||
else
|
||||
Recount.MainWindow.backdrop:SetPoint("BOTTOMRIGHT", default_border, default_border)
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
pfUI.thirdparty.meters:RegisterMeter("damage", docktable)
|
||||
|
||||
if C.thirdparty.recount.skin == "1" then
|
||||
if Recount_MainWindow then
|
||||
StripTextures(Recount.MainWindow)
|
||||
CreateBackdrop(Recount.MainWindow, nil, nil, (C.thirdparty.chatbg == "1" and .8))
|
||||
CreateBackdropShadow(Recount.MainWindow)
|
||||
SkinScrollbar(Recount_MainWindow_ScrollBarScrollBar)
|
||||
Recount_MainWindow_ScrollBarScrollBarScrollUpButton.Overlay:SetTexture(nil)
|
||||
Recount_MainWindow_ScrollBarScrollBarScrollDownButton.Overlay:SetTexture(nil)
|
||||
Recount.MainWindow.DragBottomLeft:SetNormalTexture(nil)
|
||||
Recount.MainWindow.DragBottomRight:SetNormalTexture(nil)
|
||||
|
||||
-- backdrop adjustments
|
||||
Recount.MainWindow.backdrop:SetPoint("TOPLEFT", -default_border, -5-default_border-GetPerfectPixel())
|
||||
if C.thirdparty.chatbg == "1" and C.chat.global.custombg == "1" then
|
||||
local r, g, b, a = strsplit(",", C.chat.global.background)
|
||||
Recount.MainWindow.backdrop:SetBackdropColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
|
||||
|
||||
local r, g, b, a = strsplit(",", C.chat.global.border)
|
||||
Recount.MainWindow.backdrop:SetBackdropBorderColor(tonumber(r), tonumber(g), tonumber(b), tonumber(a))
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
HookAddonOrVariable("BCEPGP_LootFrame_Update", function()
|
||||
if C.thirdparty.bcepgp.enable == "0" then return end
|
||||
|
||||
local hook = _G.BCEPGP_LootFrame_Update
|
||||
_G.BCEPGP_LootFrame_Update = function(a,b,c,d,e,f)
|
||||
LootFrame.numLootItems = GetNumLootItems()
|
||||
hook(a,b,c,d,e,f)
|
||||
end
|
||||
end)
|
||||
|
||||
-- Sheep Watch Continued
|
||||
-- https://www.curseforge.com/wow/addons/sheep-watch-continued/files/225593
|
||||
HookAddonOrVariable("SheepWatch", function()
|
||||
if C.thirdparty.sheepwatch.enable == "0" then return end
|
||||
|
||||
StripTextures(SheepWatch)
|
||||
|
||||
if SheepWatchFrameStatusBar then
|
||||
SheepWatchFrameStatusBar:SetStatusBarTexture(pfUI.media["img:bar"])
|
||||
SheepWatchFrameStatusBar:SetHeight(14)
|
||||
CreateBackdrop(SheepWatchFrameStatusBar)
|
||||
CreateBackdropShadow(SheepWatchFrameStatusBar)
|
||||
end
|
||||
|
||||
if SheepWatchText then
|
||||
SheepWatchText:ClearAllPoints()
|
||||
SheepWatchText:SetPoint("CENTER", 0, 4)
|
||||
end
|
||||
|
||||
if SheepWatchCounterText then
|
||||
SheepWatchCounterText:ClearAllPoints()
|
||||
SheepWatchCounterText:SetPoint("RIGHT", 0, 4)
|
||||
end
|
||||
end)
|
||||
|
||||
HookAddonOrVariable("Bag_Sort", function()
|
||||
if C.thirdparty.bag_sort.enable == "0" then return end
|
||||
|
||||
local sort = CreateFrame("Frame", nil)
|
||||
sort:RegisterEvent("PLAYER_ENTERING_WORLD")
|
||||
sort:SetScript("OnEvent", function()
|
||||
this:UnregisterAllEvents()
|
||||
|
||||
pfUI.thirdparty.RegisterBagSort("Bag_Sort",
|
||||
function()
|
||||
BS_slashBagSortHandler()
|
||||
end,
|
||||
function()
|
||||
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
||||
GameTooltip:SetText(GetAddOnMetadata("Bag_Sort","Title"))
|
||||
GameTooltip:AddLine(GetAddOnMetadata("Bag_Sort","Notes"),1,1,1)
|
||||
GameTooltip:Show()
|
||||
end,
|
||||
function()
|
||||
BS_slashBankSortHandler()
|
||||
end,
|
||||
function()
|
||||
GameTooltip:SetOwner(this, "ANCHOR_RIGHT")
|
||||
GameTooltip:SetText(GetAddOnMetadata("Bag_Sort","Title"))
|
||||
GameTooltip:AddLine(GetAddOnMetadata("Bag_Sort","Notes"),1,1,1)
|
||||
GameTooltip:Show()
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
|
||||
HookAddonOrVariable("AckisRecipeList", function()
|
||||
if C.thirdparty.ackis.enable == "0" then return end
|
||||
if AckisRecipeList.ShowScanButton then
|
||||
local AckisRecipeListShowScanButton = AckisRecipeList.ShowScanButton
|
||||
AckisRecipeList.ShowScanButton = function(a1,a2,a3,a4)
|
||||
-- run the original function
|
||||
AckisRecipeListShowScanButton(a1,a2,a3,a4)
|
||||
|
||||
-- apply skin and reposition the button
|
||||
SkinButton(AckisRecipeList.ScanButton)
|
||||
local a,b,c,d,e = AckisRecipeList.ScanButton:GetPoint()
|
||||
AckisRecipeList.ScanButton:SetPoint(a,b,c,d-14,e-2)
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
HookAddonOrVariable("TotemTimers", function()
|
||||
if C.thirdparty.totemtimers.enable == "0" then return end
|
||||
|
||||
local function skin(button, weapon)
|
||||
if button and not button.pfskinned then
|
||||
button.pfskinned = true
|
||||
|
||||
local icon = button.icon or _G[button:GetName().."Icon"]
|
||||
icon:SetDrawLayer("BORDER")
|
||||
|
||||
SkinButton(button, nil, nil, nil, icon)
|
||||
SetAllPointsOffset(icon, button, 2)
|
||||
|
||||
if _G[button:GetName().."Flash"] then
|
||||
SetAllPointsOffset(_G[button:GetName().."Flash"], button, 3)
|
||||
_G[button:GetName().."Flash"]:SetTexCoord(.08, .92, .08, .92)
|
||||
end
|
||||
|
||||
if button.spellIcon then
|
||||
button.spellIcon:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -2, 2)
|
||||
button.spellIcon:SetTexCoord(.08, .92, .08, .92)
|
||||
end
|
||||
|
||||
if weapon then
|
||||
-- weapon button skin workaround taken from ElvUI-TBC:
|
||||
-- https://github.com/ElvUI-TBC/ElvUI_AddOnSkins/blob/master/ElvUI_AddOnSkins/Skins/Addons/totemTimers.lua#L92-L135
|
||||
local icon2frame = _G[button:GetName().."Icon2Frame"]
|
||||
icon2frame:SetFrameStrata("MEDIUM")
|
||||
icon2frame:SetWidth(icon2frame:GetWidth() + 1)
|
||||
button.icon2 = _G[button:GetName().."Icon2"]
|
||||
SetAllPointsOffset(button.icon2, icon2frame, 2)
|
||||
|
||||
button.icon1Frame = CreateFrame("Frame", "TotemTimers_MainHandIcon1Frame", button)
|
||||
button.icon1Frame:SetWidth(16)
|
||||
button.icon1Frame:SetHeight(30)
|
||||
button.icon1Frame:SetPoint("LEFT", 0, 0)
|
||||
|
||||
button.icon1 = button.icon1Frame:CreateTexture(nil, "MEDIUM")
|
||||
SetAllPointsOffset(button.icon1, button.icon1Frame, 3)
|
||||
button.icon1:SetTexture(icon:GetTexture())
|
||||
button.icon1:SetAlpha(icon:GetAlpha())
|
||||
|
||||
_G[button:GetName().."Cooldown"]:SetFrameLevel(button.icon1Frame:GetFrameLevel() + 1)
|
||||
|
||||
icon:Hide()
|
||||
hooksecurefunc(icon, "SetTexture", function(_, texture)
|
||||
button.icon1:SetTexture(texture)
|
||||
end)
|
||||
hooksecurefunc(icon, "SetAlpha", function(_, alpha)
|
||||
button.icon1:SetAlpha(alpha)
|
||||
end)
|
||||
|
||||
if icon:GetTexCoordModifiesRect() then
|
||||
button.icon1:SetTexCoord(.08, .5, .08, .92)
|
||||
else
|
||||
button.icon1:SetTexCoord(.08, .92, .08, .92)
|
||||
end
|
||||
button.icon2:SetTexCoord(.5, .92, .08, .92)
|
||||
|
||||
hooksecurefunc(icon, "SetTexCoord", function(self, arg1, arg2)
|
||||
if arg2 == 0.5 and arg1 == 0 then
|
||||
button.icon1:SetTexCoord(.08, .5, .08, .92)
|
||||
elseif arg2 == 1 then
|
||||
button.icon1:SetTexCoord(.08, .92, .08, .92)
|
||||
end
|
||||
end)
|
||||
hooksecurefunc(button.icon2, "SetTexCoord", function(self, arg1, arg2)
|
||||
if arg2 == 1 then self:SetTexCoord(.5, .92, .08, .92) end
|
||||
end)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
hooksecurefunc("TotemTimers_SetupGlobals", function()
|
||||
for i=1,4 do -- skin main buttons
|
||||
for j=1,10 do skin(_G[i.."SlaveButton"..j]) end
|
||||
skin(_G["TotemTimers"..i])
|
||||
end
|
||||
|
||||
for _, timer in pairs({ "EarthElemental", "FireElemental", "ManaTide", "ManaTrinket" }) do
|
||||
skin(_G["TotemTimers_"..timer])
|
||||
end
|
||||
|
||||
for i, tracker in pairs({ "Ankh", "Shield", "MainHand", "EarthShield" }) do
|
||||
skin(_G["TotemTimers_"..tracker], i==3)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
HookAddonOrVariable("DruidBarFrame", function()
|
||||
if C.thirdparty.druidbar.enable == "0" then return end
|
||||
local p = ManaBarColor[0]
|
||||
local pr, pg, pb = 0, 0, 0
|
||||
if p then pr, pg, pb = p.r + .5, p.g +.5, p.b +.5 end
|
||||
DruidBarKey.color = { pr, pg, pb, 1 }
|
||||
DruidBarKey.bordercolor = {1,1,1,0}
|
||||
DruidBarKey.bgcolor = {0,0,0,0}
|
||||
DruidBarKey.manatexture = pfUI.media[pfUI.uf.player.config.pbartexture]
|
||||
DruidBarKey.bordertexture = ""
|
||||
|
||||
hooksecurefunc("DruidBar_MainGraphics", function()
|
||||
local f = pfUI.uf.player
|
||||
DruidBarFrame:SetWidth((f.config.pwidth ~= "-1" and f.config.pwidth or f.config.width))
|
||||
DruidBarFrame:SetHeight(f.config.pheight)
|
||||
DruidBarMana:SetAllPoints(DruidBarFrame)
|
||||
|
||||
DruidBarText:SetFont(pfUI.font_unit, C.global.font_unit_size, "OUTLINE")
|
||||
DruidBarText1:SetFont(pfUI.font_unit, C.global.font_unit_size, "OUTLINE")
|
||||
|
||||
StripTextures(DruidBarFrame)
|
||||
CreateBackdrop(DruidBarFrame)
|
||||
CreateBackdropShadow(DruidBarFrame)
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
+10
-4
@@ -1,7 +1,10 @@
|
||||
pfUI:RegisterModule("thirdparty", "vanilla", function()
|
||||
pfUI:RegisterModule("thirdparty", "vanilla:tbc", function()
|
||||
-- This module includes the core logic of thirdparty modules.
|
||||
-- Right now, in particular the functions to register addons to the
|
||||
-- dockframe of the chat panel aswell as the thirdparty root-table.
|
||||
-- This module is supposed to be loaded on all expansions, so only
|
||||
-- addons that can share the same glue code across expansions will go here.
|
||||
-- For expansion related code, see: thirdparty-vanilla and thirdparty-tbc.
|
||||
|
||||
pfUI.thirdparty = {}
|
||||
|
||||
@@ -193,7 +196,8 @@ pfUI:RegisterModule("thirdparty", "vanilla", function()
|
||||
end
|
||||
|
||||
-- MrPlow Bag Sorting Addon.
|
||||
-- https://www.wowace.com/projects/mr-plow/files/288059
|
||||
-- Vanilla: https://www.wowace.com/projects/mr-plow/files/288059
|
||||
-- TBC: https://www.wowace.com/projects/mr-plow/files/136162
|
||||
HookAddonOrVariable("MrPlow", function()
|
||||
if C.thirdparty.mrplow.enable == "0" then return end
|
||||
|
||||
@@ -228,7 +232,8 @@ pfUI:RegisterModule("thirdparty", "vanilla", function()
|
||||
end)
|
||||
|
||||
-- ShaguDPS Damage Meter
|
||||
-- https://github.com/shagu/ShaguDPS
|
||||
-- Vanilla: https://github.com/shagu/ShaguDPS
|
||||
-- TBC: https://github.com/shagu/ShaguDPS
|
||||
HookAddonOrVariable("ShaguDPS", function()
|
||||
local docktable = { "shagudps", "ShaguDPS", "ShaguDPSWindow",
|
||||
function() -- single
|
||||
@@ -328,7 +333,8 @@ pfUI:RegisterModule("thirdparty", "vanilla", function()
|
||||
end)
|
||||
|
||||
-- DPSMate Damage Meter
|
||||
-- https://github.com/Geigerkind/DPSMate
|
||||
-- Vanilla: https://github.com/Geigerkind/DPSMate
|
||||
-- TBC: https://github.com/Geigerkind/DPSMateTBC
|
||||
HookAddonOrVariable("DPSMate_DPSMate", function()
|
||||
local docktable = { "dpsmate", "DPSMate", "DPSMate_DPSMate",
|
||||
function() -- single
|
||||
|
||||
+4
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("totems", "vanilla", function ()
|
||||
pfUI:RegisterModule("totems", "vanilla:tbc", function ()
|
||||
local _, class = UnitClass("player")
|
||||
|
||||
local slots = {
|
||||
@@ -42,6 +42,9 @@ pfUI:RegisterModule("totems", "vanilla", function ()
|
||||
-- Try to recast totem on left click in vanilla
|
||||
local active, name, start, duration, icon = GetTotemInfo(this.id)
|
||||
if name then CastSpellByName(name) end
|
||||
elseif pfUI.client > 11200 and this.id and arg1 and arg1 == "RightButton" then
|
||||
-- Try to cancel totem on right click in tbc+
|
||||
DestroyTotem(this.id)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("uf_tukui", "vanilla", function ()
|
||||
pfUI:RegisterModule("uf_tukui", "vanilla:tbc", function ()
|
||||
if C.unitframes.disable == "1" or C.unitframes.layout ~= "tukui" then return end
|
||||
|
||||
-- update player layout
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("unlock", "vanilla", function ()
|
||||
pfUI:RegisterModule("unlock", "vanilla:tbc", function ()
|
||||
local rawborder, default_border = GetBorderSize()
|
||||
|
||||
-- grouped frames
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("unusable", "vanilla", function ()
|
||||
pfUI:RegisterModule("unusable", "vanilla:tbc", function ()
|
||||
if not pfUI.bag then return end
|
||||
if C.appearance.bags.unusable ~= "1" then return end
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("updatenotify", "vanilla", function ()
|
||||
pfUI:RegisterModule("updatenotify", "vanilla:tbc", function ()
|
||||
local alreadyshown = false
|
||||
local localversion = tonumber(pfUI.version.major*10000 + pfUI.version.minor*100 + pfUI.version.fix)
|
||||
local remoteversion = tonumber(pfUI_init.updateavailable) or 0
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterModule("xpbar", "vanilla", function ()
|
||||
pfUI:RegisterModule("xpbar", "vanilla:tbc", function ()
|
||||
local rawborder, default_border = GetBorderSize()
|
||||
local parse_faction = SanitizePattern(FACTION_STANDING_INCREASED)
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
## Interface: 20400
|
||||
## Title: |cff33ffccpf|cffffffffUI
|
||||
## Author: Shagu
|
||||
## Notes: A complete user interface replacement.
|
||||
## Notes-ruRU: Полная замена пользовательского интерфейса.
|
||||
## Version: 6.0.0
|
||||
## SavedVariables: pfUI_profiles, pfUI_addon_profiles, pfUI_cache
|
||||
## SavedVariablesPerCharacter: pfUI_config, pfUI_init, pfUI_playerDB
|
||||
|
||||
pfUI.lua
|
||||
|
||||
init\env.xml
|
||||
init\compat.xml
|
||||
init\api.xml
|
||||
init\libs.xml
|
||||
init\skins.xml
|
||||
init\modules.xml
|
||||
@@ -77,9 +77,17 @@ end})
|
||||
local _, _, _, client = GetBuildInfo()
|
||||
client = client or 11200
|
||||
|
||||
-- set expansion to vanilla
|
||||
pfUI.expansion = "vanilla"
|
||||
pfUI.client = client
|
||||
-- detect client expansion
|
||||
if client >= 20000 and client <= 20400 then
|
||||
pfUI.expansion = "tbc"
|
||||
pfUI.client = client
|
||||
elseif client >= 30000 and client <= 30300 then
|
||||
pfUI.expansion = "wotlk"
|
||||
pfUI.client = client
|
||||
else
|
||||
pfUI.expansion = "vanilla"
|
||||
pfUI.client = client
|
||||
end
|
||||
|
||||
-- setup pfUI namespace
|
||||
setmetatable(pfUI.env, {__index = getfenv(0)})
|
||||
@@ -111,20 +119,34 @@ function pfUI:UpdateFonts()
|
||||
|
||||
-- load font configuration
|
||||
local default, tooltip, unit, unit_name, combat
|
||||
if pfUI_config.global.force_region == "1" and GetLocale() == "zhCN" then
|
||||
if pfUI_config.global.force_region == "1" and GetLocale() == "zhCN" and pfUI.expansion == "vanilla" then
|
||||
-- force locale compatible fonts (zhCN 1.12)
|
||||
default = "Fonts\\FZXHLJW.TTF"
|
||||
tooltip = "Fonts\\FZXHLJW.TTF"
|
||||
combat = "Fonts\\FZXHLJW.TTF"
|
||||
unit = "Fonts\\FZXHLJW.TTF"
|
||||
unit_name = "Fonts\\FZXHLJW.TTF"
|
||||
elseif pfUI_config.global.force_region == "1" and GetLocale() == "zhTW" then
|
||||
elseif pfUI_config.global.force_region == "1" and GetLocale() == "zhCN" and pfUI.expansion == "tbc" then
|
||||
-- force locale compatible fonts (zhCN 2.4.3)
|
||||
default = "Fonts\\ZYHei.ttf"
|
||||
tooltip = "Fonts\\ZYHei.ttf"
|
||||
combat = "Fonts\\ZYKai_C.ttf"
|
||||
unit = "Fonts\\ZYKai_T.ttf"
|
||||
unit_name = "Fonts\\ZYHei.ttf"
|
||||
elseif pfUI_config.global.force_region == "1" and GetLocale() == "zhTW" and pfUI.expansion == "vanilla" then
|
||||
-- force locale compatible fonts (zhTW 1.12)
|
||||
default = "Fonts\\FZXHLJW.ttf"
|
||||
tooltip = "Fonts\\FZXHLJW.ttf"
|
||||
combat = "Fonts\\FZXHLJW.ttf"
|
||||
unit = "Fonts\\FZXHLJW.ttf"
|
||||
unit_name = "Fonts\\FZXHLJW.ttf"
|
||||
elseif pfUI_config.global.force_region == "1" and GetLocale() == "zhTW" and pfUI.expansion == "tbc" then
|
||||
-- force locale compatible fonts (zhTW 2.4.3)
|
||||
default = "Fonts\\bHEI01B.ttf"
|
||||
tooltip = "Fonts\\bHEI01B.ttf"
|
||||
combat = "Fonts\\bHEI01B.ttf"
|
||||
unit = "Fonts\\bHEI01B.ttf"
|
||||
unit_name = "Fonts\\bHEI01B.ttf"
|
||||
elseif pfUI_config.global.force_region == "1" and GetLocale() == "koKR" then
|
||||
-- force locale compatible fonts (koKR)
|
||||
default = "Fonts\\2002.TTF"
|
||||
@@ -222,7 +244,7 @@ end
|
||||
function pfUI:RegisterModule(name, a2, a3)
|
||||
if pfUI.module[name] then return end
|
||||
local hasv = type(a2) == "string"
|
||||
local func, version = hasv and a3 or a2, hasv and a2 or "vanilla"
|
||||
local func, version = hasv and a3 or a2, hasv and a2 or "vanilla:tbc:wotlk"
|
||||
|
||||
-- check for client compatibility
|
||||
if not strfind(version, pfUI.expansion) then return end
|
||||
@@ -237,7 +259,7 @@ end
|
||||
function pfUI:RegisterSkin(name, a2, a3)
|
||||
if pfUI.skin[name] then return end
|
||||
local hasv = type(a2) == "string"
|
||||
local func, version = hasv and a3 or a2, hasv and a2 or "vanilla"
|
||||
local func, version = hasv and a3 or a2, hasv and a2 or "vanilla:tbc:wotlk"
|
||||
|
||||
-- check for client compatibility
|
||||
if not strfind(version, pfUI.expansion) then return end
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
## Author: Shagu
|
||||
## Notes: A complete user interface replacement.
|
||||
## Notes-ruRU: Полная замена пользовательского интерфейса.
|
||||
## Version: 5.5.4
|
||||
## Version: 6.0.0
|
||||
## SavedVariables: pfUI_profiles, pfUI_addon_profiles, pfUI_cache
|
||||
## SavedVariablesPerCharacter: pfUI_config, pfUI_init, pfUI_playerDB
|
||||
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
pfUI:RegisterSkin("Arena", "tbc", function ()
|
||||
StripTextures(ArenaFrame)
|
||||
CreateBackdrop(ArenaFrame, nil, nil, .75)
|
||||
CreateBackdropShadow(ArenaFrame)
|
||||
|
||||
ArenaFrame.backdrop:SetPoint("TOPLEFT", 10, -10)
|
||||
ArenaFrame.backdrop:SetPoint("BOTTOMRIGHT", -32, 72)
|
||||
ArenaFrame:SetHitRectInsets(10,32,10,72)
|
||||
EnableMovable(ArenaFrame)
|
||||
|
||||
SkinCloseButton(ArenaFrameCloseButton, ArenaFrame.backdrop, -6, -6)
|
||||
|
||||
ArenaFrame:DisableDrawLayer("BACKGROUND")
|
||||
|
||||
ArenaFrameFrameLabel:ClearAllPoints()
|
||||
ArenaFrameFrameLabel:SetPoint("TOP", TabardFrame.backdrop, "TOP", 0, -10)
|
||||
|
||||
ArenaFrame.zones_bg = CreateFrame("Frame", "ArenaFrameZonesBackground", ArenaFrame)
|
||||
CreateBackdrop(ArenaFrame.zones_bg, nil, nil, .7)
|
||||
ArenaFrame.zones_bg:SetWidth(324)
|
||||
ArenaFrame.zones_bg:SetHeight(204)
|
||||
ArenaFrame.zones_bg:SetPoint("TOPLEFT", ArenaFrame.backdrop, "TOPLEFT", 9, -62)
|
||||
|
||||
ArenaFrame.tex1 = ArenaFrame.backdrop:CreateTexture("ArenaFrameWorldMap1", "ARTWORK")
|
||||
ArenaFrame.tex1:SetTexture("Interface\\BattlefieldFrame\\UI-Battlefield-WorldMap1")
|
||||
ArenaFrame.tex1:SetPoint("TOPLEFT", 11, -64)
|
||||
ArenaFrame.tex1:SetHeight(240)
|
||||
ArenaFrame.tex2 = ArenaFrame.backdrop:CreateTexture("ArenaFrameWorldMap2", "ARTWORK")
|
||||
ArenaFrame.tex2:SetTexture("Interface\\BattlefieldFrame\\UI-Battlefield-WorldMap2")
|
||||
ArenaFrame.tex2:SetPoint("LEFT", ArenaFrame.tex1, "RIGHT", 0, 0)
|
||||
ArenaFrame.tex2:SetHeight(240)
|
||||
|
||||
ArenaFrameNameHeader:ClearAllPoints()
|
||||
ArenaFrameNameHeader:SetPoint("BOTTOMLEFT", ArenaFrameDivider, "TOPLEFT", 14, 70)
|
||||
local shift = 28
|
||||
ArenaZone1:ClearAllPoints()
|
||||
ArenaZone1:SetPoint("TOPLEFT", ArenaFrame, "TOPLEFT", 23, -79 - shift)
|
||||
ArenaZone4:ClearAllPoints()
|
||||
ArenaZone4:SetPoint("TOPLEFT", ArenaZone3, "TOPLEFT", 0, -85 + shift)
|
||||
|
||||
ArenaFrame.textbox = CreateFrame("Frame", "ArenaFrameTextBox", ArenaFrame)
|
||||
ArenaFrame.textbox:SetWidth(324)
|
||||
ArenaFrame.textbox:SetHeight(110)
|
||||
CreateBackdrop(ArenaFrame.textbox)
|
||||
ArenaFrame.textbox:SetPoint("BOTTOM", ArenaFrame.backdrop, "BOTTOM", 0, 36)
|
||||
|
||||
ArenaFrameZoneDescription:SetFontObject(GameFontWhite)
|
||||
ArenaFrameZoneDescription:ClearAllPoints()
|
||||
ArenaFrameZoneDescription:SetPoint("TOPLEFT", ArenaFrame.textbox, "TOPLEFT", 4, -4)
|
||||
ArenaFrameZoneDescription:SetPoint("BOTTOMRIGHT", ArenaFrame.textbox, "BOTTOMRIGHT", -4, 4)
|
||||
|
||||
SkinButton(ArenaFrameCancelButton)
|
||||
SkinButton(ArenaFrameJoinButton)
|
||||
SkinButton(ArenaFrameGroupJoinButton)
|
||||
end)
|
||||
@@ -0,0 +1,119 @@
|
||||
pfUI:RegisterSkin("Arena Registrar", "tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
do -- ArenaRegistrarFrame
|
||||
StripTextures(ArenaRegistrarFrame)
|
||||
StripTextures(ArenaRegistrarGreetingFrame)
|
||||
CreateBackdrop(ArenaRegistrarFrame, nil, nil, .75)
|
||||
CreateBackdropShadow(ArenaRegistrarFrame)
|
||||
|
||||
ArenaRegistrarFrame.backdrop:SetPoint("TOPLEFT", 14, -18)
|
||||
ArenaRegistrarFrame.backdrop:SetPoint("BOTTOMRIGHT", -28, 66)
|
||||
ArenaRegistrarFrame:SetHitRectInsets(14,28,18,66)
|
||||
EnableMovable(ArenaRegistrarFrame)
|
||||
|
||||
SkinCloseButton(ArenaRegistrarFrameCloseButton, ArenaRegistrarFrame.backdrop, -6, -6)
|
||||
|
||||
ArenaRegistrarFrame:DisableDrawLayer("BACKGROUND")
|
||||
|
||||
ArenaRegistrarFrameNpcNameText:ClearAllPoints()
|
||||
ArenaRegistrarFrameNpcNameText:SetPoint("TOP", ArenaRegistrarFrame.backdrop, "TOP", 0, -10)
|
||||
|
||||
SkinButton(ArenaRegistrarFrameGoodbyeButton)
|
||||
SkinButton(ArenaRegistrarFrameCancelButton)
|
||||
SkinButton(ArenaRegistrarFramePurchaseButton)
|
||||
|
||||
ArenaRegistrarCostLabel:SetFontObject("GameFontWhite")
|
||||
ArenaRegistrarFrameEditBox:DisableDrawLayer("BACKGROUND")
|
||||
CreateBackdrop(ArenaRegistrarFrameEditBox, nil, nil, 1)
|
||||
ArenaRegistrarFrameEditBox:SetHeight(16)
|
||||
|
||||
local bg = ArenaRegistrarFrame:CreateTexture(nil, "LOW")
|
||||
bg:SetTexCoord(.1,1,0,1)
|
||||
bg:SetTexture("Interface\\Stationery\\StationeryTest1")
|
||||
bg:SetPoint("TOPLEFT", 23, -81)
|
||||
bg:SetPoint("BOTTOMRIGHT", -40, 100)
|
||||
end
|
||||
|
||||
do -- PVPBannerFrame
|
||||
StripTextures(PVPBannerFrame)
|
||||
CreateBackdrop(PVPBannerFrame, nil, nil, .75)
|
||||
CreateBackdropShadow(PVPBannerFrame)
|
||||
|
||||
PVPBannerFrame.backdrop:SetPoint("TOPLEFT", 10, -12)
|
||||
PVPBannerFrame.backdrop:SetPoint("BOTTOMRIGHT", -32, 72)
|
||||
PVPBannerFrame:SetHitRectInsets(10,32,12,72)
|
||||
EnableMovable(PVPBannerFrame)
|
||||
|
||||
SkinCloseButton(PVPBannerFrameCloseButton, PVPBannerFrame.backdrop, -6, -6)
|
||||
|
||||
PVPBannerFrame:DisableDrawLayer("BACKGROUND")
|
||||
|
||||
PVPBannerFrameNameText:ClearAllPoints()
|
||||
PVPBannerFrameNameText:SetPoint("TOP", ArenaRegistrarFrame.backdrop, "TOP", 0, -10)
|
||||
PVPBannerFrameGreetingText:ClearAllPoints()
|
||||
PVPBannerFrameGreetingText:SetPoint("TOP", PVPBannerFrameNameText, "TOP", 0, -10)
|
||||
|
||||
PVPBannerFrameCustomizationBorder:Hide()
|
||||
PVPBannerFrameCustomization1:ClearAllPoints()
|
||||
PVPBannerFrameCustomization1:SetPoint("TOPLEFT", PVPBannerFrameCustomizationBorder, "TOPLEFT", 48, -45)
|
||||
for i = 1, 2 do
|
||||
local frame = _G["PVPBannerFrameCustomization"..i]
|
||||
StripTextures(frame)
|
||||
CreateBackdrop(frame, nil, true)
|
||||
frame:SetHeight(25)
|
||||
|
||||
local left = _G["PVPBannerFrameCustomization"..i.."LeftButton"]
|
||||
StripTextures(left)
|
||||
SkinArrowButton(left, "left", 25)
|
||||
left:ClearAllPoints()
|
||||
left:SetPoint("LEFT", 0, 0)
|
||||
|
||||
local right = _G["PVPBannerFrameCustomization"..i.."RightButton"]
|
||||
StripTextures(right)
|
||||
SkinArrowButton(right, "right", 25)
|
||||
right:ClearAllPoints()
|
||||
right:SetPoint("RIGHT", 0, 0)
|
||||
|
||||
local text = _G["PVPBannerFrameCustomization"..i.."Text"]
|
||||
text:ClearAllPoints()
|
||||
text:SetPoint("CENTER", 0, 0)
|
||||
end
|
||||
|
||||
local width = PVPBannerFrameCustomization2:GetWidth()
|
||||
for i = 1, 3 do
|
||||
local btn = _G["PVPColorPickerButton"..i]
|
||||
local prev = _G["PVPColorPickerButton"..(i-1)]
|
||||
|
||||
SkinButton(btn)
|
||||
btn:SetWidth(width)
|
||||
btn:ClearAllPoints()
|
||||
if prev then
|
||||
btn:SetPoint("TOPLEFT", prev, "BOTTOMLEFT", 0, -5)
|
||||
else
|
||||
btn:SetPoint("TOPLEFT", PVPBannerFrameCustomization2, "BOTTOMLEFT", 0, -5)
|
||||
end
|
||||
end
|
||||
|
||||
local PVPBannerFrameCancelButton
|
||||
do -- fix Blizzard bug. A button with the same name is created twice.
|
||||
for k,v in ipairs({PVPBannerFrameCustomizationFrame:GetChildren()}) do
|
||||
if v:GetName() == "PVPBannerFrameCancelButton" then v:Hide() end -- This is the wrong and broken button.
|
||||
end
|
||||
|
||||
for k,v in ipairs({PVPBannerFrame:GetChildren()}) do
|
||||
if v:GetName() == "PVPBannerFrameCancelButton" then PVPBannerFrameCancelButton = v end
|
||||
end
|
||||
end
|
||||
|
||||
SkinButton(PVPBannerFrameSaveButton)
|
||||
|
||||
SkinButton(PVPBannerFrameCancelButton)
|
||||
PVPBannerFrameCancelButton:ClearAllPoints()
|
||||
PVPBannerFrameCancelButton:SetPoint("TOPRIGHT", PVPColorPickerButton3, "BOTTOMRIGHT", 0, -10)
|
||||
SkinButton(PVPBannerFrameAcceptButton)
|
||||
PVPBannerFrameAcceptButton:ClearAllPoints()
|
||||
PVPBannerFrameAcceptButton:SetPoint("RIGHT", PVPBannerFrameCancelButton, "LEFT", -2*bpad, 0)
|
||||
end
|
||||
end)
|
||||
@@ -1,11 +1,16 @@
|
||||
pfUI:RegisterSkin("Auctionhouse", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Auctionhouse", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
HookAddonOrVariable("Blizzard_AuctionUI", function()
|
||||
SkinArrowButton(BidPrevPageButton, "left", 18)
|
||||
SkinArrowButton(BidNextPageButton, "right", 18)
|
||||
SkinArrowButton(AuctionsPrevPageButton, "left", 18)
|
||||
SkinArrowButton(AuctionsNextPageButton, "right", 18)
|
||||
-- Compatibility
|
||||
if BrowseResetButton then -- tbc
|
||||
SkinButton(BrowseResetButton)
|
||||
else -- vanilla
|
||||
SkinArrowButton(BidPrevPageButton, "left", 18)
|
||||
SkinArrowButton(BidNextPageButton, "right", 18)
|
||||
SkinArrowButton(AuctionsPrevPageButton, "left", 18)
|
||||
SkinArrowButton(AuctionsNextPageButton, "right", 18)
|
||||
end
|
||||
|
||||
hooksecurefunc("AuctionFrame_OnShow", function()
|
||||
AuctionFrame:ClearAllPoints()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterSkin("Battlefield", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Battlefield", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterSkin("Battlefield Minimap", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Battlefield Minimap", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
|
||||
HookAddonOrVariable("Blizzard_BattlefieldMinimap", function()
|
||||
|
||||
@@ -1,13 +1,26 @@
|
||||
pfUI:RegisterSkin("Character", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Character", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
-- Honor Tab
|
||||
StripTextures(HonorFrame)
|
||||
-- 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)
|
||||
|
||||
HonorFrameProgressBar:SetStatusBarTexture(pfUI.media["img:bar"])
|
||||
CreateBackdrop(HonorFrameProgressBar)
|
||||
HonorFrameProgressBar:SetHeight(24)
|
||||
-- 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},
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterSkin("Dress Up Frame", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Dress Up Frame", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterSkin("Friends", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Friends", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
local maxtab = pfUI.expansion == "vanilla" and 4 or 5
|
||||
@@ -336,6 +336,24 @@ pfUI:RegisterSkin("Friends", "vanilla", function ()
|
||||
GuildInfoCancelButton:ClearAllPoints()
|
||||
GuildInfoCancelButton:SetPoint("BOTTOMRIGHT", GuildInfoFrame, "BOTTOMRIGHT", -10, 8)
|
||||
|
||||
if GuildInfoGuildEventButton then -- log button (tbc+)
|
||||
SkinButton(GuildInfoGuildEventButton)
|
||||
GuildInfoGuildEventButton:ClearAllPoints()
|
||||
GuildInfoGuildEventButton:SetPoint("BOTTOM", GuildInfoFrame, "BOTTOM", 0, 8)
|
||||
end
|
||||
|
||||
if GuildEventLogFrame then -- guild log frame (tbc+)
|
||||
StripTextures(GuildEventFrame)
|
||||
CreateBackdrop(GuildEventFrame, nil, true, .75)
|
||||
StripTextures(GuildEventLogFrame)
|
||||
CreateBackdrop(GuildEventLogFrame, nil, true, .75)
|
||||
StripTextures(GuildEventLogScrollFrame)
|
||||
SkinScrollbar(GuildEventLogScrollFrameScrollBar)
|
||||
SkinCloseButton(GuildEventLogCloseButton)
|
||||
GuildEventLogCancelButton:SetPoint("BOTTOMRIGHT", -9, 8)
|
||||
SkinButton(GuildEventLogCancelButton)
|
||||
end
|
||||
|
||||
-- guild control
|
||||
StripTextures(GuildControlPopupFrame)
|
||||
CreateBackdrop(GuildControlPopupFrame, nil, true, .75)
|
||||
@@ -374,6 +392,46 @@ pfUI:RegisterSkin("Friends", "vanilla", function ()
|
||||
GuildControlPopupAcceptButton:SetPoint("RIGHT", GuildControlPopupFrameCancelButton, "LEFT", -2*bpad, 0)
|
||||
end
|
||||
|
||||
if ChannelFrameVerticalBar then -- Channel Tab (TBC+)
|
||||
StripTextures(ChannelFrameVerticalBar)
|
||||
SkinButton(ChannelFrameNewButton)
|
||||
ChannelFrameNewButton:SetPoint("BOTTOMRIGHT", -15, 82)
|
||||
|
||||
StripTextures(ChannelListScrollFrame)
|
||||
SkinScrollbar(ChannelListScrollFrameScrollBar)
|
||||
|
||||
for i = 1, MAX_DISPLAY_CHANNEL_BUTTONS do
|
||||
StripTextures(_G["ChannelButton"..i])
|
||||
SkinButton(_G["ChannelButton"..i])
|
||||
end
|
||||
|
||||
for i = 1, 22 do
|
||||
StripTextures(_G["ChannelMemberButton"..i])
|
||||
end
|
||||
|
||||
CreateBackdrop(ChannelMemberButton1)
|
||||
ChannelMemberButton1.backdrop:SetPoint("BOTTOMRIGHT", ChannelMemberButton22, "BOTTOMRIGHT", -1, 0)
|
||||
|
||||
StripTextures(ChannelRosterScrollFrame)
|
||||
SkinScrollbar(ChannelRosterScrollFrameScrollBar)
|
||||
|
||||
StripTextures(ChannelFrameDaughterFrame)
|
||||
CreateBackdrop(ChannelFrameDaughterFrame)
|
||||
|
||||
StripTextures(ChannelFrameDaughterFrameChannelName)
|
||||
CreateBackdrop(ChannelFrameDaughterFrameChannelName, nil, true)
|
||||
ChannelFrameDaughterFrameChannelName:SetTextInsets(5,5,5,5)
|
||||
|
||||
StripTextures(ChannelFrameDaughterFrameChannelPassword)
|
||||
CreateBackdrop(ChannelFrameDaughterFrameChannelPassword, nil, true)
|
||||
ChannelFrameDaughterFrameChannelPassword:SetTextInsets(5,5,5,5)
|
||||
|
||||
SkinCloseButton(ChannelFrameDaughterFrameDetailCloseButton)
|
||||
|
||||
SkinButton(ChannelFrameDaughterFrameCancelButton)
|
||||
SkinButton(ChannelFrameDaughterFrameOkayButton)
|
||||
end
|
||||
|
||||
do -- Raid Tab
|
||||
StripTextures(RaidInfoFrame)
|
||||
CreateBackdrop(RaidInfoFrame, nil, true, .75)
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
pfUI:RegisterSkin("Game Menu", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Game Menu", "vanilla:tbc", function ()
|
||||
StripTextures(GameMenuFrame)
|
||||
CreateBackdrop(GameMenuFrame, nil, true, .75)
|
||||
CreateBackdropShadow(GameMenuFrame)
|
||||
|
||||
GameMenuFrame:SetWidth(GameMenuFrame:GetWidth() - 30)
|
||||
GameMenuFrame:SetHeight(GameMenuFrame:GetHeight() + 6)
|
||||
if pfUI.expansion == 'tbc' then
|
||||
GameMenuFrame:SetHeight(GameMenuFrame:GetHeight() + 10)
|
||||
elseif pfUI.expansion == 'vanilla' then
|
||||
GameMenuFrame:SetHeight(GameMenuFrame:GetHeight() + 6)
|
||||
end
|
||||
|
||||
local title = GetNoNameObject(GameMenuFrame, "FontString", "ARTWORK", MAIN_MENU)
|
||||
title:SetTextColor(1,1,1,1)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterSkin("Gossip and Quest", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Gossip and Quest", "vanilla:tbc", function ()
|
||||
local frames = {'Quest', 'Gossip'}
|
||||
local panels = {'Greeting', 'Detail', 'Progress', 'Reward'}
|
||||
local buttons = {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterSkin("Guild Registrar", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Guild Registrar", "vanilla:tbc", function ()
|
||||
StripTextures(GuildRegistrarFrame)
|
||||
StripTextures(GuildRegistrarGreetingFrame)
|
||||
CreateBackdrop(GuildRegistrarFrame, nil, nil, .75)
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
pfUI:RegisterSkin("Guild Bank", "tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
HookAddonOrVariable("Blizzard_GuildBankUI", function()
|
||||
do -- GuildBankFrame
|
||||
StripTextures(GuildBankFrame)
|
||||
CreateBackdrop(GuildBankFrame, nil, nil, .75)
|
||||
CreateBackdropShadow(GuildBankFrame)
|
||||
GuildBankFrame.backdrop:SetPoint("TOPLEFT", 10, -30)
|
||||
GuildBankFrame.backdrop:SetPoint("BOTTOMRIGHT", 0, 4)
|
||||
GuildBankFrame:SetHitRectInsets(10,0,30,4)
|
||||
EnableMovable(GuildBankFrame)
|
||||
|
||||
SkinCloseButton(GetNoNameObject(GuildBankFrame, "Button", nil, "UI-Panel-MinimizeButton-Up"), GuildBankFrame.backdrop, -6, -6)
|
||||
|
||||
GuildBankEmblemFrame:ClearAllPoints()
|
||||
GuildBankEmblemFrame:SetPoint("BOTTOM", GuildBankFrame.backdrop, "TOP", -70, 0)
|
||||
|
||||
for i = 1, 4 do
|
||||
local tab = _G["GuildBankFrameTab"..i]
|
||||
local lastTab = _G["GuildBankFrameTab"..(i-1)]
|
||||
tab:ClearAllPoints()
|
||||
if lastTab then
|
||||
tab:SetPoint("LEFT", lastTab, "RIGHT", border*2 + 1, 0)
|
||||
else
|
||||
tab:SetPoint("TOPLEFT", GuildBankFrame.backdrop, "BOTTOMLEFT", bpad, -(border + (border == 1 and 1 or 2)))
|
||||
end
|
||||
SkinTab(tab)
|
||||
end
|
||||
for i = 1, 6 do
|
||||
local frame = _G["GuildBankTab"..i]
|
||||
local button = _G["GuildBankTab"..i.."Button"]
|
||||
local lastbutton = _G["GuildBankTab"..(i-1).."Button"]
|
||||
local texture = _G["GuildBankTab"..i.."ButtonIconTexture"]
|
||||
|
||||
StripTextures(frame)
|
||||
SkinButton(button, nil, nil, nil, texture)
|
||||
|
||||
button:ClearAllPoints()
|
||||
if lastbutton then
|
||||
button:SetPoint("TOP", lastbutton, "BOTTOM", 0, - (border + (border == 1 and 1 or 2) + bpad))
|
||||
else
|
||||
button:SetPoint("TOPLEFT", 6, -60)
|
||||
end
|
||||
|
||||
function button.SetChecked(self, checked)
|
||||
if checked then
|
||||
self.locked = true
|
||||
self:SetBackdropBorderColor(1,1,1)
|
||||
else
|
||||
self.locked = false
|
||||
self:SetBackdropBorderColor(GetStringColor(pfUI_config.appearance.border.color))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
for i = 1, NUM_GUILDBANK_COLUMNS do
|
||||
local column = _G["GuildBankColumn"..i]
|
||||
StripTextures(column)
|
||||
for j = 1, NUM_SLOTS_PER_GUILDBANK_GROUP do
|
||||
local slot = _G["GuildBankColumn"..i.."Button"..j]
|
||||
SkinButton(slot, nil, nil, nil, _G[slot:GetName().."IconTexture"], true)
|
||||
end
|
||||
end
|
||||
|
||||
hooksecurefunc("GuildBankFrame_Update", function()
|
||||
if GuildBankFrame.mode ~= "bank" then return end
|
||||
|
||||
for i = 1, MAX_GUILDBANK_SLOTS_PER_TAB do
|
||||
local index = math.fmod(i, NUM_SLOTS_PER_GUILDBANK_GROUP)
|
||||
if index == 0 then index = NUM_SLOTS_PER_GUILDBANK_GROUP end
|
||||
local column = ceil((i-.5)/NUM_SLOTS_PER_GUILDBANK_GROUP)
|
||||
local slot = _G["GuildBankColumn"..column.."Button"..index]
|
||||
local tab = GetCurrentGuildBankTab()
|
||||
local link = GetGuildBankItemLink(tab, i)
|
||||
if link then
|
||||
local r,g,b = GetItemQualityColor(select(3, GetItemInfo(link)))
|
||||
slot:SetBackdropBorderColor(r,g,b,1)
|
||||
else
|
||||
slot:SetBackdropBorderColor(GetStringColor(pfUI_config.appearance.border.color))
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
SkinButton(GuildBankFrameDepositButton)
|
||||
SkinButton(GuildBankFrameWithdrawButton)
|
||||
GuildBankFrameWithdrawButton:ClearAllPoints()
|
||||
GuildBankFrameWithdrawButton:SetPoint("RIGHT", GuildBankFrameDepositButton, "LEFT", -2*bpad, 0)
|
||||
|
||||
SkinButton(GuildBankInfoSaveButton)
|
||||
GuildBankInfoScrollFrameScrollBar:Hide()
|
||||
end
|
||||
|
||||
do -- GuildBankPopupFrame
|
||||
StripTextures(GuildBankPopupFrame)
|
||||
CreateBackdrop(GuildBankPopupFrame, nil, nil, .75)
|
||||
CreateBackdropShadow(GuildBankPopupFrame)
|
||||
GuildBankPopupFrame.backdrop:SetPoint("TOPLEFT", 0, -6)
|
||||
GuildBankPopupFrame.backdrop:SetPoint("BOTTOMRIGHT", -26, 26)
|
||||
GuildBankPopupFrame:SetHitRectInsets(0,26,6,26)
|
||||
|
||||
GuildBankPopupFrame.backdrop:SetPoint("TOPLEFT", GuildBankFrame.backdrop, "TOPRIGHT", 2*border, 0)
|
||||
|
||||
GuildBankPopupEditBox:DisableDrawLayer("BACKGROUND")
|
||||
CreateBackdrop(GuildBankPopupEditBox)
|
||||
|
||||
StripTextures(GuildBankPopupScrollFrame)
|
||||
CreateBackdrop(GuildBankPopupScrollFrame)
|
||||
SkinScrollbar(GuildBankPopupScrollFrameScrollBar)
|
||||
GuildBankPopupScrollFrame:ClearAllPoints()
|
||||
GuildBankPopupScrollFrame:SetPoint("TOPLEFT", GuildBankPopupEditBox, "BOTTOMLEFT", -11, -14)
|
||||
GuildBankPopupScrollFrame:SetWidth(182)
|
||||
GuildBankPopupScrollFrame:SetHeight(178)
|
||||
|
||||
for i = 1, 16 do
|
||||
local slot = _G["GuildBankPopupButton"..i]
|
||||
StripTextures(slot)
|
||||
SkinButton(slot, nil, nil, nil, _G["GuildBankPopupButton"..i.."Icon"], true)
|
||||
end
|
||||
|
||||
GuildBankPopupButton1:ClearAllPoints()
|
||||
GuildBankPopupButton1:SetPoint("TOPLEFT", GuildBankPopupScrollFrame, "TOPLEFT", 4, -4)
|
||||
|
||||
SkinButton(GuildBankPopupCancelButton)
|
||||
SkinButton(GuildBankPopupOkayButton)
|
||||
GuildBankPopupOkayButton:ClearAllPoints()
|
||||
GuildBankPopupOkayButton:SetPoint("RIGHT", GuildBankPopupCancelButton, "LEFT", -2*bpad, 0)
|
||||
end
|
||||
end)
|
||||
end)
|
||||
+13
-1
@@ -1,7 +1,19 @@
|
||||
pfUI:RegisterSkin("Help", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Help", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
-- not much here for tbc yet
|
||||
if pfUI.client > 11200 then
|
||||
local ticket, background = TicketStatusFrame:GetChildren()
|
||||
CreateBackdrop(background, nil, true, .75)
|
||||
TicketStatusFrame:SetHeight(40)
|
||||
TicketStatusFrame:ClearAllPoints()
|
||||
TicketStatusFrame:SetPoint("TOP", 0, -5)
|
||||
|
||||
UpdateMovable(TicketStatusFrame)
|
||||
return
|
||||
end
|
||||
|
||||
StripTextures(HelpFrame)
|
||||
CreateBackdrop(HelpFrame, nil, nil, .75)
|
||||
CreateBackdropShadow(HelpFrame)
|
||||
|
||||
@@ -20,6 +20,111 @@ local slots = {
|
||||
"RangedSlot",
|
||||
}
|
||||
|
||||
pfUI:RegisterSkin("Inspect", "tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
HookAddonOrVariable("Blizzard_InspectUI", function()
|
||||
CreateBackdrop(InspectFrame, nil, nil, .75)
|
||||
CreateBackdropShadow(InspectFrame)
|
||||
|
||||
InspectFrame.backdrop:SetPoint("TOPLEFT", 10, -10)
|
||||
InspectFrame.backdrop:SetPoint("BOTTOMRIGHT", -30, 72)
|
||||
InspectFrame:SetHitRectInsets(10,30,10,72)
|
||||
EnableMovable("InspectFrame", "Blizzard_InspectUI", INSPECTFRAME_SUBFRAMES)
|
||||
|
||||
SkinCloseButton(InspectFrameCloseButton, InspectFrame.backdrop, -6, -6)
|
||||
|
||||
InspectFrame:DisableDrawLayer("ARTWORK")
|
||||
|
||||
InspectNameText:ClearAllPoints()
|
||||
InspectNameText:SetPoint("TOP", InspectFrame.backdrop, "TOP", 0, -10)
|
||||
InspectGuildText:Show()
|
||||
InspectGuildText:ClearAllPoints()
|
||||
InspectGuildText:SetPoint("TOP", InspectLevelText, "BOTTOM", 0, -1)
|
||||
|
||||
for i = 1, 3 do
|
||||
local tab = _G["InspectFrameTab"..i]
|
||||
local lastTab = _G["InspectFrameTab"..(i-1)]
|
||||
tab:ClearAllPoints()
|
||||
if lastTab then
|
||||
tab:SetPoint("LEFT", lastTab, "RIGHT", border*2 + 1, 0)
|
||||
else
|
||||
tab:SetPoint("TOPLEFT", InspectFrame.backdrop, "BOTTOMLEFT", bpad, -(border + (border == 1 and 1 or 2)))
|
||||
end
|
||||
SkinTab(tab)
|
||||
end
|
||||
|
||||
do -- Character Tab
|
||||
StripTextures(InspectPaperDollFrame)
|
||||
|
||||
EnableClickRotate(InspectModelFrame)
|
||||
InspectModelRotateLeftButton:Hide()
|
||||
InspectModelRotateRightButton:Hide()
|
||||
|
||||
for _, slot in pairs(slots) do
|
||||
local frame = _G["Inspect"..slot]
|
||||
SkinButton(frame, nil, nil, nil, _G["Inspect"..slot.."IconTexture"], true)
|
||||
end
|
||||
|
||||
hooksecurefunc("InspectPaperDollFrame_OnShow", function()
|
||||
local guild, title = GetGuildInfo(InspectFrame.unit)
|
||||
local text = guild and format(TEXT(GUILD_TITLE_TEMPLATE), title, guild) or ""
|
||||
InspectGuildText:SetText(text)
|
||||
end)
|
||||
|
||||
hooksecurefunc("InspectPaperDollItemSlotButton_Update", function(button)
|
||||
local unit = InspectFrame.unit
|
||||
local link = GetInventoryItemLink(unit, button:GetID())
|
||||
if link then
|
||||
local quality = select(3, GetItemInfo(link))
|
||||
button:SetBackdropBorderColor(GetItemQualityColor(quality))
|
||||
else
|
||||
button:SetBackdropBorderColor(pfUI.cache.er, pfUI.cache.eg, pfUI.cache.eb, pfUI.cache.ea)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
do -- PVP Tab
|
||||
StripTextures(InspectPVPFrame)
|
||||
end
|
||||
|
||||
do -- Talent Tab
|
||||
StripTextures(InspectTalentFrame)
|
||||
InspectTalentFrameCancelButton:Hide()
|
||||
InspectTalentFrameCloseButton:Hide()
|
||||
|
||||
InspectTalentFrameSpentPoints:ClearAllPoints()
|
||||
InspectTalentFrameSpentPoints:SetPoint("BOTTOMRIGHT", InspectTalentFrame, "BOTTOMRIGHT", 0, 83)
|
||||
|
||||
StripTextures(InspectTalentFrameScrollFrame)
|
||||
SkinScrollbar(InspectTalentFrameScrollFrameScrollBar)
|
||||
|
||||
for i = 1, MAX_NUM_TALENTS do
|
||||
local talent = _G["InspectTalentFrameTalent"..i]
|
||||
if talent then
|
||||
StripTextures(talent)
|
||||
SkinButton(talent, nil, nil, nil, _G["InspectTalentFrameTalent"..i.."IconTexture"])
|
||||
|
||||
_G["InspectTalentFrameTalent"..i.."Rank"]:SetFont(pfUI.font_default, C.global.font_size, "OUTLINE")
|
||||
end
|
||||
end
|
||||
|
||||
for i = 1, 3 do
|
||||
local tab = _G["InspectTalentFrameTab"..i]
|
||||
local lastTab = _G["InspectTalentFrameTab"..(i-1)]
|
||||
tab:ClearAllPoints()
|
||||
if lastTab then
|
||||
tab:SetPoint("LEFT", lastTab, "RIGHT", border*2 + 1, 0)
|
||||
else
|
||||
tab:SetPoint("TOPLEFT", 70, -50)
|
||||
end
|
||||
SkinTab(tab)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end)
|
||||
|
||||
pfUI:RegisterSkin("Inspect", "vanilla", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterSkin("Books", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Books", "vanilla:tbc", function ()
|
||||
StripTextures(ItemTextFrame)
|
||||
CreateBackdrop(ItemTextFrame, nil, nil, .75)
|
||||
CreateBackdropShadow(ItemTextFrame)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterSkin("KeyBindings", "vanilla", function ()
|
||||
pfUI:RegisterSkin("KeyBindings", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
pfUI:RegisterSkin("Looking for group", "tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
StripTextures(LFGParentFrame)
|
||||
CreateBackdrop(LFGParentFrame, nil, nil, .75)
|
||||
CreateBackdropShadow(LFGParentFrame)
|
||||
|
||||
LFGParentFrame.backdrop:SetPoint("TOPLEFT", 14, -10)
|
||||
LFGParentFrame.backdrop:SetPoint("BOTTOMRIGHT", -26, 72)
|
||||
LFGParentFrame:SetHitRectInsets(14,26,10,72)
|
||||
EnableMovable(LFGParentFrame)
|
||||
|
||||
SkinCloseButton(GetNoNameObject(LFGParentFrame, 'Button', nil, "UI-Panel-MinimizeButton-Up"), LFGParentFrame.backdrop, -6, -6)
|
||||
|
||||
LFGParentFrame:DisableDrawLayer("BACKGROUND")
|
||||
|
||||
LFGParentFrameTitle:ClearAllPoints()
|
||||
LFGParentFrameTitle:SetPoint("TOP", LFGParentFrame.backdrop, "TOP", 0, -10)
|
||||
|
||||
SkinTab(LFGParentFrameTab1)
|
||||
LFGParentFrameTab1:ClearAllPoints()
|
||||
LFGParentFrameTab1:SetPoint("TOPLEFT", LFGParentFrame.backdrop, "BOTTOMLEFT", bpad, -(border + (border == 1 and 1 or 2)))
|
||||
SkinTab(LFGParentFrameTab2)
|
||||
LFGParentFrameTab2:ClearAllPoints()
|
||||
LFGParentFrameTab2:SetPoint("LEFT", LFGParentFrameTab1, "RIGHT", border*2 + 1, 0)
|
||||
LFGParentFrameBackground:Hide()
|
||||
|
||||
LFGFrameClearAllButton:ClearAllPoints()
|
||||
LFGFrameClearAllButton:SetPoint("RIGHT", LFGFrameDoneButton, "LEFT", -2*bpad, 0)
|
||||
|
||||
StripTextures(AutoJoinBackground)
|
||||
SkinCheckbox(AutoJoinCheckButton)
|
||||
|
||||
StripTextures(AddMemberBackground)
|
||||
SkinCheckbox(AutoAddMembersCheckButton)
|
||||
|
||||
CreateBackdrop(LFGComment)
|
||||
|
||||
-- skin buttons
|
||||
local buttons = {
|
||||
"LFGWizardFrameLFGButton",
|
||||
"LFGWizardFrameLFMButton",
|
||||
"LFGFrameDoneButton",
|
||||
"LFGFrameClearAllButton",
|
||||
"LFMFrameGroupInviteButton",
|
||||
"LFMFrameSendMessageButton",
|
||||
"LFMFrameSearchButton",
|
||||
"LFMFrameColumnHeader1",
|
||||
"LFMFrameColumnHeader2",
|
||||
"LFMFrameColumnHeader3",
|
||||
"LFMFrameColumnHeader4",
|
||||
}
|
||||
|
||||
for _, name in pairs(buttons) do
|
||||
SkinButton(_G[name])
|
||||
end
|
||||
|
||||
-- skin dropdowns
|
||||
local dropdowns = {
|
||||
"LFGFrameTypeDropDown1",
|
||||
"LFGFrameNameDropDown1",
|
||||
"LFGFrameTypeDropDown2",
|
||||
"LFGFrameNameDropDown2",
|
||||
"LFGFrameTypeDropDown3",
|
||||
"LFGFrameNameDropDown3",
|
||||
}
|
||||
|
||||
for _, name in pairs(dropdowns) do
|
||||
SkinDropDown(_G[name])
|
||||
end
|
||||
|
||||
SkinDropDown(LFMFrameTypeDropDown, nil, nil, nil, true)
|
||||
SkinDropDown(LFMFrameNameDropDown, nil, nil, nil, true)
|
||||
end)
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterSkin("Macro", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Macro", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
|
||||
+46
-2
@@ -1,10 +1,53 @@
|
||||
pfUI:RegisterSkin("Mailbox", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Mailbox", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
-- Compatibility
|
||||
local StationeryBackgroundLeft, StationeryBackgroundRight
|
||||
if ATTACHMENTS_MAX_SEND then -- tbc
|
||||
do -- SendMailFrame
|
||||
for i = 1, ATTACHMENTS_MAX_SEND do
|
||||
local btn = _G["SendMailAttachment"..i]
|
||||
StripTextures(btn)
|
||||
SkinButton(btn, nil, nil, nil, nil, true)
|
||||
end
|
||||
|
||||
do -- SendMailFrame
|
||||
hooksecurefunc("SendMailFrame_Update", function()
|
||||
for i = 1, ATTACHMENTS_MAX_SEND do
|
||||
local btn = _G["SendMailAttachment"..i]
|
||||
HandleIcon(btn, btn:GetNormalTexture())
|
||||
|
||||
local link = GetSendMailItemLink(i)
|
||||
if link then
|
||||
local r,g,b = GetItemQualityColor(select(3, GetItemInfo(link)))
|
||||
btn:SetBackdropBorderColor(r,g,b,1)
|
||||
else
|
||||
btn:SetBackdropBorderColor(GetStringColor(pfUI_config.appearance.border.color))
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
StationeryBackgroundLeft, StationeryBackgroundRight = SendStationeryBackgroundLeft, SendStationeryBackgroundRight
|
||||
end
|
||||
|
||||
do -- OpenMailFrame
|
||||
for i = 1, ATTACHMENTS_MAX_RECEIVE do
|
||||
SkinButton(_G["OpenMailAttachmentButton"..i], nil, nil, nil, _G["OpenMailAttachmentButton"..i.."IconTexture"], true)
|
||||
end
|
||||
|
||||
hooksecurefunc("InboxFrame_OnClick", function(index)
|
||||
for i=1, ATTACHMENTS_MAX_RECEIVE do
|
||||
local link = GetInboxItemLink(index, i)
|
||||
if not link then return end
|
||||
local r,g,b = GetItemQualityColor(select(3, GetItemInfo(link)))
|
||||
_G["OpenMailAttachmentButton"..i]:SetBackdropBorderColor(r,g,b,1)
|
||||
end
|
||||
end)
|
||||
|
||||
SkinButton(OpenMailReportSpamButton)
|
||||
end
|
||||
else -- vanilla
|
||||
do -- SendMailFrame
|
||||
local skin = CreateFrame("Frame")
|
||||
skin:SetScript("OnEvent", function()
|
||||
this:UnregisterEvent("MAIL_SHOW")
|
||||
@@ -79,6 +122,7 @@ pfUI:RegisterSkin("Mailbox", "vanilla", function ()
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
StripTextures(MailFrame, true)
|
||||
CreateBackdrop(MailFrame, nil, nil, .75)
|
||||
|
||||
@@ -1,9 +1,21 @@
|
||||
pfUI:RegisterSkin("Merchant", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Merchant", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
MerchantRepairAllButton:ClearAllPoints()
|
||||
MerchantRepairAllButton:SetPoint("RIGHT", MerchantBuyBackItemItemButton, "LEFT", -6, 0)
|
||||
-- Compatibility
|
||||
if MerchantGuildBankRepairButton then -- tbc
|
||||
SkinButton(MerchantGuildBankRepairButton, nil, nil, nil, MerchantGuildBankRepairButtonIcon)
|
||||
MerchantGuildBankRepairButtonIcon:SetTexCoord(.59, .82, .06, .54)
|
||||
hooksecurefunc("MerchantFrame_UpdateRepairButtons", function()
|
||||
MerchantGuildBankRepairButton:ClearAllPoints()
|
||||
MerchantGuildBankRepairButton:SetPoint("RIGHT", MerchantBuyBackItemItemButton, "LEFT", -14, 0)
|
||||
MerchantRepairAllButton:ClearAllPoints()
|
||||
MerchantRepairAllButton:SetPoint("RIGHT", MerchantGuildBankRepairButton, "LEFT", -6, 0)
|
||||
end)
|
||||
else -- vanilla
|
||||
MerchantRepairAllButton:ClearAllPoints()
|
||||
MerchantRepairAllButton:SetPoint("RIGHT", MerchantBuyBackItemItemButton, "LEFT", -6, 0)
|
||||
end
|
||||
|
||||
StripTextures(MerchantFrame)
|
||||
CreateBackdrop(MerchantFrame, nil, nil, .75)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterSkin("Stack Split", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Stack Split", "vanilla:tbc", function ()
|
||||
StripTextures(StackSplitFrame)
|
||||
CreateBackdrop(StackSplitFrame, nil, nil, .75)
|
||||
CreateBackdropShadow(StackSplitFrame)
|
||||
@@ -7,7 +7,7 @@ pfUI:RegisterSkin("Stack Split", "vanilla", function ()
|
||||
SkinButton(StackSplitCancelButton)
|
||||
end)
|
||||
|
||||
pfUI:RegisterSkin("Coin Pickup", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Coin Pickup", "vanilla:tbc", function ()
|
||||
StripTextures(CoinPickupFrame)
|
||||
CreateBackdrop(CoinPickupFrame, nil, nil, .75)
|
||||
CreateBackdropShadow(CoinPickupFrame)
|
||||
@@ -16,7 +16,7 @@ pfUI:RegisterSkin("Coin Pickup", "vanilla", function ()
|
||||
SkinButton(CoinPickupCancelButton)
|
||||
end)
|
||||
|
||||
pfUI:RegisterSkin("Color Picker", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Color Picker", "vanilla:tbc", function ()
|
||||
CreateBackdrop(ColorPickerFrame)
|
||||
CreateBackdropShadow(ColorPickerFrame)
|
||||
|
||||
@@ -32,7 +32,7 @@ pfUI:RegisterSkin("Color Picker", "vanilla", function ()
|
||||
SkinSlider(OpacitySliderFrame)
|
||||
end)
|
||||
|
||||
pfUI:RegisterSkin("Opacity", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Opacity", "vanilla:tbc", function ()
|
||||
CreateBackdrop(OpacityFrame, nil, true, .75)
|
||||
CreateBackdropShadow(OpacityFrame)
|
||||
|
||||
@@ -41,7 +41,7 @@ pfUI:RegisterSkin("Opacity", "vanilla", function ()
|
||||
OpacityFrameSlider:SetPoint("CENTER", 0, 0)
|
||||
end)
|
||||
|
||||
pfUI:RegisterSkin("Tutorial", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Tutorial", "vanilla:tbc", function ()
|
||||
CreateBackdrop(TutorialFrame, nil, true, .75)
|
||||
CreateBackdropShadow(TutorialFrame)
|
||||
|
||||
@@ -49,7 +49,7 @@ pfUI:RegisterSkin("Tutorial", "vanilla", function ()
|
||||
SkinButton(TutorialFrameOkayButton)
|
||||
end)
|
||||
|
||||
pfUI:RegisterSkin("Quest Timer", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Quest Timer", "vanilla:tbc", function ()
|
||||
CreateBackdrop(QuestTimerFrame, nil, nil, .75)
|
||||
CreateBackdropShadow(QuestTimerFrame)
|
||||
UpdateMovable(QuestTimerFrame, true)
|
||||
|
||||
@@ -0,0 +1,175 @@
|
||||
pfUI:RegisterSkin("Options - Interface", "tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
StripTextures(InterfaceOptionsFrame)
|
||||
CreateBackdrop(InterfaceOptionsFrame, nil, nil, .75)
|
||||
CreateBackdropShadow(InterfaceOptionsFrame)
|
||||
|
||||
EnableMovable(InterfaceOptionsFrame)
|
||||
|
||||
InterfaceOptionsFrameHeaderText:ClearAllPoints()
|
||||
InterfaceOptionsFrameHeaderText:SetPoint("TOP", InterfaceOptionsFrame.backdrop, "TOP", 0, -10)
|
||||
|
||||
StripTextures(InterfaceOptionsFrameCategories)
|
||||
CreateBackdrop(InterfaceOptionsFrameCategories, nil, true, .75)
|
||||
StripTextures(InterfaceOptionsFrameAddOns)
|
||||
CreateBackdrop(InterfaceOptionsFrameAddOns, nil, true, .75)
|
||||
CreateBackdrop(InterfaceOptionsFramePanelContainer, nil, true, .75)
|
||||
|
||||
SkinTab(InterfaceOptionsFrameTab1)
|
||||
InterfaceOptionsFrameTab1:ClearAllPoints()
|
||||
InterfaceOptionsFrameTab1:SetPoint("BOTTOMLEFT", InterfaceOptionsFrameCategories, "TOPLEFT", bpad, border + (border == 1 and 1 or 2))
|
||||
SkinTab(InterfaceOptionsFrameTab2)
|
||||
InterfaceOptionsFrameTab2:ClearAllPoints()
|
||||
InterfaceOptionsFrameTab2:SetPoint("LEFT", InterfaceOptionsFrameTab1, "RIGHT", border*2 + 1, 0)
|
||||
|
||||
SkinButton(InterfaceOptionsFrameDefaults)
|
||||
InterfaceOptionsFrameDefaults:ClearAllPoints()
|
||||
InterfaceOptionsFrameDefaults:SetPoint("TOPLEFT", InterfaceOptionsFrameCategories, "BOTTOMLEFT", 0, -10)
|
||||
SkinButton(InterfaceOptionsFrameCancel)
|
||||
InterfaceOptionsFrameCancel:ClearAllPoints()
|
||||
InterfaceOptionsFrameCancel:SetPoint("TOPRIGHT", InterfaceOptionsFramePanelContainer, "BOTTOMRIGHT", 0, -10)
|
||||
SkinButton(InterfaceOptionsFrameOkay)
|
||||
InterfaceOptionsFrameOkay:ClearAllPoints()
|
||||
InterfaceOptionsFrameOkay:SetPoint("RIGHT", InterfaceOptionsFrameCancel, "LEFT", -2*bpad, 0)
|
||||
|
||||
-- universal code for handling any frames!
|
||||
local function SkinAllObjects(frame)
|
||||
for _,obj in ipairs({frame:GetChildren()}) do
|
||||
local obj_type = obj:GetObjectType()
|
||||
if obj_type == "CheckButton" then
|
||||
local size = obj:GetHeight()
|
||||
if size > 26 then size = 26 end
|
||||
SkinCheckbox(obj, size)
|
||||
elseif obj_type == "Button" then
|
||||
SkinButton(obj)
|
||||
elseif obj_type == "Slider" then
|
||||
SkinSlider(obj)
|
||||
elseif obj_type == "Frame" then
|
||||
local name = obj.GetName and obj:GetName()
|
||||
if name and _G[name.."Button"] then
|
||||
SkinDropDown(obj)
|
||||
else
|
||||
SkinAllObjects(obj)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local blizzardCategories = {
|
||||
InterfaceOptionsControlsPanel, InterfaceOptionsCombatPanel, InterfaceOptionsDisplayPanel,
|
||||
InterfaceOptionsQuestsPanel, InterfaceOptionsSocialPanel, InterfaceOptionsActionBarsPanel,
|
||||
InterfaceOptionsNamesPanel, InterfaceOptionsCombatTextPanel, InterfaceOptionsStatusTextPanel,
|
||||
InterfaceOptionsPartyRaidPanel, InterfaceOptionsCameraPanel, InterfaceOptionsMousePanel,
|
||||
InterfaceOptionsHelpPanel, InterfaceOptionsLanguagesPanel
|
||||
}
|
||||
for _,frame in ipairs(blizzardCategories) do
|
||||
SkinAllObjects(frame)
|
||||
end
|
||||
|
||||
-- skin the option panel of any addon
|
||||
for _,frame in pairs(INTERFACEOPTIONS_ADDONCATEGORIES) do
|
||||
SkinAllObjects(frame)
|
||||
end
|
||||
end)
|
||||
|
||||
pfUI:RegisterSkin("Options - Interface", "vanilla", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
UIOptionsFrame:SetParent(UIParent)
|
||||
UIOptionsFrame:SetWidth(1024)
|
||||
UIOptionsFrame:SetHeight(700)
|
||||
|
||||
StripTextures(UIOptionsFrame)
|
||||
CreateBackdrop(UIOptionsFrame, nil, nil, .75)
|
||||
CreateBackdropShadow(UIOptionsFrame)
|
||||
|
||||
EnableMovable(UIOptionsFrame)
|
||||
|
||||
HookScript(UIOptionsFrame, "OnShow", function()
|
||||
this:ClearAllPoints()
|
||||
this:SetPoint("CENTER", 0, 0)
|
||||
end)
|
||||
|
||||
UIOptionsFrame.backdrop:SetPoint("BOTTOMRIGHT", 0, 50)
|
||||
UIOptionsFrame:SetHitRectInsets(0,0,0,50)
|
||||
|
||||
|
||||
-- increase button layer
|
||||
UIOptionsFrameTab1:SetFrameLevel(8)
|
||||
UIOptionsFrameTab2:SetFrameLevel(8)
|
||||
UIOptionsFrameDefaults:SetFrameLevel(8)
|
||||
UIOptionsFrameCancel:SetFrameLevel(8)
|
||||
UIOptionsFrameOkay:SetFrameLevel(8)
|
||||
|
||||
local close = GetNoNameObject(UIOptionsFrame, "Button", nil, "UI-Panel-MinimizeButton-Up")
|
||||
if close then
|
||||
close:SetFrameLevel(8)
|
||||
SkinCloseButton(close, UIOptionsFrame.backdrop, -6, -6)
|
||||
end
|
||||
|
||||
if UIOptionsFrameTitle then
|
||||
UIOptionsFrameTitle:ClearAllPoints()
|
||||
UIOptionsFrameTitle:SetPoint("TOP", UIOptionsFrame.backdrop, "TOP", 0, -10)
|
||||
end
|
||||
|
||||
SkinTab(UIOptionsFrameTab1)
|
||||
UIOptionsFrameTab1:ClearAllPoints()
|
||||
UIOptionsFrameTab1:SetPoint("TOPLEFT", UIOptionsFrame.backdrop, "TOPLEFT", 20, -20)
|
||||
UIOptionsFrameTab1:SetScript("OnClick", function()
|
||||
PanelTemplates_Tab_OnClick(UIOptionsFrame)
|
||||
BasicOptions:Show()
|
||||
AdvancedOptions:Hide()
|
||||
PlaySound("igCharacterInfoTab")
|
||||
end)
|
||||
SkinTab(UIOptionsFrameTab2)
|
||||
UIOptionsFrameTab2:ClearAllPoints()
|
||||
UIOptionsFrameTab2:SetPoint("LEFT", UIOptionsFrameTab1, "RIGHT", border*2 + 1, 0)
|
||||
UIOptionsFrameTab2:SetScript("OnClick", function()
|
||||
PanelTemplates_Tab_OnClick(UIOptionsFrame)
|
||||
BasicOptions:Hide()
|
||||
AdvancedOptions:Show()
|
||||
PlaySound("igCharacterInfoTab")
|
||||
end)
|
||||
|
||||
UIOptionsFrameCheckButton1:ClearAllPoints() -- Invert Mouse button
|
||||
UIOptionsFrameCheckButton1:SetPoint("TOPLEFT", UIOptionsFrameSlider1, "TOPRIGHT", 38, 14)
|
||||
|
||||
for i=1, 69 do
|
||||
local buton = _G["UIOptionsFrameCheckButton"..i]
|
||||
if buton then
|
||||
SkinCheckbox(buton)
|
||||
end
|
||||
end
|
||||
|
||||
for i=1, 4 do
|
||||
SkinSlider(_G["UIOptionsFrameSlider"..i])
|
||||
end
|
||||
|
||||
CreateBackdrop(BasicOptionsGeneral, nil, true, .75)
|
||||
CreateBackdrop(BasicOptionsDisplay, nil, true, .75)
|
||||
CreateBackdrop(BasicOptionsCamera, nil, true, .75)
|
||||
CreateBackdrop(BasicOptionsHelp, nil, true, .75)
|
||||
CreateBackdrop(AdvancedOptionsActionBars, nil, true, .75)
|
||||
CreateBackdrop(AdvancedOptionsChat, nil, true, .75)
|
||||
CreateBackdrop(AdvancedOptionsRaid, nil, true, .75)
|
||||
CreateBackdrop(AdvancedOptionsCombatText, nil, true, .75)
|
||||
|
||||
SkinDropDown(UIOptionsFrameClickCameraDropDown)
|
||||
SkinDropDown(UIOptionsFrameCameraDropDown)
|
||||
SkinDropDown(UIOptionsFrameTargetofTargetDropDown)
|
||||
SkinDropDown(UIOptionsFrameCombatTextDropDown)
|
||||
|
||||
SkinButton(UIOptionsFrameResetTutorials)
|
||||
SkinButton(UIOptionsFrameDefaults)
|
||||
UIOptionsFrameDefaults:ClearAllPoints()
|
||||
UIOptionsFrameDefaults:SetPoint("BOTTOMLEFT", UIOptionsFrame.backdrop, "BOTTOMLEFT", 14, 14)
|
||||
SkinButton(UIOptionsFrameCancel)
|
||||
UIOptionsFrameCancel:ClearAllPoints()
|
||||
UIOptionsFrameCancel:SetPoint("BOTTOMRIGHT", UIOptionsFrame.backdrop, "BOTTOMRIGHT", -14, 14)
|
||||
SkinButton(UIOptionsFrameOkay)
|
||||
UIOptionsFrameOkay:ClearAllPoints()
|
||||
UIOptionsFrameOkay:SetPoint("RIGHT", UIOptionsFrameCancel, "LEFT", -2*bpad, 0)
|
||||
end)
|
||||
@@ -1,18 +1,40 @@
|
||||
pfUI:RegisterSkin("Options - Sound", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Options - Sound", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
local SoundOptionsFrameHeaderText = GetNoNameObject(SoundOptionsFrame, "FontString", "ARTWORK", SOUNDOPTIONS_MENU)
|
||||
local NUM_CHECKBOXES = 8
|
||||
local NUM_SLIDERS = 4
|
||||
-- Compatibility
|
||||
local SoundOptionsFrameHeaderText, NUM_CHECKBOXES, NUM_SLIDERS
|
||||
if SOUND_OPTIONS then -- tbc
|
||||
SoundOptionsFrameHeaderText = GetNoNameObject(SoundOptionsFrame, "FontString", "BACKGROUND", SOUND_OPTIONS)
|
||||
NUM_CHECKBOXES = 11
|
||||
NUM_SLIDERS = 6
|
||||
|
||||
SoundOptionsFrameOkay:ClearAllPoints()
|
||||
SoundOptionsFrameOkay:SetPoint("RIGHT", SoundOptionsFrameCancel, "LEFT", -2*bpad, 0)
|
||||
SoundOptionsFrameSlider1:ClearAllPoints()
|
||||
SoundOptionsFrameSlider1:SetPoint("TOPRIGHT", SoundOptionsFrame, "TOPRIGHT", -18, -43)
|
||||
for i=2, NUM_SLIDERS do
|
||||
_G["SoundOptionsFrameSlider"..i]:ClearAllPoints()
|
||||
_G["SoundOptionsFrameSlider"..i]:SetPoint("TOP", _G["SoundOptionsFrameSlider"..i-1], "BOTTOM", 0, -30)
|
||||
StripTextures(AudioOptionsFrame)
|
||||
CreateBackdrop(SoundOptionsFramePlayback, nil, true, .75)
|
||||
CreateBackdrop(SoundOptionsFrameHardware, nil, true, .75)
|
||||
CreateBackdrop(SoundOptionsFrameVolume, nil, true, .75)
|
||||
|
||||
SkinDropDown(SoundOptionsOutputDropDown)
|
||||
|
||||
SoundOptionsFrameDefaults:ClearAllPoints()
|
||||
SoundOptionsFrameDefaults:SetPoint("TOPLEFT", SoundOptionsFramePlayback, "BOTTOMLEFT", 0, -10)
|
||||
SoundOptionsFrameCancel:ClearAllPoints()
|
||||
SoundOptionsFrameCancel:SetPoint("TOPRIGHT", SoundOptionsFrameVolume, "BOTTOMRIGHT", 0, -10)
|
||||
SoundOptionsFrameOkay:ClearAllPoints()
|
||||
SoundOptionsFrameOkay:SetPoint("RIGHT", SoundOptionsFrameCancel, "LEFT", -2*bpad, 0)
|
||||
else -- vanilla
|
||||
SoundOptionsFrameHeaderText = GetNoNameObject(SoundOptionsFrame, "FontString", "ARTWORK", SOUNDOPTIONS_MENU)
|
||||
NUM_CHECKBOXES = 8
|
||||
NUM_SLIDERS = 4
|
||||
|
||||
SoundOptionsFrameOkay:ClearAllPoints()
|
||||
SoundOptionsFrameOkay:SetPoint("RIGHT", SoundOptionsFrameCancel, "LEFT", -2*bpad, 0)
|
||||
SoundOptionsFrameSlider1:ClearAllPoints()
|
||||
SoundOptionsFrameSlider1:SetPoint("TOPRIGHT", SoundOptionsFrame, "TOPRIGHT", -18, -43)
|
||||
for i=2, NUM_SLIDERS do
|
||||
_G["SoundOptionsFrameSlider"..i]:ClearAllPoints()
|
||||
_G["SoundOptionsFrameSlider"..i]:SetPoint("TOP", _G["SoundOptionsFrameSlider"..i-1], "BOTTOM", 0, -30)
|
||||
end
|
||||
end
|
||||
|
||||
StripTextures(SoundOptionsFrame)
|
||||
|
||||
@@ -1,19 +1,45 @@
|
||||
pfUI:RegisterSkin("Options - Video", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Options - Video", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
local MAX_SLIDERS = 9
|
||||
local MAX_CHECKBOXES = 18
|
||||
-- Compatibility
|
||||
local MAX_SLIDERS, MAX_CHECKBOXES
|
||||
if OptionsFrameSlider10 then -- tbc
|
||||
MAX_SLIDERS = 11
|
||||
MAX_CHECKBOXES = 19
|
||||
|
||||
for i=1, MAX_SLIDERS do
|
||||
local slider = _G["OptionsFrameSlider"..i]
|
||||
local shift = 0
|
||||
if i == 1 or i == 6 then shift = 4
|
||||
elseif i == 4 or i == 8 then shift = 10
|
||||
for i=1, MAX_SLIDERS do
|
||||
local slider = _G["OptionsFrameSlider"..i]
|
||||
local shift = 0
|
||||
if i == 4 or i == 5 or i == 7 or i == 8 or i == 10 or i == 11 then shift = 10 end
|
||||
local point, anchor, anchorPoint, x, y = slider:GetPoint()
|
||||
slider:ClearAllPoints()
|
||||
slider:SetPoint(point, anchor, anchorPoint, x, y - shift)
|
||||
end
|
||||
|
||||
hooksecurefunc("OptionsFrame_Load", function()
|
||||
OptionsFramePixelShaders:SetWidth(230)
|
||||
OptionsFrameMiscellaneous:ClearAllPoints()
|
||||
OptionsFrameMiscellaneous:SetPoint("LEFT", OptionsFramePixelShaders, "RIGHT", 6, 0)
|
||||
end)
|
||||
OptionsFrameDefaults:ClearAllPoints()
|
||||
OptionsFrameDefaults:SetPoint("TOPLEFT", OptionsFramePixelShaders, "BOTTOMLEFT", 0, -10)
|
||||
OptionsFrameCancel:ClearAllPoints()
|
||||
OptionsFrameCancel:SetPoint("TOPRIGHT", OptionsFrameMiscellaneous, "BOTTOMRIGHT", 0, -10)
|
||||
else -- vanilla
|
||||
MAX_SLIDERS = 9
|
||||
MAX_CHECKBOXES = 18
|
||||
|
||||
for i=1, MAX_SLIDERS do
|
||||
local slider = _G["OptionsFrameSlider"..i]
|
||||
local shift = 0
|
||||
if i == 1 or i == 6 then shift = 4
|
||||
elseif i == 4 or i == 8 then shift = 10
|
||||
end
|
||||
local point, anchor, anchorPoint, x, y = slider:GetPoint()
|
||||
slider:ClearAllPoints()
|
||||
slider:SetPoint(point, anchor, anchorPoint, x, y - shift)
|
||||
end
|
||||
local point, anchor, anchorPoint, x, y = slider:GetPoint()
|
||||
slider:ClearAllPoints()
|
||||
slider:SetPoint(point, anchor, anchorPoint, x, y - shift)
|
||||
end
|
||||
|
||||
CreateBackdrop(OptionsFrame, nil, nil, .75)
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
pfUI:RegisterSkin("Popup Dialogs", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Popup Dialogs", "vanilla:tbc", function ()
|
||||
for i = 1, STATICPOPUP_NUMDIALOGS do
|
||||
-- Compatibility
|
||||
local money = _G["StaticPopup"..i.."MoneyInputFrame"]
|
||||
if money then -- tbc
|
||||
SkinMoneyInputFrame(money)
|
||||
end
|
||||
|
||||
|
||||
local dialog = _G["StaticPopup"..i]
|
||||
CreateBackdrop(dialog, nil, true, .75)
|
||||
CreateBackdropShadow(dialog)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterSkin("Profession", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Profession", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
@@ -219,7 +219,37 @@ pfUI:RegisterSkin("Profession", "vanilla", function ()
|
||||
end)
|
||||
end
|
||||
|
||||
_G[displayed] = 23
|
||||
-- Compatibility
|
||||
if search then -- tbc
|
||||
_G[displayed] = 21
|
||||
scrollframe:SetHeight(338)
|
||||
|
||||
local rank = _G[name.."RankFrameSkillRank"]
|
||||
rank:ClearAllPoints()
|
||||
rank:SetPoint("CENTER", rankbar, "CENTER", 0, 0)
|
||||
|
||||
local available = _G[frame:GetName().."AvailableFilterCheckButton"]
|
||||
SkinCheckbox(available)
|
||||
available:ClearAllPoints()
|
||||
available:SetPoint("TOPLEFT", scrollframe.backdrop, "BOTTOMLEFT", -4, -5)
|
||||
|
||||
search:DisableDrawLayer("BACKGROUND")
|
||||
CreateBackdrop(search, nil, nil, 1)
|
||||
search.backdrop:SetAllPoints(search)
|
||||
search:SetTextInsets(5, 5, 5, 5)
|
||||
search:SetHeight(22)
|
||||
search:ClearAllPoints()
|
||||
search:SetPoint("TOPRIGHT", scrollframe.backdrop, "BOTTOMRIGHT", 0, -5)
|
||||
|
||||
local craft_filter = CraftFrameFilterDropDown
|
||||
if craft_filter then
|
||||
SkinDropDown(craft_filter)
|
||||
craft_filter:ClearAllPoints()
|
||||
craft_filter:SetPoint("BOTTOMRIGHT", scrollframe.backdrop, "TOPRIGHT", 15, 0)
|
||||
end
|
||||
else -- vanilla
|
||||
_G[displayed] = 23
|
||||
end
|
||||
-- build remaining tradeskills
|
||||
for i = 9, _G[displayed] do
|
||||
local button = _G[template..i] or CreateFrame("Button", template..i, frame, template.."ButtonTemplate")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
pfUI:RegisterSkin("Quest Log", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Quest Log", "vanilla:tbc", function ()
|
||||
local rawborder, border = GetBorderSize()
|
||||
local bpad = rawborder > 1 and border - GetPerfectPixel() or GetPerfectPixel()
|
||||
|
||||
@@ -6,10 +6,23 @@ pfUI:RegisterSkin("Quest Log", "vanilla", function ()
|
||||
_G.MAX_WATCHABLE_QUESTS = 20 -- TODO
|
||||
|
||||
do -- quest log frame
|
||||
local QUEST_COUNT = QuestLogQuestCount
|
||||
-- Compatibility
|
||||
local QUEST_COUNT
|
||||
if QuestLogCount then -- tbc
|
||||
QUEST_COUNT = QuestLogCount
|
||||
|
||||
QUEST_COUNT:ClearAllPoints()
|
||||
QUEST_COUNT:SetPoint("TOPRIGHT", -10, -30)
|
||||
StripTextures(QUEST_COUNT)
|
||||
QUEST_COUNT:ClearAllPoints()
|
||||
hooksecurefunc("QuestLogUpdateQuestCount", function(numQuests)
|
||||
QUEST_COUNT:ClearAllPoints()
|
||||
QUEST_COUNT:SetPoint("BOTTOMRIGHT", QuestLogFrame, "TOPRIGHT", 0, -50)
|
||||
end)
|
||||
else -- vanilla
|
||||
QUEST_COUNT = QuestLogQuestCount
|
||||
|
||||
QUEST_COUNT:ClearAllPoints()
|
||||
QUEST_COUNT:SetPoint("TOPRIGHT", -10, -30)
|
||||
end
|
||||
|
||||
hooksecurefunc("QuestLog_OnShow", function()
|
||||
QuestLogFrame:ClearAllPoints()
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
pfUI:RegisterSkin("Readycheck", "vanilla", function ()
|
||||
pfUI:RegisterSkin("Readycheck", "vanilla:tbc", function ()
|
||||
HookAddonOrVariable("Blizzard_RaidUI", function()
|
||||
local update_func = "ReadyCheck_OnUpdate"
|
||||
-- Compatibility
|
||||
local update_func
|
||||
if ReadyCheckFrame_OnUpdate then -- tbc
|
||||
update_func = "ReadyCheckFrame_OnUpdate"
|
||||
else -- vanilla
|
||||
update_func = "ReadyCheck_OnUpdate"
|
||||
end
|
||||
|
||||
StripTextures(ReadyCheckFrame, true)
|
||||
CreateBackdrop(ReadyCheckFrame, nil, nil, .75)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user