62 Commits
Author SHA1 Message Date
Bluewhale1337 8624a192b6 Merge pull request #24 from Bluewhale1337/dev
Dev
2026-10-10 16:48:06 +02:00
Bluewhale1337 d949b7489a refactor: adjust UI layouts and templates across options XML files 2026-10-10 15:45:29 +02:00
Bluewhale1337 962f2a46aa refactor: update UI layout and formatting in HealBot options XML files and README 2026-10-10 13:26:13 +02:00
Bluewhale1337 eed71fa070 refactor: update skin options UI layout and add font styling to action buttons and headers 2026-10-10 12:51:07 +02:00
Bluewhale1337 2baf535aa2 Merge branch 'dev' of https://github.com/Bluewhale1337/HealBotBlue into dev 2026-10-10 12:25:32 +02:00
Bluewhale1337 4694db4f90 feat: add max/min HP bar color configuration and font selection options to skins 2026-10-10 12:25:28 +02:00
Bluewhale1337 076475442c Merge pull request #23 from Bluewhale1337/main
merging hotfixes from main
2026-10-10 12:19:46 +02:00
Bluewhale1337 d5ecdc6c76 gperf: optimize lookups by caching talent ranks, spell IDs, and unit IDs 2026-10-10 11:41:53 +02:00
Bluewhale1337 42ff023a54 refactor: update UI layout positioning and fix pet class color override logic 2026-10-09 21:48:46 +02:00
Bluewhale1337 8050561733 Chanes: add test mode bars and options for UI testing and layout configuration 2026-10-08 16:16:19 +02:00
Bluewhale1337 8b85b6ca57 refactor: replace standard UnitClass calls with HealBot_UnitClass helper function 2026-10-07 21:30:35 +02:00
Bluewhale1337 d222cd942c fix: update HoT Timers integration note to only reference Nampower 2026-10-05 00:02:17 +02:00
Bluewhale1337 b298ad7047 refactor: update HoT timer integration requirements to remove SuperWoW and ClassicAPI references 2026-10-04 23:58:17 +02:00
Bluewhale1337 94f8c2a843 Merge pull request #22 from Bluewhale1337/dev
Dev
2026-10-04 23:51:53 +02:00
Bluewhale1337 b3e18bfd64 docs: update README with HoT timer tracking details and changelog refinements 2026-10-04 23:49:30 +02:00
Bluewhale1337 6acfa36d8d docs: update README with recent HoT tracking, bug fixes, and performance improvements 2026-10-04 21:16:14 +02:00
Bluewhale1337 97df6c9a98 feat: add Nampower integration for player HoT timers display for active auras 2026-10-04 19:24:34 +02:00
Bluewhale1337 2a0d607bcd fix: improve performance and safety with null checks and talent rank caching 2026-10-04 17:54:00 +02:00
Bluewhale1337 526a4f1b9b docs: update README changelog with recent performance and bug fixes 2026-10-02 12:51:31 +02:00
Bluewhale1337 032c7571af perf: optimize spell and unit ID lookups with caching and fix range cache memory leaks 2026-10-02 12:17:29 +02:00
Bluewhale1337 f4ba0d983d feat: add /hb debug command for local chat logging 2026-10-02 11:02:45 +02:00
Bluewhale1337 62b93b74e2 fix: correct French translation for Mage 2026-10-02 10:42:02 +02:00
Bluewhale1337 820f23c3f2 perf: optimize performance by caching aura tooltips and range checks while reducing redundant layout updates 2026-10-02 08:48:26 +02:00
Bluewhale1337 59e3701d79 perf: pre-allocate raid unit tokens to optimize HealBot_FindUnitID performance 2026-10-01 22:27:41 +02:00
Bluewhale1337 ee11884976 Merge pull request #21 from Bluewhale1337/dev
Dev
2026-09-24 22:34:31 +02:00
Bluewhale1337 eb7cbc52f2 refactor: mark all unit buttons dirty instead of calling HealBot_Action_Refresh 2026-09-24 22:31:24 +02:00
Bluewhale1337 1edb4b22bb fix: correct BuffWatchSelf UI element lookup and document the fix in README 2026-09-24 21:38:19 +02:00
Bluewhale1337 5e33429dee feat: add support for group-wide healing spell tracking and communication 2026-09-16 11:10:55 +02:00
Bluewhale1337 55bc6f1ea0 Fix: optimize execution performance and memory usage via caching and table reuse 2026-09-16 10:24:33 +02:00
Bluewhale1337 7f4d4be827 Fix: add pooling to rest of the tables out there 2026-09-13 20:39:46 +02:00
Bluewhale1337 029235a733 Merge branch 'dev' of https://github.com/Bluewhale1337/HealBotBlue into dev 2026-09-13 20:10:11 +02:00
Bluewhale1337 7beff1c4ca Fix: expand table pooling across modules to reduce garbage collection 2026-09-13 20:09:46 +02:00
Bluewhale1337 4e8d5d8426 Merge pull request #20 from Bluewhale1337/dev
Dev
2026-09-13 12:58:54 +02:00
Bluewhale1337 b40135a386 Merge branch 'main' into dev
Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-09-13 12:58:40 +02:00
Bluewhale1337 27ba0a386e chore: bump version to 1.7.2 and update changelog 2026-09-12 13:32:13 +02:00
Bluewhale1337 4caaa85634 Merge branch 'main' of https://github.com/Bluewhale1337/HealBotBlue 2026-09-12 12:26:16 +02:00
Bluewhale1337 8894700b0a fix: return nil instead of index when excluding forms from unshifting 2026-09-12 12:26:13 +02:00
Bluewhale1337 50a64c5549 fix: return nil instead of index when excluding forms from unshifting 2026-09-12 12:25:49 +02:00
Bluewhale1337 2958bc8e94 Update README.md
removed accidently added dev branch changelog from main
2026-09-11 08:16:52 +02:00
Bluewhale1337 4486682568 Update README.md
More fixes of broken formating

Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-09-09 20:51:09 +02:00
Bluewhale1337 27231aaf99 Update README.md
Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-09-09 20:50:36 +02:00
Bluewhale1337 bcd497104f docs: reorder change log entries in README to follow reverse chronological versioning 2026-09-09 19:02:28 +02:00
Bluewhale1337 ee4f706338 Merge pull request #19 from Bluewhale1337/main
Migrating hotfixes from main to dev
2026-09-09 18:54:15 +02:00
Bluewhale1337 56b55f34ad Merge branch 'dev' into main
Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-09-09 18:53:27 +02:00
Bluewhale1337 135a8f6bcd fix: prevent incorrect druid unshifting from Tree of Life form and remove deprecated shapeshift event listeners 2026-09-09 18:43:50 +02:00
Bluewhale1337 7f5b1afe23 refactor: remove deprecated shapeshift form update logic and refine form detection criteria 2026-09-09 18:32:13 +02:00
Bluewhale1337 00a1ddf789 fix: prevent accidental unshifting while in Tree of Life or Healing Way forms 2026-09-09 17:32:38 +02:00
Bluewhale1337 74e940f41c fix: prevent shapeshift cancellation while in Tree of Life or Healing Way forms 2026-09-09 17:32:18 +02:00
Bluewhale1337 98b34f24b8 Fix: Exception for shapeshift queue to allow heals in tree form 2026-09-09 17:30:38 +02:00
Bluewhale1337 604a26dbb3 refactor: replace table.foreach with recursive deep copy functions for config defaults 2026-09-08 20:32:36 +02:00
Bluewhale1337 03114d4802 Merge pull request #18 from Bluewhale1337/main
refactor: simplify CDC monitor and emergency filter logic by updating…
2026-09-08 18:51:12 +02:00
Bluewhale1337 a0b6e2f72d refactor: simplify CDC monitor and emergency filter logic by updating configuration indices and cleaning up unused data structures 2026-09-07 23:45:46 +02:00
Bluewhale1337 7d910eadd2 refactor: implement table pooling and out-of-combat cleanup to reduce memory allocation overhead and garbage collection pressure 2026-09-06 23:22:43 +02:00
Bluewhale1337 1ef79cfcd1 Fix: implement table pooling for tables previously omitted and add garbage collection hooks to eliminate memory leaks and bloat 2026-09-06 23:22:33 +02:00
Bluewhale1337 1f9d3af81e refactor: update incoming heal tracking to support multiple targets and add resurrection event handling 2026-09-06 22:38:33 +02:00
Bluewhale1337 e9cfd2fcc7 Merge branch 'dev' of https://github.com/Bluewhale1337/HealBotBlue into dev 2026-09-06 22:20:30 +02:00
Bluewhale1337 7c45d85030 feature: implemented HealComm without using whole heavy library to sync for cross-addon compatibility while keeping legacy healbot protocol to sync with older versions also fix unit name regex parsing bugs 2026-09-06 22:20:26 +02:00
Bluewhale1337 92a4cb070a Merge pull request #17 from Bluewhale1337/main
Move .toc changes to dev
2026-09-06 19:59:35 +02:00
Bluewhale1337 2af99cbc2b Update HealBotBlue.toc
Updated #Notes section of .toc file

Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-09-06 19:58:39 +02:00
Bluewhale1337 ebb42f936a Fix: adjust raid icon anchor position to top of unit frames - they no longer hide behind player name 2026-09-06 15:34:04 +02:00
Bluewhale1337 04519b9631 Merge branch 'dev' of https://github.com/Bluewhale1337/HealBotBlue into dev 2026-09-06 11:55:27 +02:00
Bluewhale1337 3ebcecb8e6 fix: throttle debuff warnings to once per debuff type and increase detection range to 40 yards 2026-09-06 11:55:20 +02:00
35 changed files with 2733 additions and 1918 deletions
+49 -19
View File
@@ -103,6 +103,21 @@ function HealBot_SlashCmd(cmd)
HealBot_AddDebug( "Channel active" );
return;
end
if (cmd=="debug" or cmd=="dbg") then
if not HealBot_Config then return; end
if HealBot_Config.DebugMode == 1 then
HealBot_Config.DebugMode = 0;
if DEFAULT_CHAT_FRAME then
DEFAULT_CHAT_FRAME:AddMessage("|cFFFFD100HealBot|r: Debug mode |cFFFF0000DISABLED|r.");
end
else
HealBot_Config.DebugMode = 1;
if DEFAULT_CHAT_FRAME then
DEFAULT_CHAT_FRAME:AddMessage("|cFFFFD100HealBot|r: Debug mode |cFF00FF00ENABLED|r.");
end
end
return;
end
end
-- HealBot_SendAddonMessage moved to HealBot_Controller_Comms.lua
@@ -222,27 +237,42 @@ end
-- SpiBonus and GetBonus functions moved to HealBot_Controller_Spells.lua
local HealBot_RaidUnitTokens = {}
for i=1, 40 do HealBot_RaidUnitTokens[i] = "raid"..i end
HealBot_NameToUnitID = {}
function HealBot_UpdateUnitIDCache()
HealBot_NameToUnitID = {}
local name = UnitName("player")
if name then HealBot_NameToUnitID[name] = "player" end
for i=1, 4 do
local unit = "party"..i
name = UnitName(unit)
if name then HealBot_NameToUnitID[name] = unit end
unit = "partypet"..i
name = UnitName(unit)
if name then HealBot_NameToUnitID[name] = unit end
end
local petName = UnitName("pet")
if petName then HealBot_NameToUnitID[petName] = "pet" end
for i=1, 40 do
local unit = "raid"..i
name = UnitName(unit)
if name then HealBot_NameToUnitID[name] = unit end
unit = "raidpet"..i
name = UnitName(unit)
if name then HealBot_NameToUnitID[name] = unit end
end
end
-- HealBot_FindUnitID: Finds a unit token for a given player name.
function HealBot_FindUnitID(unitname)
local text;
for _,unit in ipairs(HealBot_Action_HealGroup) do
text = UnitName(unit);
if text then
if text==unitname then
return unit;
end
end
end
for i=1,40 do
local unit = "raid"..i;
text = UnitName(unit);
if text then
if text==unitname then
return unit;
end
end
end
return nil;
if not unitname then return nil end
return HealBot_NameToUnitID[unitname]
end
-- HealBot_PlaySound: Plays an audio alert based on ID.
+2 -2
View File
@@ -1,8 +1,8 @@
## Interface: 11200
## Title: HealBotBlue
## Version: 1.7.0
## Version: 1.7.5
## Author: Bluewhale
## Notes: Adds panel with skinable bars for healing and decursive
## Notes: Raidframe replacement for healing, decursing, resource tracking and buffing with optional support for SuperWow, ClassicAPI, UnitXP_SP3 and Nampower.
## SavedVariablesPerCharacter: HealBot_Config
..\..\FrameXML\Fonts.xml
..\..\FrameXML\OptionsFrameTemplates.xml
+8 -2
View File
@@ -7,6 +7,7 @@ end
-- HealBot_MayHeal: Checks if unit is eligible for healing UI.
function HealBot_MayHeal(unit)
if string.find(unit, "^Test") then return true end
if not UnitName(unit) or not HealBot_Heals[unit] then return false end
if unit ~= 'target' then return true end
if not HealBot_Config.TargetHeals or UnitCanAttack("player",unit) then return false end
@@ -20,6 +21,7 @@ function HealBot_ShouldHeal(unit)
return true;
end
end
if string.find(unit, "^Test") then return true end
return HealBot_MayHeal(unit) and UnitHealth(unit)>0 and not UnitIsDeadOrGhost(unit)
and (UnitHealth(unit)<UnitHealthMax(unit)*HealBot_Config.AlertLevel or HealBot_AlwaysHeal());
end
@@ -33,6 +35,7 @@ end
-- HealBot_MustHeal: Internal utility: HealBot_MustHeal
function HealBot_MustHeal(unit)
if string.find(unit, "^Test") then return true end
return HealBot_ShouldHeal(unit) and UnitHealth(unit)<UnitHealthMax(unit)*HealBot_Config.AlertLevel
end
@@ -56,6 +59,7 @@ end
-- HealBot_CanHeal: Internal utility: HealBot_CanHeal
function HealBot_CanHeal(unit)
if string.find(unit, "^Test") then return true end
if UnitIsDeadOrGhost(unit) then
local rezSpell = HealBot_GetRezSpellForClass();
if rezSpell and HealBot_GetHealSpell(unit, rezSpell) then
@@ -136,9 +140,10 @@ end
-- HealBot_SplitString: Internal utility: HealBot_SplitString
function HealBot_SplitString(str, delimiter)
local result = {}
local result = HealBot_GetTable()
if not delimiter or delimiter == "" then
return {str}
table.insert(result, str)
return result
end
local start_pos = 1
while true do
@@ -160,6 +165,7 @@ function HealBot_RunMacroText(body)
ChatFrameEditBox:SetText(commands[i])
ChatEdit_SendText(ChatFrameEditBox)
end
HealBot_ReleaseTable(commands)
end
-- HealBot_RunMacro: Internal utility: HealBot_RunMacro
+1 -1
View File
@@ -50,7 +50,7 @@
<Texture name="$parentRaidIcon" file="Interface\TargetingFrame\UI-RaidTargetingIcons" hidden="true">
<Size><AbsDimension x="14" y="14"/></Size>
<Anchors>
<Anchor point="CENTER">
<Anchor point="TOP">
<Offset><AbsDimension x="0" y="0"/></Offset>
</Anchor>
</Anchors>
+5 -1
View File
@@ -77,7 +77,11 @@ function HealBot_BonusScanner:ScanEquipment()
HealBot_BonusTooltip:SetOwner(HealBot_BonusTooltip, "ANCHOR_NONE");
HealBot_BonusScanner.temp.bonuses = 0;
HealBot_BonusScanner.temp.sets = {};
if not HealBot_BonusScanner.temp.sets then
HealBot_BonusScanner.temp.sets = {}
else
for k in pairs(HealBot_BonusScanner.temp.sets) do HealBot_BonusScanner.temp.sets[k] = nil end
end
HealBot_BonusScanner.temp.set = "";
for i, slotname in HealBot_BonusScanner.slots do
slotid, _ = GetInventorySlotInfo(slotname.. "Slot");
+69 -16
View File
@@ -6,6 +6,7 @@ local StaticHasBuff = {}
-- HealBot_UnitAffected: Checks if a specific buff/debuff exists on a unit.
function HealBot_UnitAffected(unit, effect)
if string.find(unit, "^Test") then return nil; end
if not effect then return nil; end
local i = 1
while true do
@@ -41,6 +42,7 @@ function HealBot_CheckShamanWeaponBuff(spellName)
if not firstWord then return false end
HealBot_ScanTooltip:SetOwner(UIParent, "ANCHOR_NONE")
if not HealBot_ScanTooltip_Lines then HealBot_ScanTooltip_Lines = {} end
local slots = HealBot_GetTable()
if hasMainHandEnchant then table.insert(slots, 16) end
if hasOffHandEnchant then table.insert(slots, 17) end
@@ -49,7 +51,11 @@ function HealBot_CheckShamanWeaponBuff(spellName)
HealBot_ScanTooltip:ClearLines()
HealBot_ScanTooltip:SetInventoryItem("player", slot)
for i = 1, HealBot_ScanTooltip:NumLines() do
local textObj = getglobal("HealBot_ScanTooltipTextLeft" .. i)
local textObj = HealBot_ScanTooltip_Lines[i]
if not textObj then
textObj = getglobal("HealBot_ScanTooltipTextLeft" .. i)
HealBot_ScanTooltip_Lines[i] = textObj
end
if textObj then
local text = textObj:GetText()
if text and string.find(text, firstWord) then
@@ -68,6 +74,7 @@ end
-- HealBot_CheckBuffs: Scans unit for missing tracked buffs.
function HealBot_CheckBuffs(unit)
if string.find(unit, "^Test") then return end
if HealBot_Config.BuffWatch ~= 1 then
HealBot_MissingBuffs[unit] = nil
return
@@ -102,13 +109,25 @@ function HealBot_CheckBuffs(unit)
hasBuff[k] = nil
end
local i = 1
if not HealBot_TextureToName then HealBot_TextureToName = {} end
while true do
local buffTexture = UnitBuff(unit, i)
if not buffTexture then break end
HealBot_ScanTooltip:SetOwner(UIParent, "ANCHOR_NONE")
HealBot_ScanTooltip:ClearLines()
HealBot_ScanTooltip:SetUnitBuff(unit, i)
local buffName = HealBot_ScanTooltipTextLeft1:GetText()
local buffName = HealBot_TextureToName[buffTexture]
if buffName == nil then
HealBot_ScanTooltip:SetOwner(UIParent, "ANCHOR_NONE")
HealBot_ScanTooltip:ClearLines()
HealBot_ScanTooltip:SetUnitBuff(unit, i)
local textObj = HealBot_ScanTooltipTextLeft1
if textObj then
buffName = textObj:GetText()
end
if buffName then
HealBot_TextureToName[buffTexture] = buffName
end
end
if buffName then
hasBuff[buffName] = true
end
@@ -159,9 +178,11 @@ local HealBot_TrackedHoTs = {
}
local HealBot_DebuffTypeMap = nil
local HealBot_AuraWarningPlayed = {}
-- HealBot_OnEvent_UnitAura: Updates debuff lists and icon textures on aura change.
function HealBot_OnEvent_UnitAura(this, unit)
if string.find(unit, "^Test") then return end
if not HealBot_DebuffTypeMap then
HealBot_DebuffTypeMap = {
[HEALBOT_DISEASE] = HEALBOT_DISEASE_en,
@@ -183,7 +204,7 @@ function HealBot_OnEvent_UnitAura(this, unit)
local iconCount = 0
local i = 1;
HealBot_UnitDebuff[unit] = nil;
local trackedTextures = {}
local trackedTextures = HealBot_GetTable()
while true do
local debuff, tmp, debuff_type = UnitDebuff(unit, i, 1)
@@ -254,9 +275,11 @@ function HealBot_OnEvent_UnitAura(this, unit)
end
local b = 1
local activeBuffs = HealBot_GetTable()
while true do
local buff = UnitBuff(unit, b)
if not buff then break end
activeBuffs[buff] = true
if HealBot_TrackedHoTs[buff] and iconCount < 10 then
iconCount = iconCount + 1
HealBot_UnitIcons[unit][iconCount] = buff
@@ -264,6 +287,30 @@ function HealBot_OnEvent_UnitAura(this, unit)
b = b + 1
end
if HealBot_Integrations_Nampower_Active and HealBot_Nampower_Auras then
local guid = HealBot_GetUnitGUID and HealBot_GetUnitGUID(unit)
if guid then
if not HealBot_Nampower_NameCache then HealBot_Nampower_NameCache = HealBot_GetTable() end
HealBot_Nampower_NameCache[guid] = UnitName(unit)
if HealBot_Nampower_Auras[guid] then
local validHoTs = {
["Renew"] = "Interface\\Icons\\Spell_Holy_Renew",
["Rejuvenation"] = "Interface\\Icons\\Spell_Nature_Rejuvenation",
["Regrowth"] = "Interface\\Icons\\Spell_Nature_ResistNature",
["Power Word: Shield"] = "Interface\\Icons\\Spell_Holy_PowerWordShield",
}
for spellName, _ in pairs(HealBot_Nampower_Auras[guid]) do
local tex = validHoTs[spellName]
if tex and not activeBuffs[tex] then
HealBot_Nampower_Auras[guid][spellName] = nil
end
end
end
end
end
HealBot_ReleaseTable(activeBuffs)
local d = 1
while true do
local debuff = UnitDebuff(unit, d)
@@ -276,24 +323,30 @@ function HealBot_OnEvent_UnitAura(this, unit)
end
if HealBot_UnitDebuff[unit] then
if DebuffType and HealBot_Range_Check(unit, 27) == 1 then
if HealBot_Config.ShowDebuffWarning == 1 then
local color = HealBot_Config.CDCBarColour[DebuffType]
local r, g, b = 1, 0, 0
if color then
r, g, b = color.R, color.G, color.B
if DebuffType and HealBot_Range_Check(unit, 40) == 1 then
if HealBot_AuraWarningPlayed[unit] ~= DebuffType then
HealBot_AuraWarningPlayed[unit] = DebuffType
if HealBot_Config.ShowDebuffWarning == 1 then
local color = HealBot_Config.CDCBarColour[DebuffType]
local r, g, b = 1, 0, 0
if color then
r, g, b = color.R, color.G, color.B
end
UIErrorsFrame:AddMessage(UnitName(unit) .. " suffers from " .. DebuffType,
r, g, b,
1, UIERRORS_HOLD_TIME);
end
UIErrorsFrame:AddMessage(UnitName(unit) .. " suffers from " .. DebuffType,
r, g, b,
1, UIERRORS_HOLD_TIME);
if HealBot_Config.SoundDebuffWarning == 1 then HealBot_PlaySound(HealBot_Config.SoundDebuffPlay); end
end
if HealBot_Config.SoundDebuffWarning == 1 then HealBot_PlaySound(HealBot_Config.SoundDebuffPlay); end
end
else
HealBot_AuraWarningPlayed[unit] = nil
end
-- Check buffs synchronously because tooltip scanning fails in OnUpdate
HealBot_CheckBuffs(unit)
-- Defer UI updates
HealBot_View_DirtyUnits[unit] = true
HealBot_ReleaseTable(trackedTextures)
end
end
+118 -17
View File
@@ -30,8 +30,15 @@ function HealBot_AddChat(msg)
end
end
-- HealBot_AddDebug: Prints debug messages to internal chat channel.
-- HealBot_AddDebug: Prints debug messages to chat or internal debug channel.
function HealBot_AddDebug(msg)
if HealBot_Config and HealBot_Config.DebugMode == 1 then
if DEFAULT_CHAT_FRAME then
DEFAULT_CHAT_FRAME:AddMessage("|cFFFFD100[HB Debug]|r " .. msg);
end
return;
end
local chanid = HealBot_Get_DebugChan();
if chanid and HealBot_SpamCnt < 3 then
HealBot_SpamCnt = HealBot_SpamCnt + 1;
@@ -71,33 +78,127 @@ function HealBot_SendAddonMessage(prefix, text)
end
end
-- HealBot_OnEvent_AddonMsg: Parses incoming heal data from other clients.
function HealBot_OnEvent_AddonMsg(this, addon_id, inc_msg, dist_target, sender_id)
if addon_id == HEALBOT_ADDON_ID then
local tmpTest, unitname, heal_val
tmpTest, tmpTest, unitname, heal_val = string.find(inc_msg, ">> (%a+) <<=>> (.%d+) <<" );
if heal_val then
if sender_id == UnitName("player") then return end
if not HealBot_HealsIn[unitname] then
HealBot_HealsIn[unitname] = 0;
if not HealBot_IncomingHealers then HealBot_IncomingHealers = {} end
-- Reusable global array for gfind string splitting
if not HealBot_Comms_Args then HealBot_Comms_Args = {} end
local function ClearIncomingHeal(sender)
local data = HealBot_IncomingHealers[sender]
if not data then return end
local oldAmount = data.amount
for i=1, 5 do
local oldTarget = data.targets[i]
if oldTarget then
if HealBot_HealsIn[oldTarget] then
HealBot_HealsIn[oldTarget] = HealBot_HealsIn[oldTarget] - oldAmount
if HealBot_HealsIn[oldTarget] < 0 then HealBot_HealsIn[oldTarget] = 0 end
HealBot_RecalcHeals(HealBot_FindUnitID(oldTarget))
end
HealBot_Healers[sender_id] = ">> " .. unitname .. " <<=>> " .. heal_val .. " <<";
HealBot_HealsIn[unitname] = HealBot_HealsIn[unitname] + tonumber(heal_val);
if tonumber(heal_val) > 0 then
HealBot_RecalcHeals(HealBot_FindUnitID(unitname))
elseif HealBot_HealsIn[unitname] < 0 then
HealBot_HealsIn[unitname] = 0;
data.targets[i] = nil
end
end
data.amount = 0
end
local function SetIncomingHeal(sender, amount, protocol, t1, t2, t3, t4, t5)
-- prioritize HealComm over HealBot protocol to avoid double-counting
if HealBot_IncomingHealers[sender] and HealBot_IncomingHealers[sender].protocol == "HealComm" and protocol == "HealBot" then
return
end
if not HealBot_IncomingHealers[sender] then
HealBot_IncomingHealers[sender] = { targets = {}, amount = 0, protocol = protocol }
end
ClearIncomingHeal(sender)
local data = HealBot_IncomingHealers[sender]
data.protocol = protocol
if amount > 0 and t1 then
data.amount = amount
data.targets[1] = t1
data.targets[2] = t2
data.targets[3] = t3
data.targets[4] = t4
data.targets[5] = t5
for i=1, 5 do
local target = data.targets[i]
if target then
if not HealBot_HealsIn[target] then HealBot_HealsIn[target] = 0 end
HealBot_HealsIn[target] = HealBot_HealsIn[target] + amount
HealBot_RecalcHeals(HealBot_FindUnitID(target))
end
end
end
end
-- HealBot_OnEvent_AddonMsg: Parses incoming heal data from other clients.
function HealBot_OnEvent_AddonMsg(this, addon_id, inc_msg, dist_target, sender_id)
if sender_id == UnitName("player") then return end
if addon_id == "HealComm" then
-- Clear reusable args array
for i=1, 10 do HealBot_Comms_Args[i] = nil end
local argCount = 0
local start_pos = 1
local next_pos = string.find(inc_msg, "/", start_pos, true)
while next_pos do
argCount = argCount + 1
HealBot_Comms_Args[argCount] = string.sub(inc_msg, start_pos, next_pos - 1)
start_pos = next_pos + 1
next_pos = string.find(inc_msg, "/", start_pos, true)
end
if start_pos <= string.len(inc_msg) then
argCount = argCount + 1
HealBot_Comms_Args[argCount] = string.sub(inc_msg, start_pos)
end
local cmd = HealBot_Comms_Args[1]
if cmd == "Heal" and HealBot_Comms_Args[2] and HealBot_Comms_Args[3] then
SetIncomingHeal(sender_id, tonumber(HealBot_Comms_Args[3]) or 0, "HealComm", HealBot_Comms_Args[2])
elseif cmd == "Healstop" then
SetIncomingHeal(sender_id, 0, "HealComm")
elseif cmd == "GrpHeal" and HealBot_Comms_Args[2] then
SetIncomingHeal(sender_id, tonumber(HealBot_Comms_Args[2]) or 0, "HealComm", HealBot_Comms_Args[4], HealBot_Comms_Args[5], HealBot_Comms_Args[6], HealBot_Comms_Args[7], HealBot_Comms_Args[8])
elseif cmd == "GrpHealstop" then
SetIncomingHeal(sender_id, 0, "HealComm")
elseif cmd == "Resurrection" then
if HealBot_Comms_Args[2] == "stop" then
HealBot_AddDebug(sender_id .. " Stopped ressing");
for unit, resser in pairs(HealBot_Ressing) do
if resser == sender_id then
HealBot_Ressing[unit] = nil;
HealBot_RecalcHeals(HealBot_FindUnitID(unit));
end
end
elseif HealBot_Comms_Args[2] and HealBot_Comms_Args[3] == "start" then
HealBot_AddDebug(sender_id .. " is ressing " .. HealBot_Comms_Args[2]);
HealBot_Ressing[HealBot_Comms_Args[2]] = sender_id;
HealBot_RecalcHeals(HealBot_FindUnitID(HealBot_Comms_Args[2]));
end
end
elseif addon_id == HEALBOT_ADDON_ID then
local tmpTest, tmpTest, unitname, heal_val = string.find(inc_msg, ">> (.-) <<=>> (.-) <<" );
if heal_val and unitname then
local amount = tonumber(heal_val) or 0
if amount < 0 then amount = 0 end -- HealBot sends negative to cancel
SetIncomingHeal(sender_id, amount, "HealBot", unitname)
end
elseif addon_id == "HealBot" then
local tmpTest, datatype, datamsg, sender
local PName = UnitName("player");
tmpTest, tmpTest, datatype, sender, datamsg = string.find(inc_msg, ">> (%a+) <<=>> (%a+) <<=>> (.+)");
tmpTest, tmpTest, datatype, sender, datamsg = string.find(inc_msg, ">> (.-) <<=>> (.-) <<=>> (.+)");
if datatype == "RequestVersion" then
HealBot_SendAddonMessage("HealBot", ">> SendVersion <<=>> " .. sender .. " <<=>> Version=" .. HEALBOT_VERSION);
elseif datatype == "SendVersion" and PName == sender then
HealBot_AddChat(sender_id .. ": " .. datamsg);
end
elseif addon_id == "CTRA" then
if ( string.sub(inc_msg, 1, 3) == "RES" ) then
if ( inc_msg == "RESNO" ) then
+43 -35
View File
@@ -3,6 +3,8 @@
HealBot_View_DirtyUnits = {}
HealBot_View_DirtyPower = {}
local unitsToRefresh = {}
local powerToRefresh = {}
local HealBot_Timer1, HealsIn_Timer = 0, 0;
HealBot_LastModState = ""
@@ -67,11 +69,11 @@ function HealBot_OnUpdate(this, arg1)
local pending = HealBot_TargetRestorePending;
HealBot_TargetRestorePending = nil;
HealBot_TargetRestoreTimer = 0;
if pending.type == "enemy" then
if pending == "enemy" then
TargetLastEnemy();
elseif pending.type == "friend" then
elseif pending == "friend" then
TargetLastTarget();
elseif pending.type == "clear" then
elseif pending == "clear" then
ClearTarget();
end
end
@@ -110,11 +112,11 @@ function HealBot_OnUpdate(this, arg1)
-- Restore target logic
if pendingCast.targetEnemy then
HealBot_TargetRestorePending = { type = "enemy" }
HealBot_TargetRestorePending = "enemy"
elseif pendingCast.oldTarget and pendingCast.oldTarget ~= UnitName(pendingCast.target) then
HealBot_TargetRestorePending = { type = "friend" }
HealBot_TargetRestorePending = "friend"
elseif not pendingCast.oldTarget then
HealBot_TargetRestorePending = { type = "clear" }
HealBot_TargetRestorePending = "clear"
end
HealBot_TargetRestoreTimer = 0
end
@@ -152,7 +154,7 @@ function HealBot_OnUpdate(this, arg1)
end
-- Process Dirty Queue for MVC View
local unitsToRefresh = {}
for k in pairs(unitsToRefresh) do unitsToRefresh[k] = nil end
for unitID in pairs(HealBot_View_DirtyUnits) do
unitsToRefresh[unitID] = true
HealBot_View_DirtyUnits[unitID] = nil
@@ -162,7 +164,7 @@ function HealBot_OnUpdate(this, arg1)
HealBot_Action_Refresh(unitID)
end
local powerToRefresh = {}
for k in pairs(powerToRefresh) do powerToRefresh[k] = nil end
for unitID in pairs(HealBot_View_DirtyPower) do
powerToRefresh[unitID] = true
HealBot_View_DirtyPower[unitID] = nil
@@ -171,13 +173,6 @@ function HealBot_OnUpdate(this, arg1)
HealBot_Action_RefreshPower(unitID)
end
local powerID, _ = next(HealBot_View_DirtyPower)
while powerID do
HealBot_Action_RefreshPower(powerID)
HealBot_View_DirtyPower[powerID] = nil
powerID, _ = next(HealBot_View_DirtyPower)
end
if HealBot_EquipChangeTimer > 0 then
HealBot_EquipChangeTimer = HealBot_EquipChangeTimer - arg1
if HealBot_EquipChangeTimer <= 0 then
@@ -187,6 +182,16 @@ function HealBot_OnUpdate(this, arg1)
HealBot_RecalcSpells();
end
end
if HealBot_Config.HealBot_Integrations_ShowHoTTimers == 1 then
if not HealBot_HoT_Update_Timer or GetTime() >= HealBot_HoT_Update_Timer then
HealBot_HoT_Update_Timer = GetTime() + 0.25
if HealBot_Action_UpdatePlayerHoTs then
HealBot_Action_UpdatePlayerHoTs()
end
end
elseif HealBot_PlayerHoTsListFrame and HealBot_PlayerHoTsListFrame:IsVisible() then
HealBot_PlayerHoTsListFrame:Hide()
end
HealBot_Timer1 = HealBot_Timer1 + arg1;
if HealBot_Timer1 >= 2.5 then
@@ -298,9 +303,6 @@ local HealBot_EventHandlers = {
["PLAYER_ENTERING_WORLD"] = function(this)
HealBot_Model:RefreshUnit("player")
HealBot_Model:RefreshUnit("pet")
if HealBot_UnitClass("player") == "DRUID" then
HealBot_UpdateShapeshiftForm()
end
HealBot_OnEvent_PlayerEnteringWorld(this)
end,
["VARIABLES_LOADED"] = function(this)
@@ -329,9 +331,7 @@ local HealBot_EventHandlers = {
HealBot_OnEvent_PlayerEquipmentChanged2(this, arg1)
end,
["UNIT_PET"] = function(this, arg1) HealBot_OnEvent_PartyMembersChanged(this) end,
["SPELLS_CHANGED"] = function(this, arg1) HealBot_OnEvent_SpellsChanged(this, arg1) end,
["UPDATE_SHAPESHIFT_FORM"] = function(this) HealBot_UpdateShapeshiftForm() end,
["UPDATE_SHAPESHIFT_FORMS"] = function(this) HealBot_UpdateShapeshiftForm() end
["SPELLS_CHANGED"] = function(this, arg1) HealBot_OnEvent_SpellsChanged(this, arg1) end
}
-- HealBot_OnEvent: Event dispatcher for WoW UI events.
@@ -348,18 +348,19 @@ end
function HealBot_OnEvent_VariablesLoaded(this)
local class = HealBot_UnitClass("player")
table.foreach(HealBot_ConfigDefaults, function (key, val)
if not HealBot_Config[key] then
HealBot_Config[key] = val;
end
if type(val) == "table" and type(HealBot_Config[key]) == "table" then
for k, v in pairs(val) do
if HealBot_Config[key][k] == nil then
HealBot_Config[key][k] = v
local function DeepCopyMissing(src, dest)
for k, v in pairs(src) do
if type(v) == "table" then
if type(dest[k]) ~= "table" then dest[k] = {} end
DeepCopyMissing(v, dest[k])
else
if dest[k] == nil then
dest[k] = v
end
end
end
end);
end
DeepCopyMissing(HealBot_ConfigDefaults, HealBot_Config)
local foundModern = false
if HealBot_Config.Skins then
@@ -420,11 +421,6 @@ function HealBot_OnEvent_VariablesLoaded(this)
this:RegisterEvent("CHAT_MSG_ADDON");
this:RegisterEvent("CHAT_MSG_SYSTEM");
this:RegisterEvent("PLAYER_ENTERING_WORLD");
if class == "DRUID" then
this:RegisterEvent("UPDATE_SHAPESHIFT_FORM");
this:RegisterEvent("UPDATE_SHAPESHIFT_FORMS");
HealBot_UpdateShapeshiftForm();
end
HealBot_SpellsInitFlag = 2;
end
end
@@ -490,6 +486,14 @@ end
function HealBot_OnEvent_PlayerRegenEnabled(this)
HealBot_IsFighting = false;
HealBot_Delay_RecalcParty = 1;
if HealBot_IncomingHealers then
for sender, data in pairs(HealBot_IncomingHealers) do
if not HealBot_FindUnitID(sender) then
HealBot_IncomingHealers[sender] = nil
end
end
end
end
-- HealBot_OnEvent_PlayerTargetChanged: Internal utility: HealBot_OnEvent_PlayerTargetChanged
@@ -504,6 +508,7 @@ end
function HealBot_OnEvent_PartyMembersChanged(this)
HealBot_Model:PreserveStateByGUID()
HealBot_Integrations_PruneNampower()
if HealBot_UpdateUnitIDCache then HealBot_UpdateUnitIDCache() end
if HealBot_IsFighting then
HealBot_Action_PartyChanged()
end
@@ -563,12 +568,14 @@ end
function HealBot_OnEvent_SpellsChanged(this, arg1)
if arg1 then return; end
HealBot_AddDebug("HB: SpellsChanged");
if HealBot_CacheSpellIDs then HealBot_CacheSpellIDs() end
HealBot_SpellsInitFlag = 2;
end
-- HealBot_OnEvent_TalentsChanged: Internal utility: HealBot_OnEvent_TalentsChanged
function HealBot_OnEvent_TalentsChanged(this, arg1)
HealBot_AddDebug("HB: TalentsChanged");
if HealBot_UpdateTalentRanks then HealBot_UpdateTalentRanks() end
end
-- HealBot_OnEvent_PlayerEnteringWorld: Internal utility: HealBot_OnEvent_PlayerEnteringWorld
@@ -578,6 +585,7 @@ function HealBot_OnEvent_PlayerEnteringWorld(this)
if HealBot_ApplyRefreshHook then
HealBot_ApplyRefreshHook()
end
if HealBot_UpdateUnitIDCache then HealBot_UpdateUnitIDCache() end
end
-- HealBot_OnEvent_SpellcastStart: Internal utility: HealBot_OnEvent_SpellcastStart
+22 -1
View File
@@ -8,13 +8,32 @@ function HealBot_ResetRangeScale()
_scale = 0
end
local _rangeCache = {}
local _lastFrameTime = 0
-- HealBot_Range_Check: Checks if unit is in range via map distance or API.
function HealBot_Range_Check(unit, range)
local currentTime = GetTime()
if _lastFrameTime ~= currentTime then
for r, cacheTable in pairs(_rangeCache) do
for u in pairs(cacheTable) do
cacheTable[u] = nil
end
end
_lastFrameTime = currentTime
end
local return_val = 0;
if not range then
range = 40;
end
if ( unit == "player" ) then
_rangeCache[range] = _rangeCache[range] or {}
if _rangeCache[range][unit] ~= nil then
return _rangeCache[range][unit]
end
if ( unit == "player" or string.find(unit, "^Test") ) then
return_val = 1;
elseif HealBot_Integrations_ClassicAPI_Active and UnitDistanceSquared and UnitInLineOfSight then
local inSight = UnitInLineOfSight("player", unit)
@@ -56,5 +75,7 @@ function HealBot_Range_Check(unit, range)
end
end
end
_rangeCache[range][unit] = return_val
return return_val;
end
+163 -73
View File
@@ -3,6 +3,7 @@
HealBot_CastingSpell = nil;
HealBot_CastingTarget = nil;
HealBot_CastingGroupMembers = nil;
HealBot_TargetRestorePending = nil;
HealBot_TargetRestoreTimer = 0;
@@ -33,28 +34,27 @@ function HealBot_GetSpellName(id)
return spellName .. " (" .. subSpellName .. ")";
end
HealBot_SpellNameToId = {}
function HealBot_CacheSpellIDs()
HealBot_SpellNameToId = {}
local id = 1
while true do
local spellName, subSpellName = GetSpellName(id, BOOKTYPE_SPELL)
if not spellName then break end
if subSpellName and subSpellName ~= "" then
HealBot_SpellNameToId[spellName .. " (" .. subSpellName .. ")"] = id
HealBot_SpellNameToId[spellName .. "(" .. subSpellName .. ")"] = id
end
HealBot_SpellNameToId[spellName] = id
id = id + 1
end
end
-- HealBot_GetSpellId: Internal utility: HealBot_GetSpellId
function HealBot_GetSpellId(spell)
local id, idd = 1, 0;
while true do
local spellName, subSpellName = GetSpellName(id, BOOKTYPE_SPELL);
if (spellName) then
if (spell == spellName .. " (" .. subSpellName .. ")") or (spell == spellName .. "(" .. subSpellName .. ")") then
return id;
end
if (spell == spellName) then
idd = id;
end
else
break
end
id = id + 1;
end
if idd > 0 then
return idd
else
return nil;
end
if not spell then return nil end
return HealBot_SpellNameToId[spell]
end
-- HealBot_CastSpellByName: Internal utility: HealBot_CastSpellByName
@@ -158,12 +158,52 @@ function HealBot_Process_HealValue(spell, target)
end
local uname = UnitName(target)
if uname then
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. uname .. " <<=>> " .. HealBot_HealValue .. " << ");
if not HealBot_HealsIn[uname] then
HealBot_HealsIn[uname] = 0;
if not HealBot_CastingGroupMembers then HealBot_CastingGroupMembers = {} end
for i=1, table.getn(HealBot_CastingGroupMembers) do HealBot_CastingGroupMembers[i] = nil end
table.setn(HealBot_CastingGroupMembers, 0)
if HEALBOT_PRAYER_OF_HEALING and string.find(spell, HEALBOT_PRAYER_OF_HEALING) then
if GetNumRaidMembers() > 0 then
local targetGroup = 0
for i = 1, GetNumRaidMembers() do
local name, _, subgroup = GetRaidRosterInfo(i)
if name == uname then targetGroup = subgroup; break; end
end
if targetGroup > 0 then
for i = 1, GetNumRaidMembers() do
local name, _, subgroup = GetRaidRosterInfo(i)
if subgroup == targetGroup and name then table.insert(HealBot_CastingGroupMembers, name); end
end
end
else
table.insert(HealBot_CastingGroupMembers, UnitName("player"))
for i = 1, GetNumPartyMembers() do
if UnitName("party"..i) then table.insert(HealBot_CastingGroupMembers, UnitName("party"..i)); end
end
end
end
if table.getn(HealBot_CastingGroupMembers) == 0 then
table.insert(HealBot_CastingGroupMembers, uname)
end
if table.getn(HealBot_CastingGroupMembers) > 1 then
local commsStr = "GrpHeal/" .. HealBot_HealValue .. "/1500/"
for _, memberName in ipairs(HealBot_CastingGroupMembers) do
commsStr = commsStr .. memberName .. "/"
end
HealBot_SendAddonMessage("HealComm", commsStr)
for _, memberName in ipairs(HealBot_CastingGroupMembers) do
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. memberName .. " <<=>> " .. HealBot_HealValue .. " << ")
if not HealBot_HealsIn[memberName] then HealBot_HealsIn[memberName] = 0 end
HealBot_HealsIn[memberName] = HealBot_HealsIn[memberName] + HealBot_HealValue
HealBot_RecalcHeals(HealBot_FindUnitID(memberName))
end
else
HealBot_SendAddonMessage("HealComm", "Heal/" .. uname .. "/" .. HealBot_HealValue .. "/1500/")
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. uname .. " <<=>> " .. HealBot_HealValue .. " << ")
if not HealBot_HealsIn[uname] then HealBot_HealsIn[uname] = 0 end
HealBot_HealsIn[uname] = HealBot_HealsIn[uname] + HealBot_HealValue
HealBot_RecalcHeals(HealBot_FindUnitID(uname))
end
HealBot_HealsIn[uname] = HealBot_HealsIn[uname] + HealBot_HealValue;
HealBot_RecalcHeals(HealBot_FindUnitID(uname));
end
end
end
@@ -171,18 +211,6 @@ end
-- HealBot_StartCasting: Initiates spell cast and broadcasts incoming heal.
function HealBot_StartCasting(spell, target, ttype)
HealBot_CastFailed = false;
-- Extract base spell for internal tracking
local baseSpell = spell
local parenIndex = string.find(spell, " %(")
if parenIndex then
baseSpell = string.sub(spell, 1, parenIndex - 1)
else
parenIndex = string.find(spell, "%(")
if parenIndex then
baseSpell = string.sub(spell, 1, parenIndex - 1)
end
end
HealBot_CastSpellByName(spell);
if ( SpellCanTargetUnit(target) ) then
@@ -197,11 +225,11 @@ function HealBot_StartCasting(spell, target, ttype)
end
end
if ttype == "fired" and HealBot_Spells[baseSpell] then
if ttype == "fired" and HealBot_Spells[spell] then
if not HealBot_CastFailed then
HealBot_CastingSpell = baseSpell;
HealBot_CastingSpell = spell;
HealBot_CastingTarget = target;
HealBot_Process_HealValue(baseSpell, target);
HealBot_Process_HealValue(spell, target);
HealBot_AnnounceCast(spell, target);
end
end
@@ -216,13 +244,24 @@ function HealBot_StopCasting()
if HealBot_HealValue > 0 then
local uname = UnitName(HealBot_CastingTarget)
if uname then
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. uname .. " <<=>> " .. 0 - HealBot_HealValue .. " << ");
if HealBot_HealsIn[uname] then
HealBot_HealsIn[uname] = HealBot_HealsIn[uname] - HealBot_HealValue;
if HealBot_HealsIn[uname] < 0 then
HealBot_HealsIn[uname] = 0;
end
HealBot_RecalcHeals(HealBot_FindUnitID(uname));
if HealBot_CastingGroupMembers and table.getn(HealBot_CastingGroupMembers) > 1 then
HealBot_SendAddonMessage("HealComm", "GrpHealstop");
for _, memberName in ipairs(HealBot_CastingGroupMembers) do
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. memberName .. " <<=>> " .. 0 - HealBot_HealValue .. " << ")
if HealBot_HealsIn[memberName] then
HealBot_HealsIn[memberName] = HealBot_HealsIn[memberName] - HealBot_HealValue;
if HealBot_HealsIn[memberName] < 0 then HealBot_HealsIn[memberName] = 0; end
HealBot_RecalcHeals(HealBot_FindUnitID(memberName));
end
end
else
HealBot_SendAddonMessage("HealComm", "Healstop");
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. uname .. " <<=>> " .. 0 - HealBot_HealValue .. " << ");
if HealBot_HealsIn[uname] then
HealBot_HealsIn[uname] = HealBot_HealsIn[uname] - HealBot_HealValue;
if HealBot_HealsIn[uname] < 0 then HealBot_HealsIn[uname] = 0; end
HealBot_RecalcHeals(HealBot_FindUnitID(uname));
end
end
end
HealBot_HealValue = 0;
@@ -235,7 +274,7 @@ function HealBot_StopCasting()
local ag = HealBot_Config.babortcolg[HealBot_Config.Current_Skin] or 0.1;
local ab = HealBot_Config.babortcolb[HealBot_Config.Current_Skin] or 0.5;
local aa = HealBot_Config.babortcola[HealBot_Config.Current_Skin] or 1;
bar.txt = getglobal(bar:GetName() .. "_text");
if not bar.txt then bar.txt = getglobal(bar:GetName() .. "_text") end
bar:SetStatusBarColor(ar, ag, ab, 0);
local sr = HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin];
local sg = HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin];
@@ -301,7 +340,7 @@ function HealBot_CheckCasting(unit)
local sg = HealBot_Config.btextenabledcolg[HealBot_Config.Current_Skin];
local sb = HealBot_Config.btextenabledcolb[HealBot_Config.Current_Skin];
local sa = HealBot_Config.btextenabledcola[HealBot_Config.Current_Skin];
bar.txt = getglobal(bar:GetName() .. "_text");
if not bar.txt then bar.txt = getglobal(bar:GetName() .. "_text") end
bar.txt:SetTextColor(sr, sg, sb, sa);
end
end
@@ -326,7 +365,15 @@ function HealBot_CastSpellOnFriend(spell, target)
if formCancelled then
-- ALWAYS put the cast into the Pending queue so the OnUpdate loop can wait for the server
-- to process the unshift before attempting the cast, otherwise we get "You are in shapeshift form".
HealBot_PendingShapeshiftCast = { spell = spell, target = target, targetEnemy = targetEnemy, oldTarget = oldTarget, fireTime = GetTime() + 0.05, expires = GetTime() + 2.0 }
if not HealBot_PendingShapeshiftCast then HealBot_PendingShapeshiftCast = {} end
HealBot_PendingShapeshiftCast.spell = spell
HealBot_PendingShapeshiftCast.target = target
HealBot_PendingShapeshiftCast.targetEnemy = targetEnemy
HealBot_PendingShapeshiftCast.oldTarget = oldTarget
HealBot_PendingShapeshiftCast.fireTime = GetTime() + 0.05
HealBot_PendingShapeshiftCast.expires = GetTime() + 2.0
HealBot_PendingShapeshiftCast.started = nil
HealBot_PendingShapeshiftCast.nextSpam = nil
return;
end
@@ -337,11 +384,11 @@ function HealBot_CastSpellOnFriend(spell, target)
HealBot_StartCasting(spell, target, "direct");
if targetEnemy then
HealBot_TargetRestorePending = { type = "enemy" };
HealBot_TargetRestorePending = "enemy";
elseif oldTarget and oldTarget ~= UnitName(target) then
HealBot_TargetRestorePending = { type = "friend" };
HealBot_TargetRestorePending = "friend";
elseif not oldTarget then
HealBot_TargetRestorePending = { type = "clear" };
HealBot_TargetRestorePending = "clear";
end
HealBot_TargetRestoreTimer = 0;
end
@@ -426,7 +473,13 @@ end
-- HealBot_AddHeal: Internal utility: HealBot_AddHeal
function HealBot_AddHeal(spell)
HealBot_SetSpellDefaults(spell);
table.foreachi(HealBot_Spells[spell].Target, function (i, val)
local targetList = HealBot_Spells[spell].Target
if not targetList and HealBot_Spells[spell].Group and HealBot_Spells[HealBot_Spells[spell].Group] then
targetList = HealBot_Spells[HealBot_Spells[spell].Group].Target
end
if not targetList then targetList = {"player", "party", "pet"} end
table.foreachi(targetList, function (i, val)
if not HealBot_Heals[val] then HealBot_Heals[val] = {} end
table.insert(HealBot_Heals[val], spell);
end);
HealBot_Spells[spell].BagSlot = HealBot_GetBagSlot(spell);
@@ -457,7 +510,7 @@ function HealBot_FindHealSpells()
temp_Spell_cast = HealBot_Spells[spell].CastTime;
end
RealHealing = ((HealBot_GetBonus() * healingbonus_penalty) * (temp_Spell_cast / 3.5));
local playerClass, englishClass = UnitClass("player");
local englishClass = HealBot_UnitClass("player");
local SpiBonus = 0;
if (englishClass == "PRIEST") then
SpiBonus = ((HealBot_SpiBonus(spell) * healingbonus_penalty) * (temp_Spell_cast / 3.5))
@@ -470,7 +523,7 @@ function HealBot_FindHealSpells()
end
end);
local items = {};
local items = HealBot_GetTable();
for bag = 0, NUM_BAG_FRAMES do
for slot = 1, GetContainerNumSlots(bag) do
local item = HealBot_GetItemName(bag, slot);
@@ -496,6 +549,7 @@ function HealBot_FindHealSpells()
HealBot_Heals["raidpet" .. i] = HealBot_Heals.party;
end
HealBot_ReleaseTable(items);
if HealBot_CalcEquipBonus then
HealBot_AddDebug("...Done Equip Bonus:" .. RealHealing);
end
@@ -519,10 +573,14 @@ end
-- HealBot_GetHealSpell: Resolves spell rank based on health deficit.
function HealBot_GetHealSpell(unit, pattern)
if (not UnitName(unit)) then return nil end;
if not string.find(unit, "^Test") then
if (not UnitName(unit)) then return nil end;
end
if not pattern then return nil end;
if UnitOnTaxi("player") then return nil end;
if HealBot_Config.ProtectPvP == 1 and UnitIsPVP(unit) and not UnitIsPVP("player") then return nil end
if not string.find(unit, "^Test") then
if HealBot_Config.ProtectPvP == 1 and UnitIsPVP(unit) and not UnitIsPVP("player") then return nil end
end
if HealBot_UnitClass("player") == "DRUID" then
if HealBot_GetShapeshiftForm() and HealBot_Config.AutoUnshift ~= 1 then return nil end;
end
@@ -566,7 +624,15 @@ end
-- HealBot_RecalcHeals: Flags unit for visual refresh.
function HealBot_RecalcHeals(unit)
HealBot_Action_Refresh(unit);
if unit then
HealBot_View_DirtyUnits[unit] = true;
else
if HealBot_Action_UnitButtons then
for u, _ in pairs(HealBot_Action_UnitButtons) do
HealBot_View_DirtyUnits[u] = true;
end
end
end
end
-- HealBot_RecalcParty: Triggers group layout rebuild.
@@ -579,7 +645,6 @@ function HealBot_RecalcParty()
end
end
end
HealBot_Action_RefreshButtons();
end
-- HealBot_RecalcSpells: Recalculates spells and updates layout.
@@ -588,17 +653,24 @@ function HealBot_RecalcSpells()
HealBot_RecalcParty();
end
-- HealBot_GetTalentRank: Internal utility: HealBot_GetTalentRank
function HealBot_GetTalentRank(talentName)
HealBot_TalentRanks = {}
function HealBot_UpdateTalentRanks()
HealBot_TalentRanks = {}
for t = 1, GetNumTalentTabs() do
for i = 1, GetNumTalents(t) do
local nameTalent, icon, tier, column, currRank, maxRank = GetTalentInfo(t, i);
if nameTalent == talentName then
return currRank;
local nameTalent, icon, tier, column, currRank, maxRank = GetTalentInfo(t, i)
if nameTalent then
HealBot_TalentRanks[nameTalent] = currRank
end
end
end
return 0;
end
-- HealBot_GetTalentRank: Internal utility: HealBot_GetTalentRank
function HealBot_GetTalentRank(talentName)
if not next(HealBot_TalentRanks) then HealBot_UpdateTalentRanks() end
return HealBot_TalentRanks[talentName] or 0
end
-- HealBot_SpiBonus: Internal utility: HealBot_SpiBonus
@@ -633,6 +705,7 @@ end
-- HealBot_InitSpells: Scans spellbook to find available heals.
function HealBot_InitSpells()
HealBot_CacheSpellIDs()
local id = 1
local cnt = 0;
local class = HealBot_UnitClass("player")
@@ -671,8 +744,15 @@ function HealBot_InitGetSpellData(spell, id, class)
_cast = 0;
line = nil;
if not HealBot_ScanTooltip_Lines_Left then HealBot_ScanTooltip_Lines_Left = {} end
if not HealBot_ScanTooltip_Lines_Right then HealBot_ScanTooltip_Lines_Right = {} end
for lineNum = 2, 6 do
local lText = getglobal("HealBot_ScanTooltipTextLeft"..lineNum);
local lText = HealBot_ScanTooltip_Lines_Left[lineNum];
if not lText then
lText = getglobal("HealBot_ScanTooltipTextLeft"..lineNum);
HealBot_ScanTooltip_Lines_Left[lineNum] = lText;
end
if lText and lText:IsVisible() and lText:GetText() then
local txt = lText:GetText();
local t1, t2, match;
@@ -696,7 +776,11 @@ function HealBot_InitGetSpellData(spell, id, class)
end
end
local rText = getglobal("HealBot_ScanTooltipTextRight"..lineNum);
local rText = HealBot_ScanTooltip_Lines_Right[lineNum];
if not rText then
rText = getglobal("HealBot_ScanTooltipTextRight"..lineNum);
HealBot_ScanTooltip_Lines_Right[lineNum] = rText;
end
if rText and rText:IsVisible() and rText:GetText() then
local txt = rText:GetText();
local t1, t2, match;
@@ -857,10 +941,7 @@ function HealBot_Generic_Patten(matchStr, matchPattern)
return tmpTest, _HealsMin, _HealsMax;
end
-- HealBot_UpdateShapeshiftForm: Called on UPDATE_SHAPESHIFT_FORM
function HealBot_UpdateShapeshiftForm()
-- Deprecated
end
-- HealBot_GetShapeshiftForm: Detects active druid form to prevent invalid casts.
function HealBot_GetShapeshiftForm()
@@ -870,9 +951,18 @@ function HealBot_GetShapeshiftForm()
for i=1,forms do
local icon,name,active = GetShapeshiftFormInfo(i);
if active then
return i;
if icon then
local icon_lower = string.lower(icon)
-- Exclude non-standard/custom forms like Tree of Life from unshifting
if not string.find(icon_lower, "humanoidform") and not string.find(icon_lower, "treeoflife") and not string.find(icon_lower, "healingway") and not string.find(icon_lower, "stoneclawtotem") then
return nil;
end
else
return i;
end
end
end
end
return nil;
end
+9 -5
View File
@@ -1,4 +1,5 @@
HealBot_ConfigDefaults = {
DebugMode = 0,
ShowManaBars=0,
ManaBarsHealersOnly=0,
Version = HEALBOT_VERSION,
@@ -248,6 +249,13 @@ HealBot_ConfigDefaults = {
bboffset = {[HEALBOT_SKINS_STD] = 16, ["HealBot Party"] = 16, ["HealBot Raid"] = 16, ["Alteric Valley"] = 16, ["Modern Flat"] = 3},
bfontoutline = {[HEALBOT_SKINS_STD] = 0, ["HealBot Party"] = 0, ["HealBot Raid"] = 0, ["Alteric Valley"] = 0, ["Modern Flat"] = 1},
biconsize = {[HEALBOT_SKINS_STD] = 12, ["HealBot Party"] = 12, ["HealBot Raid"] = 12, ["Alteric Valley"] = 12, ["Modern Flat"] = 12},
bcolormaxr = {[HEALBOT_SKINS_STD] = 0, ["HealBot Party"] = 0, ["HealBot Raid"] = 0, ["Alteric Valley"] = 0, ["Modern Flat"] = 0},
bcolormaxg = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 1},
bcolormaxb = {[HEALBOT_SKINS_STD] = 0, ["HealBot Party"] = 0, ["HealBot Raid"] = 0, ["Alteric Valley"] = 0, ["Modern Flat"] = 0},
bcolorminr = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 1},
bcolorming = {[HEALBOT_SKINS_STD] = 0, ["HealBot Party"] = 0, ["HealBot Raid"] = 0, ["Alteric Valley"] = 0, ["Modern Flat"] = 0},
bcolorminb = {[HEALBOT_SKINS_STD] = 0, ["HealBot Party"] = 0, ["HealBot Raid"] = 0, ["Alteric Valley"] = 0, ["Modern Flat"] = 0},
bfont = {[HEALBOT_SKINS_STD] = "Fonts\\FRIZQT__.TTF", ["HealBot Party"] = "Fonts\\FRIZQT__.TTF", ["HealBot Raid"] = "Fonts\\FRIZQT__.TTF", ["Alteric Valley"] = "Fonts\\FRIZQT__.TTF", ["Modern Flat"] = "Fonts\\FRIZQT__.TTF"},
ShowTooltip = 1,
ShowManaBars = 0,
ManaBarsHealersOnly = 0,
@@ -260,15 +268,11 @@ HealBot_ConfigDefaults = {
HealBot_Integrations_Nampower = 0,
HealBot_Integrations_SuperWoW = 0,
HealBot_Integrations_ClassicAPI = 0,
HealBot_Integrations_ShowHoTTimers = 0,
};
HealBot_Config = {};
--HealBot_EmergIncMelee = {};
--HealBot_EmergIncRange = {};
--HealBot_EmergIncHealers = {};
--HealBot_EmergIncCustom = {};
--HealBot_KeyCombo = {};
HealBot_HealsIn = {};
HealBot_Healers = {};
HealBot_UnitDebuff = {};
+42 -18
View File
@@ -10,6 +10,8 @@ function HealBot_GetUnitGUID(unit)
return UnitGUID(unit)
elseif HealBot_Integrations_SuperWoW_Active and GetUnitGUID then
return GetUnitGUID(unit)
elseif HealBot_Integrations_Nampower_Active and GetUnitGUID then
return GetUnitGUID(unit)
end
return nil
end
@@ -36,22 +38,29 @@ function HealBot_Integrations_Toggle()
HealBot_NampowerFrame:RegisterEvent("AURA_CAST_ON_OTHER")
HealBot_NampowerFrame:SetScript("OnEvent", function()
if not HealBot_Integrations_Nampower_Active then return end
local spellID, caster, target, _, _, _, _, duration = arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8
if not caster or not target or duration <= 0 then return end
local spellName = GetSpellRecField(spellID, "name")
if not spellName then return end
if not HealBot_Nampower_Auras[target] then
HealBot_Nampower_Auras[target] = {}
end
local expirationTime = GetTime() + (duration / 1000)
HealBot_Nampower_Auras[target][spellName] = expirationTime
local unitID = HealBot_Model:GetUnitIDByName(target)
if unitID then
HealBot_OnEvent_UnitAura(nil, unitID)
if event == "AURA_CAST_ON_SELF" or event == "AURA_CAST_ON_OTHER" then
local spellID, caster, target, _, _, _, _, duration = arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8
if not caster or not target or duration <= 0 then return end
-- The player is ALWAYS the caster in these events for Nampower
if not HealBot_PlayerGUID then
HealBot_PlayerGUID = caster
end
local spellName = GetSpellRecField(spellID, "name")
if not spellName then return end
if not HealBot_Nampower_Auras[target] then
HealBot_Nampower_Auras[target] = HealBot_GetTable()
end
local expirationTime = GetTime() + (duration / 1000)
HealBot_Nampower_Auras[target][spellName] = expirationTime
local unitID = HealBot_Model:GetUnitIDByName(target)
if unitID then
HealBot_OnEvent_UnitAura(nil, unitID)
end
end
end)
end
@@ -59,7 +68,8 @@ function HealBot_Integrations_Toggle()
HealBot_Integrations_Nampower_Active = false;
HealBot_AddDebug("nampower Integration: DISABLED");
if HealBot_Nampower_Auras then
for k in pairs(HealBot_Nampower_Auras) do
for k, v in pairs(HealBot_Nampower_Auras) do
HealBot_ReleaseTable(v)
HealBot_Nampower_Auras[k] = nil
end
end
@@ -73,7 +83,8 @@ function HealBot_Integrations_PruneNampower()
local currentTime = GetTime()
for targetName, auras in pairs(HealBot_Nampower_Auras) do
-- Check if target is still in the raid/party
if not HealBot_Model:GetUnitIDByName(targetName) then
if not HealBot_Model:GetUnitByGUID(targetName) and not HealBot_Model:GetUnitIDByName(targetName) then
HealBot_ReleaseTable(auras)
HealBot_Nampower_Auras[targetName] = nil
else
-- Prune expired auras
@@ -86,6 +97,7 @@ function HealBot_Integrations_PruneNampower()
end
end
if not hasAuras then
HealBot_ReleaseTable(auras)
HealBot_Nampower_Auras[targetName] = nil
end
end
@@ -122,4 +134,16 @@ end
HealBot_Integrations_ClassicAPI_Active = false;
HealBot_AddDebug("ClassicAPI Integration: DISABLED");
end
if HealBot_Options_Integrations_ShowHoTTimers then
if HealBot_Integrations_Nampower_Active or HealBot_Integrations_SuperWoW_Active or HealBot_Integrations_ClassicAPI_Active then
HealBot_Options_Integrations_ShowHoTTimers:Enable()
getglobal(HealBot_Options_Integrations_ShowHoTTimers:GetName().."Text"):SetTextColor(1, 1, 1)
else
HealBot_Options_Integrations_ShowHoTTimers:Disable()
getglobal(HealBot_Options_Integrations_ShowHoTTimers:GetName().."Text"):SetTextColor(0.5, 0.5, 0.5)
HealBot_Options_Integrations_ShowHoTTimers:SetChecked(0)
HealBot_Config.HealBot_Integrations_ShowHoTTimers = 0
end
end
end
+2
View File
@@ -242,6 +242,8 @@ HEALBOT_OPTIONS_NEWSKINTEXT = "Neuer Skin"
HEALBOT_OPTIONS_SAVESKIN = "Speichern"
HEALBOT_OPTIONS_SKINBARS = "Leisten Optionen"
HEALBOT_OPTIONS_SKINPANEL = "Panel Farben"
HEALBOT_SKIN_MAXHPTEXT = "Max HP"
HEALBOT_SKIN_MINHPTEXT = "Min HP"
HEALBOT_SKIN_ENTEXT = "Aktiv"
HEALBOT_SKIN_DISTEXT = "Inaktiv"
HEALBOT_SKIN_DEBTEXT = "Debuff"
+4
View File
@@ -275,6 +275,8 @@ HEALBOT_OPTIONS_BUFF7 = "Buff 7";
HEALBOT_OPTIONS_BUFF8 = "Buff 8";
HEALBOT_OPTIONS_SKINBARS = "Bar options"
HEALBOT_OPTIONS_SKINPANEL = "Panel colours"
HEALBOT_SKIN_MAXHPTEXT = "Max HP"
HEALBOT_SKIN_MINHPTEXT = "Min HP"
HEALBOT_SKIN_ENTEXT = "Enabled"
HEALBOT_SKIN_DISTEXT = "Disabled"
HEALBOT_SKIN_DEBTEXT = "Debuff"
@@ -390,3 +392,5 @@ HEALBOT_WORDS_SEC = "sec";
HEALBOT_WORDS_TO = "to";
HEALBOT_WORDS_CAST = "Cast"
HEALBOT_WORDS_FOR = "for";
HEALBOT_OPTIONS_TESTBARS = "Test Bars";
HEALBOT_WORD_TEST = "Test";
+3 -1
View File
@@ -18,7 +18,7 @@ if (GetLocale() == "frFR") then
HEALBOT_DRUID = "Druide";
HEALBOT_HUNTER = "Chasseur";
HEALBOT_MAGE = "Magier";
HEALBOT_MAGE = "Mage";
HEALBOT_PALADIN = "Paladin";
HEALBOT_PRIEST = "Pr\195\170tre";
HEALBOT_ROGUE = "Voleur";
@@ -305,6 +305,8 @@ HEALBOT_OPTIONS_NEWSKINTEXT = "New skin" -- *************** needs French
HEALBOT_OPTIONS_SAVESKIN = "Save" -- *************** needs French translation ***************
HEALBOT_OPTIONS_SKINBARS = "Bar options" -- *************** needs French translation ***************
HEALBOT_OPTIONS_SKINPANEL = "Panel colours" -- *************** needs French translation ***************
HEALBOT_SKIN_MAXHPTEXT = "Max HP"
HEALBOT_SKIN_MINHPTEXT = "Min HP"
HEALBOT_SKIN_ENTEXT = "Enabled" -- *************** needs French translation ***************
HEALBOT_SKIN_DISTEXT = "Disabled" -- *************** needs French translation ***************
HEALBOT_SKIN_DEBTEXT = "Debuff" -- *************** needs French translation ***************
+2
View File
@@ -221,6 +221,8 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
HEALBOT_OPTIONS_SAVESKIN = "저장"
HEALBOT_OPTIONS_SKINBARS = "바 옵션들"
HEALBOT_OPTIONS_SKINPANEL = "패널 색"
HEALBOT_SKIN_MAXHPTEXT = "최대 생명력"
HEALBOT_SKIN_MINHPTEXT = "최소 생명력"
HEALBOT_SKIN_ENTEXT = "활성화"
HEALBOT_SKIN_DISTEXT = "비활성화"
HEALBOT_SKIN_DEBTEXT = "디버프"
+40 -15
View File
@@ -1,6 +1,13 @@
-- HealBot_Model.lua
-- Centralized Data Store and Observer System for HealBotBlue
local pool_oldGUIDs = {}
local pool_newUnitForGUID = {}
local pool_stateSwaps = {}
local pool_iconSwaps = {}
local pool_missingBuffSwaps = {}
local pool_debuffSwaps = {}
-- Safe local wrappers to prevent native UIDropDownMenu concatenation crashes
-- when setting selected values on closed dropdowns during initialization.
function HealBot_UIDropDownMenu_SetSelectedID(frame, id, useValue)
@@ -137,19 +144,19 @@ end
-- Updates base unit info (Name, Class)
function HealBot_Model:UpdateUnitIdentity(unit)
if not self.units[unit] then return false end
if not self.units[unit] or string.find(unit, "^Test") then return false end
local oldName = self.units[unit].name
local oldEnglishClass = self.units[unit].englishClass
local name = UnitName(unit)
local _, englishClass = UnitClass(unit)
local englishClass = HealBot_UnitClass(unit)
if oldName ~= name or oldEnglishClass ~= englishClass then
self.units[unit].name = name
self.units[unit].englishClass = englishClass
self.units[unit].class = UnitClass(unit)
if (HealBot_Integrations_SuperWoW_Active or HealBot_Integrations_ClassicAPI_Active) and HealBot_GetUnitGUID then
if (HealBot_Integrations_SuperWoW_Active or HealBot_Integrations_ClassicAPI_Active or HealBot_Integrations_Nampower_Active) and HealBot_GetUnitGUID then
local guid = HealBot_GetUnitGUID(unit)
if guid and guid ~= "0" and guid ~= "0x0000000000000000" then
self.unitGUIDs[unit] = guid
@@ -178,16 +185,18 @@ end
-- HealBot_Model:PreserveStateByGUID: Preserves icon and debuff state when group indices shift during combat.
function HealBot_Model:PreserveStateByGUID()
if not (HealBot_Integrations_SuperWoW_Active or HealBot_Integrations_ClassicAPI_Active) or not HealBot_GetUnitGUID then return end
if not (HealBot_Integrations_SuperWoW_Active or HealBot_Integrations_ClassicAPI_Active or HealBot_Integrations_Nampower_Active) or not HealBot_GetUnitGUID then return end
local oldGUIDs = {}
for k in pairs(pool_oldGUIDs) do pool_oldGUIDs[k] = nil end
local oldGUIDs = pool_oldGUIDs
for unit, guid in pairs(self.unitGUIDs) do
if string.find(unit, "^party") or string.find(unit, "^raid") or unit == "player" or unit == "pet" then
oldGUIDs[unit] = guid
end
end
local newUnitForGUID = {}
for k in pairs(pool_newUnitForGUID) do pool_newUnitForGUID[k] = nil end
local newUnitForGUID = pool_newUnitForGUID
-- Scan the new roster
for _, unit in ipairs(self.partyMembers) do
local guid = HealBot_GetUnitGUID(unit)
@@ -206,10 +215,14 @@ function HealBot_Model:PreserveStateByGUID()
end
end
local stateSwaps = {}
local iconSwaps = {}
local missingBuffSwaps = {}
local debuffSwaps = {}
for k in pairs(pool_stateSwaps) do pool_stateSwaps[k] = nil end
local stateSwaps = pool_stateSwaps
for k in pairs(pool_iconSwaps) do pool_iconSwaps[k] = nil end
local iconSwaps = pool_iconSwaps
for k in pairs(pool_missingBuffSwaps) do pool_missingBuffSwaps[k] = nil end
local missingBuffSwaps = pool_missingBuffSwaps
for k in pairs(pool_debuffSwaps) do pool_debuffSwaps[k] = nil end
local debuffSwaps = pool_debuffSwaps
for oldUnit, guid in pairs(oldGUIDs) do
local newUnit = newUnitForGUID[guid]
@@ -231,14 +244,26 @@ function HealBot_Model:PreserveStateByGUID()
for targetUnit, stateData in pairs(stateSwaps) do
-- Deep copy to prevent memory aliasing
self.units[targetUnit] = {}
for k, v in pairs(stateData) do
self.units[targetUnit][k] = v
if not self.units[targetUnit] then
self.units[targetUnit] = HealBot_GetTable()
self.units[targetUnit].icons = HealBot_GetTable()
end
self.units[targetUnit].icons = {}
local targetIcons = self.units[targetUnit].icons
if not targetIcons then targetIcons = HealBot_GetTable() end
for k in pairs(targetIcons) do targetIcons[k] = nil end
for k in pairs(self.units[targetUnit]) do self.units[targetUnit][k] = nil end
for k, v in pairs(stateData) do
if k ~= "icons" then
self.units[targetUnit][k] = v
end
end
self.units[targetUnit].icons = targetIcons
if HealBot_UnitIcons and iconSwaps[targetUnit] then
if not HealBot_UnitIcons[targetUnit] then HealBot_UnitIcons[targetUnit] = {} end
if not HealBot_UnitIcons[targetUnit] then HealBot_UnitIcons[targetUnit] = HealBot_GetTable() end
for j=1, 10 do
HealBot_UnitIcons[targetUnit][j] = iconSwaps[targetUnit][j]
end
+58 -5
View File
@@ -202,6 +202,20 @@ function HealBot_Returned_Colours()
HealBot_Config.babortcolg[HealBot_Config.Current_Skin],
HealBot_Config.babortcolb[HealBot_Config.Current_Skin] = ColorPickerFrame:GetColorRGB();
HealBot_Config.babortcola[HealBot_Config.Current_Skin] = A;
elseif HealBot_ColourObjWaiting=="MaxHP" then
if not HealBot_Config.bcolormaxr then HealBot_Config.bcolormaxr = {} end
if not HealBot_Config.bcolormaxg then HealBot_Config.bcolormaxg = {} end
if not HealBot_Config.bcolormaxb then HealBot_Config.bcolormaxb = {} end
HealBot_Config.bcolormaxr[HealBot_Config.Current_Skin],
HealBot_Config.bcolormaxg[HealBot_Config.Current_Skin],
HealBot_Config.bcolormaxb[HealBot_Config.Current_Skin] = ColorPickerFrame:GetColorRGB();
elseif HealBot_ColourObjWaiting=="MinHP" then
if not HealBot_Config.bcolorminr then HealBot_Config.bcolorminr = {} end
if not HealBot_Config.bcolorming then HealBot_Config.bcolorming = {} end
if not HealBot_Config.bcolorminb then HealBot_Config.bcolorminb = {} end
HealBot_Config.bcolorminr[HealBot_Config.Current_Skin],
HealBot_Config.bcolorming[HealBot_Config.Current_Skin],
HealBot_Config.bcolorminb[HealBot_Config.Current_Skin] = ColorPickerFrame:GetColorRGB();
else
HealBot_Config.CDCBarColour[HealBot_ColourObjWaiting].R,
HealBot_Config.CDCBarColour[HealBot_ColourObjWaiting].G,
@@ -210,13 +224,18 @@ function HealBot_Returned_Colours()
HealBot_SetSkinColours()
HealBot_SetCDCBarColours()
end
ColorPickerFrame.func = HealBot_Returned_Colours
-- HealBot_UseColourPick: Internal utility: HealBot_UseColourPick
function HealBot_UseColourPick(R, G, B, A)
ColorPickerFrame.func = HealBot_Returned_Colours;
ColorPickerFrame.cancelFunc = HealBot_Returned_Colours;
if ColorPickerFrame:IsVisible() then
ColorPickerFrame:Hide();
elseif A then
ColorPickerFrame.hasOpacity = true;
ColorPickerFrame.opacity = A;
ColorPickerFrame.opacityFunc = HealBot_Returned_Colours;
ColorPickerFrame:ClearAllPoints();
ColorPickerFrame:SetPoint("TOPLEFT","HealBot_Options","TOPRIGHT",0,-152);
ColorPickerFrame:Show();
@@ -224,6 +243,7 @@ function HealBot_UseColourPick(R, G, B, A)
ColorPickerFrame:SetColorRGB(R, G, B);
else
ColorPickerFrame.hasOpacity = false;
ColorPickerFrame.opacityFunc = nil;
ColorPickerFrame:ClearAllPoints();
ColorPickerFrame:SetPoint("TOPLEFT","HealBot_Options","TOPRIGHT",0,-152);
ColorPickerFrame:Show();
@@ -234,10 +254,18 @@ end
-- HealBot_Options_Defaults_OnClick: UI handler for OnClick options panel.
function HealBot_Options_Defaults_OnClick(this)
HealBot_Options_CastNotify_OnClick(nil,0);
-- HealBot_Config = HealBot_ConfigDefaults;
table.foreach(HealBot_ConfigDefaults, function (key,val)
HealBot_Config[key] = val;
end);
HealBot_Config = {}
local function DeepCopy(src, dest)
for k, v in pairs(src) do
if type(v) == "table" then
dest[k] = {}
DeepCopy(v, dest[k])
else
dest[k] = v
end
end
end
DeepCopy(HealBot_ConfigDefaults, HealBot_Config)
HealBot_Options_OnShow(HealBot_Options);
HealBot_RecalcSpells();
HealBot_Action_Reset();
@@ -334,12 +362,37 @@ function HealBot_Options_SetSkins()
HealBot_Options_BarWidthS:SetValue(HealBot_Config.bwidth[HealBot_Config.Current_Skin])
HealBot_Options_BarNumColsS:SetValue(HealBot_Config.numcols[HealBot_Config.Current_Skin])
HealBot_Options_BarMaxRowsS:SetValue((HealBot_Config.bmaxrows and HealBot_Config.bmaxrows[HealBot_Config.Current_Skin]) or 0)
HealBot_Options_GridOrientation:SetChecked(((HealBot_Config.GridOrientation and HealBot_Config.GridOrientation[HealBot_Config.Current_Skin]) == 2) and 1 or nil)
local orient = (HealBot_Config.GridOrientation and HealBot_Config.GridOrientation[HealBot_Config.Current_Skin]) or 1
UIDropDownMenu_SetSelectedID(HealBot_Options_GridOrientation_Dropdown, orient)
if orient == 2 then
HealBot_Options_GridOrientation_DropdownText:SetText("Horizontal (Rows)")
HealBot_Options_BarMaxRowsS:Hide()
HealBot_Options_BarNumColsS:Show()
else
HealBot_Options_GridOrientation_DropdownText:SetText("Vertical (Columns)")
HealBot_Options_BarMaxRowsS:Show()
HealBot_Options_BarNumColsS:Hide()
end
HealBot_Options_BarBRSpaceS:SetValue(HealBot_Config.brspace[HealBot_Config.Current_Skin])
HealBot_Options_BarBCSpaceS:SetValue(HealBot_Config.bcspace[HealBot_Config.Current_Skin])
HealBot_Options_FramePaddingS:SetValue((HealBot_Config.bpadding and HealBot_Config.bpadding[HealBot_Config.Current_Skin]) or 10)
HealBot_Options_BorderThicknessS:SetValue((HealBot_Config.bboffset and HealBot_Config.bboffset[HealBot_Config.Current_Skin]) or 1)
HealBot_Options_FontHeight:SetValue(HealBot_Config.btextheight[HealBot_Config.Current_Skin])
local fontFile = (HealBot_Config.bfont and HealBot_Config.bfont[HealBot_Config.Current_Skin]) or "Fonts\\FRIZQT__.TTF"
local fontName = "Friz Quadrata"
if HealBot_Font_List then
for i = 1, getn(HealBot_Font_List) do
if HealBot_Font_List[i].file == fontFile then
fontName = HealBot_Font_List[i].text
UIDropDownMenu_SetSelectedID(HealBot_Options_Font_Dropdown, i)
break
end
end
end
if HealBot_Options_Font_DropdownText then
HealBot_Options_Font_DropdownText:SetText(fontName)
end
HealBot_Options_BarAlphaDis:SetValue(HealBot_Config.bardisa[HealBot_Config.Current_Skin])
HealBot_Options_AbortBarSize:SetValue(HealBot_Config.abortsize[HealBot_Config.Current_Skin])
local isShowHeaders = (HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1)
+16 -17
View File
@@ -8,7 +8,7 @@
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-30" />
<AbsDimension x="170" y="-30"/>
</Offset>
</Anchor>
</Anchors>
@@ -28,15 +28,15 @@
<FontString name="$parentLabel" text="Solo Skin:" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="-10" y="15" /></Offset>
<Offset><AbsDimension x="-10" y="15"/></Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="30" y="-80" /></Offset>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_AutoSwap" relativePoint="BOTTOMLEFT">
<Offset><AbsDimension x="0" y="-25"/></Offset>
</Anchor>
</Anchors>
<Scripts>
@@ -52,15 +52,15 @@
<FontString name="$parentLabel" text="Party Skin:" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="-10" y="15" /></Offset>
<Offset><AbsDimension x="-10" y="15"/></Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="30" y="-130" /></Offset>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Auto_Solo" relativePoint="BOTTOMLEFT">
<Offset><AbsDimension x="0" y="-25"/></Offset>
</Anchor>
</Anchors>
<Scripts>
@@ -76,15 +76,15 @@
<FontString name="$parentLabel" text="Raid 15 Skin:" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="-10" y="15" /></Offset>
<Offset><AbsDimension x="-10" y="15"/></Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="30" y="-180" /></Offset>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Auto_Party" relativePoint="BOTTOMLEFT">
<Offset><AbsDimension x="0" y="-25"/></Offset>
</Anchor>
</Anchors>
<Scripts>
@@ -100,15 +100,15 @@
<FontString name="$parentLabel" text="Raid 25 Skin:" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="-10" y="15" /></Offset>
<Offset><AbsDimension x="-10" y="15"/></Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="30" y="-230" /></Offset>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Auto_Raid15" relativePoint="BOTTOMLEFT">
<Offset><AbsDimension x="0" y="-25"/></Offset>
</Anchor>
</Anchors>
<Scripts>
@@ -124,15 +124,15 @@
<FontString name="$parentLabel" text="Raid 40 Skin:" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="-10" y="15" /></Offset>
<Offset><AbsDimension x="-10" y="15"/></Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="30" y="-280" /></Offset>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Auto_Raid25" relativePoint="BOTTOMLEFT">
<Offset><AbsDimension x="0" y="-25"/></Offset>
</Anchor>
</Anchors>
<Scripts>
@@ -141,7 +141,6 @@
</OnLoad>
</Scripts>
</Frame>
</Frames>
<Scripts>
<OnShow>
+356 -363
View File
@@ -2,371 +2,364 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_Buffs.lua" />
<Frame name="HealBot_Options_Panel6" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<Frame name="HealBot_Options_BuffFrame" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Size>
<AbsDimension y="330"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-35"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_BuffPanel_Text" text="Buff Settings" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="15" y="10" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
</Frame>
<CheckButton name="HealBot_Options_BuffWatch" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BuffFrame" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="15" y="-15"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_BUFFWATCH)</OnLoad>
<OnClick>HealBot_Options_BuffWatch_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_BuffWatchInCombat" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BuffWatch" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="20" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_BUFFWATCHINCOMBAT)</OnLoad>
<OnClick>HealBot_Options_BuffWatchInCombat_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff1" inherits="UIDropDownMenuTemplate" id="1">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff1Text" text="HEALBOT_OPTIONS_BUFF1" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BuffWatchInCombat" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="-15" y="-30" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff1Self" inherits="OptionsCheckButtonTemplate" id="1">
<Size><AbsDimension x="20" y="20"/></Size>
<Frame name="HealBot_Options_Panel6" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<Frame name="HealBot_Options_BuffFrame">
<Size>
<AbsDimension y="330"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="50" y="-30"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-50" y="-30"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_BuffPanel_Text" text="Buff Settings" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff1" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="15" y="10"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff2" inherits="UIDropDownMenuTemplate" id="2">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff2Text" text="HEALBOT_OPTIONS_BUFF2" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff1" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff2Self" inherits="OptionsCheckButtonTemplate" id="2">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff2" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff3" inherits="UIDropDownMenuTemplate" id="3">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff3Text" text="HEALBOT_OPTIONS_BUFF3" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff2" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff3Self" inherits="OptionsCheckButtonTemplate" id="3">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff3" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff4" inherits="UIDropDownMenuTemplate" id="4">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff4Text" text="HEALBOT_OPTIONS_BUFF4" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff3" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff4Self" inherits="OptionsCheckButtonTemplate" id="4">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff4" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff5" inherits="UIDropDownMenuTemplate" id="5">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff5Text" text="HEALBOT_OPTIONS_BUFF5" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BuffWatchInCombat" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="160" y="-30" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff5Self" inherits="OptionsCheckButtonTemplate" id="5">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff5" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff6" inherits="UIDropDownMenuTemplate" id="6">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff6Text" text="HEALBOT_OPTIONS_BUFF6" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff5" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff6Self" inherits="OptionsCheckButtonTemplate" id="6">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff6" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff7" inherits="UIDropDownMenuTemplate" id="7">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff7Text" text="HEALBOT_OPTIONS_BUFF7" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff6" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff7Self" inherits="OptionsCheckButtonTemplate" id="7">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff7" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff8" inherits="UIDropDownMenuTemplate" id="8">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff8Text" text="HEALBOT_OPTIONS_BUFF8" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff7" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Buff_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff8Self" inherits="OptionsCheckButtonTemplate" id="8">
<Size><AbsDimension x="20" y="20"/></Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff8" relativePoint="TOPLEFT">
<Offset><AbsDimension x="40" y="18"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
</Frames>
</FontString>
</Layer>
</Layers>
</Frame>
<CheckButton name="HealBot_Options_BuffWatch" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BuffFrame" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="15" y="-10"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_BUFFWATCH)</OnLoad>
<OnClick>HealBot_Options_BuffWatch_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_BuffWatchInCombat" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BuffWatch" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-4"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_BUFFWATCHINCOMBAT)</OnLoad>
<OnClick>HealBot_Options_BuffWatchInCombat_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<!-- Column 1 (Buffs 1-4) -->
<Frame name="HealBot_Options_Buff1" inherits="UIDropDownMenuTemplate" id="1">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff1Text" text="HEALBOT_OPTIONS_BUFF1" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BuffWatchInCombat" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="-5" y="-30"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Buff_OnLoad(this)</OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff1Self" inherits="UICheckButtonTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff1" relativePoint="TOPLEFT">
<Offset><AbsDimension x="145" y="8"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff2" inherits="UIDropDownMenuTemplate" id="2">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff2Text" text="HEALBOT_OPTIONS_BUFF2" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff1" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-28"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Buff_OnLoad(this)</OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff2Self" inherits="UICheckButtonTemplate" id="2">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff2" relativePoint="TOPLEFT">
<Offset><AbsDimension x="145" y="8"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff3" inherits="UIDropDownMenuTemplate" id="3">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff3Text" text="HEALBOT_OPTIONS_BUFF3" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff2" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-28"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Buff_OnLoad(this)</OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff3Self" inherits="UICheckButtonTemplate" id="3">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff3" relativePoint="TOPLEFT">
<Offset><AbsDimension x="145" y="8"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff4" inherits="UIDropDownMenuTemplate" id="4">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff4Text" text="HEALBOT_OPTIONS_BUFF4" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff3" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-28"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Buff_OnLoad(this)</OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff4Self" inherits="UICheckButtonTemplate" id="4">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff4" relativePoint="TOPLEFT">
<Offset><AbsDimension x="145" y="8"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<!-- Column 2 (Buffs 5-8, anchored relative to Buff 1) -->
<Frame name="HealBot_Options_Buff5" inherits="UIDropDownMenuTemplate" id="5">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff5Text" text="HEALBOT_OPTIONS_BUFF5" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff1" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="60" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Buff_OnLoad(this)</OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff5Self" inherits="UICheckButtonTemplate" id="5">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff5" relativePoint="TOPLEFT">
<Offset><AbsDimension x="145" y="8"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff6" inherits="UIDropDownMenuTemplate" id="6">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff6Text" text="HEALBOT_OPTIONS_BUFF6" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff5" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-28"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Buff_OnLoad(this)</OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff6Self" inherits="UICheckButtonTemplate" id="6">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff6" relativePoint="TOPLEFT">
<Offset><AbsDimension x="145" y="8"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff7" inherits="UIDropDownMenuTemplate" id="7">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff7Text" text="HEALBOT_OPTIONS_BUFF7" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff6" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-28"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Buff_OnLoad(this)</OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff7Self" inherits="UICheckButtonTemplate" id="7">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff7" relativePoint="TOPLEFT">
<Offset><AbsDimension x="145" y="8"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Buff8" inherits="UIDropDownMenuTemplate" id="8">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_Buff8Text" text="HEALBOT_OPTIONS_BUFF8" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-10" y="15"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff7" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-28"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Buff_OnLoad(this)</OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_Buff8Self" inherits="UICheckButtonTemplate" id="8">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff8" relativePoint="TOPLEFT">
<Offset><AbsDimension x="145" y="8"/></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_BuffSelf_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_BuffSelf_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
</Ui>
+7 -25
View File
@@ -45,9 +45,9 @@ function HealBot_WarningSound_OnClick(this,id)
end
-- HealBot_Options_CDCMonitor_DropDown: UI handler for DropDown options panel.
function HealBot_Options_CDCMonitor_DropDown()
for i=1, getn(HealBot_Options_CDCMonitor_List), 1 do
for i=1, getn(HealBot_Options_EmergencyFilter_List), 1 do
local info = {};
info.text = HealBot_Options_CDCMonitor_List[i];
info.text = HealBot_Options_EmergencyFilter_List[i];
info.func = HealBot_Options_CDCMonitor_OnSelect;
UIDropDownMenu_AddButton(info);
end
@@ -85,7 +85,7 @@ function HealBot_Options_CDCMonitor_Reset()
HealBot_CDCInc[HEALBOT_SHAMAN] = 0;
HealBot_CDCInc[HEALBOT_WARLOCK] = 0;
HealBot_CDCInc[HEALBOT_WARRIOR] = 0;
if HealBot_Config.CDCMonitor==2 then
if HealBot_Config.CDCMonitor==1 then
HealBot_CDCInc[HEALBOT_DRUID] = 1;
HealBot_CDCInc[HEALBOT_HUNTER] = 1;
HealBot_CDCInc[HEALBOT_MAGE] = 1;
@@ -95,25 +95,7 @@ function HealBot_Options_CDCMonitor_Reset()
HealBot_CDCInc[HEALBOT_SHAMAN] = 1;
HealBot_CDCInc[HEALBOT_WARLOCK] = 1;
HealBot_CDCInc[HEALBOT_WARRIOR] = 1;
elseif HealBot_Config.CDCMonitor==3 then
HealBot_CDCInc[HEALBOT_DRUID] = 1;
elseif HealBot_Config.CDCMonitor==4 then
HealBot_CDCInc[HEALBOT_HUNTER] = 1;
elseif HealBot_Config.CDCMonitor==5 then
HealBot_CDCInc[HEALBOT_MAGE] = 1;
elseif HealBot_Config.CDCMonitor==6 then
HealBot_CDCInc[HEALBOT_PALADIN] = 1;
elseif HealBot_Config.CDCMonitor==7 then
HealBot_CDCInc[HEALBOT_PRIEST] = 1;
elseif HealBot_Config.CDCMonitor==8 then
HealBot_CDCInc[HEALBOT_ROGUE] = 1;
elseif HealBot_Config.CDCMonitor==9 then
HealBot_CDCInc[HEALBOT_SHAMAN] = 1;
elseif HealBot_Config.CDCMonitor==10 then
HealBot_CDCInc[HEALBOT_WARLOCK] = 1;
elseif HealBot_Config.CDCMonitor==11 then
HealBot_CDCInc[HEALBOT_WARRIOR] = 1;
elseif HealBot_Config.CDCMonitor==12 then
elseif HealBot_Config.CDCMonitor==2 then
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncMelee[HEALBOT_DRUID];
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncMelee[HEALBOT_HUNTER];
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncMelee[HEALBOT_MAGE];
@@ -123,7 +105,7 @@ function HealBot_Options_CDCMonitor_Reset()
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncMelee[HEALBOT_SHAMAN];
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncMelee[HEALBOT_WARLOCK];
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncMelee[HEALBOT_WARRIOR];
elseif HealBot_Config.CDCMonitor==13 then
elseif HealBot_Config.CDCMonitor==3 then
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncRange[HEALBOT_DRUID];
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncRange[HEALBOT_HUNTER];
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncRange[HEALBOT_MAGE];
@@ -133,7 +115,7 @@ function HealBot_Options_CDCMonitor_Reset()
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncRange[HEALBOT_SHAMAN];
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncRange[HEALBOT_WARLOCK];
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncRange[HEALBOT_WARRIOR];
elseif HealBot_Config.CDCMonitor==14 then
elseif HealBot_Config.CDCMonitor==4 then
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncHealers[HEALBOT_DRUID];
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncHealers[HEALBOT_HUNTER];
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncHealers[HEALBOT_MAGE];
@@ -143,7 +125,7 @@ function HealBot_Options_CDCMonitor_Reset()
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncHealers[HEALBOT_SHAMAN];
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncHealers[HEALBOT_WARLOCK];
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncHealers[HEALBOT_WARRIOR];
elseif HealBot_Config.CDCMonitor==15 then
elseif HealBot_Config.CDCMonitor==5 then
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncCustom[HEALBOT_DRUID];
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncCustom[HEALBOT_HUNTER];
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncCustom[HEALBOT_MAGE];
+23 -41
View File
@@ -9,7 +9,7 @@
<Anchors>
<Anchor point="TOP">
<Offset>
<AbsDimension x="-20" y="-30" />
<AbsDimension x="40" y="-30" />
</Offset>
</Anchor>
</Anchors>
@@ -45,13 +45,7 @@
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_CureDispelCleanse" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Frame name="HealBot_Options_CureDispelCleanse">
<Size>
<AbsDimension y="110"/>
</Size>
@@ -83,9 +77,9 @@
</Frame>
<Frame name="HealBot_Options_CDCButLeft" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanse" relativePoint="TOPLEFT">
<Anchor point="TOP" relativeTo="HealBot_Options_CureDispelCleanse" relativePoint="TOP">
<Offset>
<AbsDimension x="150" y="-35" />
<AbsDimension x="40" y="-35" />
</Offset>
</Anchor>
</Anchors>
@@ -93,9 +87,9 @@
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_CDCLEFT">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanse" relativePoint="TOPLEFT">
<Anchor point="RIGHT" relativeTo="HealBot_Options_CDCButLeft" relativePoint="LEFT">
<Offset>
<AbsDimension x="70" y="-42"/>
<AbsDimension x="-5" y="3"/>
</Offset>
</Anchor>
</Anchors>
@@ -110,9 +104,9 @@
</Frame>
<Frame name="HealBot_Options_CDCButRight" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanse" relativePoint="TOPLEFT">
<Anchor point="TOP" relativeTo="HealBot_Options_CureDispelCleanse" relativePoint="TOP">
<Offset>
<AbsDimension x="150" y="-67" />
<AbsDimension x="40" y="-67" />
</Offset>
</Anchor>
</Anchors>
@@ -120,9 +114,9 @@
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_CDCRIGHT">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanse" relativePoint="TOPLEFT">
<Anchor point="RIGHT" relativeTo="HealBot_Options_CDCButRight" relativePoint="LEFT">
<Offset>
<AbsDimension x="70" y="-74"/>
<AbsDimension x="-5" y="3"/>
</Offset>
</Anchor>
</Anchors>
@@ -136,13 +130,7 @@
</Scripts>
</Frame>
<Frame name="HealBot_Options_CureDispelCleanseCol" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Frame name="HealBot_Options_CureDispelCleanseCol">
<Size>
<AbsDimension y="95"/>
</Size>
@@ -177,9 +165,9 @@
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOPLEFT">
<Anchor point="TOPRIGHT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOP">
<Offset>
<AbsDimension x="70" y="-35"/>
<AbsDimension x="-2" y="-35"/>
</Offset>
</Anchor>
</Anchors>
@@ -192,9 +180,9 @@
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOPLEFT">
<Anchor point="TOPRIGHT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOP">
<Offset>
<AbsDimension x="70" y="-35"/>
<AbsDimension x="-2" y="-35"/>
</Offset>
</Anchor>
</Anchors>
@@ -269,9 +257,9 @@
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOPLEFT">
<Anchor point="TOPRIGHT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOP">
<Offset>
<AbsDimension x="70" y="-65"/>
<AbsDimension x="-2" y="-65"/>
</Offset>
</Anchor>
</Anchors>
@@ -284,9 +272,9 @@
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOPLEFT">
<Anchor point="TOPRIGHT" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOP">
<Offset>
<AbsDimension x="70" y="-65"/>
<AbsDimension x="-2" y="-65"/>
</Offset>
</Anchor>
</Anchors>
@@ -356,13 +344,7 @@
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Frame name="HealBot_Options_CureDispelCleanseWarn" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Frame name="HealBot_Options_CureDispelCleanseWarn">
<Size>
<AbsDimension y="120"/>
</Size>
@@ -394,9 +376,9 @@
</Frame>
<CheckButton name="HealBot_Options_ShowDebuffWarning" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanseWarn" relativePoint="TOPLEFT">
<Anchor point="TOP" relativeTo="HealBot_Options_CureDispelCleanseWarn" relativePoint="TOP">
<Offset>
<AbsDimension x="70" y="-35" />
<AbsDimension x="-90" y="-35" />
</Offset>
</Anchor>
</Anchors>
@@ -409,7 +391,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowDebuffWarning" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="5" />
<AbsDimension x="0" y="-5" />
</Offset>
</Anchor>
</Anchors>
+288 -284
View File
@@ -2,288 +2,292 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_Chat.lua" />
<Frame name="HealBot_Options_Panel7" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<!-- Chat Message 1 -->
<EditBox name="HealBot_Options_ChatMsg1_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-30" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[1].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg1_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg1_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(1, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg1_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg1_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[1].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<!-- Chat Message 2 -->
<EditBox name="HealBot_Options_ChatMsg2_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-90" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[2].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg2_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg2_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(2, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg2_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg2_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[2].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<!-- Chat Message 3 -->
<EditBox name="HealBot_Options_ChatMsg3_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-150" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[3].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg3_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg3_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(3, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg3_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg3_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[3].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<!-- Chat Message 4 -->
<EditBox name="HealBot_Options_ChatMsg4_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-210" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[4].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg4_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg4_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(4, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg4_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg4_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[4].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<!-- Chat Message 5 -->
<EditBox name="HealBot_Options_ChatMsg5_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-270" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[5].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg5_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg5_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(5, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg5_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg5_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[5].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
</Frames>
</Frame>
<Frame name="HealBot_Options_Panel7" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<!-- Chat Message 1 -->
<EditBox name="HealBot_Options_ChatMsg1_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="120" y="-30"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[1].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg1_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg1_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(1, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg1_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg1_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[1].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<!-- Chat Message 2 -->
<EditBox name="HealBot_Options_ChatMsg2_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg1_Text" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-12"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[2].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg2_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg2_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(2, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg2_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg2_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[2].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<!-- Chat Message 3 -->
<EditBox name="HealBot_Options_ChatMsg3_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg2_Text" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-12"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[3].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg3_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg3_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(3, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg3_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg3_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[3].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<!-- Chat Message 4 -->
<EditBox name="HealBot_Options_ChatMsg4_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg3_Text" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-12"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[4].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg4_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg4_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(4, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg4_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg4_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[4].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<!-- Chat Message 5 -->
<EditBox name="HealBot_Options_ChatMsg5_Spell" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg4_Text" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-12"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[5].Spell = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_ChatMsg5_Channel" inherits="UIPanelButtonTemplate" text="None">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ChatMsg5_Spell" relativePoint="RIGHT">
<Offset>
<AbsDimension x="15" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HealBot_Options_ChatMsg_Channel_OnClick(5, this);
</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_ChatMsg5_Text" inherits="InputBoxTemplate" autoFocus="false">
<Size>
<AbsDimension x="300" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ChatMsg5_Spell" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
if HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages[5].Message = this:GetText();
end
</OnTextChanged>
</Scripts>
</EditBox>
</Frames>
</Frame>
</Ui>
+48 -7
View File
@@ -119,6 +119,16 @@ function HealBot_SkinColorpick_OnClick(SkinType)
HealBot_Config.babortcolg[HealBot_Config.Current_Skin],
HealBot_Config.babortcolb[HealBot_Config.Current_Skin],
HealBot_Config.babortcola[HealBot_Config.Current_Skin])
elseif SkinType=="MaxHP" then
local r = HealBot_Config.bcolormaxr and HealBot_Config.bcolormaxr[HealBot_Config.Current_Skin] or 0.0
local g = HealBot_Config.bcolormaxg and HealBot_Config.bcolormaxg[HealBot_Config.Current_Skin] or 1.0
local b = HealBot_Config.bcolormaxb and HealBot_Config.bcolormaxb[HealBot_Config.Current_Skin] or 0.0
HealBot_UseColourPick(r, g, b, 1.0)
elseif SkinType=="MinHP" then
local r = HealBot_Config.bcolorminr and HealBot_Config.bcolorminr[HealBot_Config.Current_Skin] or 1.0
local g = HealBot_Config.bcolorming and HealBot_Config.bcolorming[HealBot_Config.Current_Skin] or 0.0
local b = HealBot_Config.bcolorminb and HealBot_Config.bcolorminb[HealBot_Config.Current_Skin] or 0.0
HealBot_UseColourPick(r, g, b, 1.0)
end
end
-- HealBot_SetSkinColours: Applies skin configuration to UI elements.
@@ -136,6 +146,20 @@ function HealBot_SetSkinColours()
HealBot_EnTextColorpickin:SetStatusBarColor(0, 1, 0, inHealAlpha)
HealBot_DisTextColorpick:SetStatusBarColor(0, 1, 0, disabledAlpha)
local maxR = HealBot_Config.bcolormaxr and HealBot_Config.bcolormaxr[skin] or 0.0
local maxG = HealBot_Config.bcolormaxg and HealBot_Config.bcolormaxg[skin] or 1.0
local maxB = HealBot_Config.bcolormaxb and HealBot_Config.bcolormaxb[skin] or 0.0
if HealBot_MaxHPColorpick then
HealBot_MaxHPColorpick:SetStatusBarColor(maxR, maxG, maxB, 1.0)
end
local minR = HealBot_Config.bcolorminr and HealBot_Config.bcolorminr[skin] or 1.0
local minG = HealBot_Config.bcolorming and HealBot_Config.bcolorming[skin] or 0.0
local minB = HealBot_Config.bcolorminb and HealBot_Config.bcolorminb[skin] or 0.0
if HealBot_MinHPColorpick then
HealBot_MinHPColorpick:SetStatusBarColor(minR, minG, minB, 1.0)
end
-- 2. Set Text Colors
HealBot_EnTextColorpickt:SetTextColor(
HealBot_Config.btextenabledcolr[skin], HealBot_Config.btextenabledcolg[skin],
@@ -203,13 +227,30 @@ function HealBot_SetSkinColours()
end
-- 5. Update Text Labels
HealBot_EnTextColorpickt:SetTextHeight(btextheight)
HealBot_DisTextColorpickt:SetTextHeight(btextheight)
HealBot_DebTextColorpickt:SetTextHeight(btextheight)
HealBot_EnTextColorpickt:SetText(HEALBOT_SKIN_ENTEXT)
HealBot_DisTextColorpickt:SetText(HEALBOT_SKIN_DISTEXT)
HealBot_DebTextColorpickt:SetText(HEALBOT_SKIN_DEBTEXT)
local bfont = (HealBot_Config.bfont and HealBot_Config.bfont[skin]) or "Fonts\\FRIZQT__.TTF"
local fontOutline = (HealBot_Config.bfontoutline and HealBot_Config.bfontoutline[skin]) or 0
local expectedFlags = fontOutline == 1 and "OUTLINE" or ""
if HealBot_EnTextColorpickt then
HealBot_EnTextColorpickt:SetFont(bfont, btextheight, expectedFlags)
HealBot_EnTextColorpickt:SetText(HEALBOT_SKIN_ENTEXT)
end
if HealBot_DisTextColorpickt then
HealBot_DisTextColorpickt:SetFont(bfont, btextheight, expectedFlags)
HealBot_DisTextColorpickt:SetText(HEALBOT_SKIN_DISTEXT)
end
if HealBot_DebTextColorpickt then
HealBot_DebTextColorpickt:SetFont(bfont, btextheight, expectedFlags)
HealBot_DebTextColorpickt:SetText(HEALBOT_SKIN_DEBTEXT)
end
if HealBot_MaxHPColorpickt then
HealBot_MaxHPColorpickt:SetFont(bfont, btextheight, expectedFlags)
HealBot_MaxHPColorpickt:SetText(HEALBOT_SKIN_MAXHPTEXT or "Max HP")
end
if HealBot_MinHPColorpickt then
HealBot_MinHPColorpickt:SetFont(bfont, btextheight, expectedFlags)
HealBot_MinHPColorpickt:SetText(HEALBOT_SKIN_MINHPTEXT or "Min HP")
end
-- 6. Force UI redraw (Kept the scale hack since it addresses a specific engine quirk)
local barScale = HealBot_EnTextColorpick:GetScale()
+17 -23
View File
@@ -10,7 +10,7 @@
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="31" y="-40" />
<AbsDimension x="60" y="-40" />
</Offset>
</Anchor>
</Anchors>
@@ -23,7 +23,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ActionLocked" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="5" />
<AbsDimension x="0" y="-5" />
</Offset>
</Anchor>
</Anchors>
@@ -36,7 +36,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GrowUpwards" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="5" />
<AbsDimension x="0" y="-5" />
</Offset>
</Anchor>
</Anchors>
@@ -49,7 +49,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ActionLocked" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="200" y="0" />
<AbsDimension x="280" y="0" />
</Offset>
</Anchor>
</Anchors>
@@ -62,7 +62,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GrowUpwards" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="200" y="0" />
<AbsDimension x="280" y="0" />
</Offset>
</Anchor>
</Anchors>
@@ -75,7 +75,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ActionMouseover" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="200" y="0" />
<AbsDimension x="280" y="0" />
</Offset>
</Anchor>
</Anchors>
@@ -94,20 +94,14 @@
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_GenFrame" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Frame name="HealBot_Options_GenFrame">
<Size>
<AbsDimension y="95"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-135"/>
<AbsDimension x="60" y="-135"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
@@ -122,7 +116,7 @@
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="130" y="-12" />
<AbsDimension x="280" y="-12" />
</Offset>
</Anchor>
</Anchors>
@@ -134,7 +128,7 @@
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="10" y="-30" />
<AbsDimension x="0" y="-30" />
</Offset>
</Anchor>
</Anchors>
@@ -156,7 +150,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowManaBars" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="180" y="0" />
<AbsDimension x="280" y="0" />
</Offset>
</Anchor>
</Anchors>
@@ -178,7 +172,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowManaBars" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
<AbsDimension x="0" y="-5" />
</Offset>
</Anchor>
</Anchors>
@@ -203,7 +197,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GenFrame" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="10" y="-10" />
<AbsDimension x="0" y="-10" />
</Offset>
</Anchor>
</Anchors>
@@ -216,7 +210,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_HideOptions" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
<AbsDimension x="0" y="-5" />
</Offset>
</Anchor>
</Anchors>
@@ -229,7 +223,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_HideAbort" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
<AbsDimension x="0" y="-5" />
</Offset>
</Anchor>
</Anchors>
@@ -242,7 +236,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_QualityRange" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
<AbsDimension x="0" y="-5" />
</Offset>
</Anchor>
</Anchors>
@@ -255,7 +249,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ProtectPvP" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
<AbsDimension x="0" y="-5" />
</Offset>
</Anchor>
</Anchors>
+1 -1
View File
@@ -102,7 +102,7 @@ function HealBot_Options_EFClass_OnClick(this)
HealBot_Config.EmergIncCustom[HEALBOT_WARLOCK] = HealBot_Options_EFClassWarlock:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_WARRIOR] = HealBot_Options_EFClassWarrior:GetChecked() or 0;
end
if HealBot_Config.EmergIncMonitor>10 then
if HealBot_Config.EmergIncMonitor > 1 then
HealBot_Action_PartyChanged();
end
end
+18 -30
View File
@@ -5,13 +5,7 @@
<Frame name="HealBot_Options_Panel3" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<Frame name="HealBot_Options_HealTargetFrame" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Frame name="HealBot_Options_HealTargetFrame">
<Size>
<AbsDimension y="88"/>
</Size>
@@ -32,9 +26,9 @@
<Layer level="BACKGROUND">
<FontString name="HealBot_HealButtons_Text" text="HEALBOT_OPTIONS_HEAL_BUTTONS" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Anchor point="TOP">
<Offset>
<AbsDimension x="100" y="-8" />
<AbsDimension x="0" y="-8" />
</Offset>
</Anchor>
</Anchors>
@@ -47,7 +41,7 @@
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-21" />
<AbsDimension x="85" y="-21" />
</Offset>
</Anchor>
</Anchors>
@@ -60,7 +54,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GroupHeals" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="5" />
<AbsDimension x="0" y="-5" />
</Offset>
</Anchor>
</Anchors>
@@ -86,7 +80,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GroupHeals" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="122" y="5" />
<AbsDimension x="122" y="-5" />
</Offset>
</Anchor>
</Anchors>
@@ -99,7 +93,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GroupHeals" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="244" y="5" />
<AbsDimension x="244" y="-5" />
</Offset>
</Anchor>
</Anchors>
@@ -114,9 +108,9 @@
<Slider name="HealBot_Options_AlertLevel" inherits="HealBot_Options_SliderTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Anchor point="TOP">
<Offset>
<AbsDimension x="45" y="-132" />
<AbsDimension x="0" y="-132" />
</Offset>
</Anchor>
</Anchors>
@@ -142,9 +136,9 @@
<Frame name="HealBot_Options_EmergencyFilter" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT">
<Anchor point="TOP">
<Offset>
<AbsDimension x="155" y="-205" />
<AbsDimension x="40" y="-205" />
</Offset>
</Anchor>
</Anchors>
@@ -170,9 +164,9 @@
<Frame name="HealBot_Options_ExtraSort" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT">
<Anchor point="TOP">
<Offset>
<AbsDimension x="155" y="-238" />
<AbsDimension x="40" y="-238" />
</Offset>
</Anchor>
</Anchors>
@@ -198,9 +192,9 @@
<Frame name="HealBot_Options_HealthText" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT">
<Anchor point="TOP">
<Offset>
<AbsDimension x="155" y="-271" />
<AbsDimension x="40" y="-271" />
</Offset>
</Anchor>
</Anchors>
@@ -224,13 +218,7 @@
</Scripts>
</Frame>
<Frame name="HealBot_Options_EmergLFrame" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Frame name="HealBot_Options_EmergLFrame">
<Size>
<AbsDimension y="125"/>
</Size>
@@ -251,9 +239,9 @@
<Frame name="HealBot_Options_EmergencyFClass" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT">
<Anchor point="TOP">
<Offset>
<AbsDimension x="128" y="-10" />
<AbsDimension x="40" y="-10" />
</Offset>
</Anchor>
</Anchors>
+1
View File
@@ -4,4 +4,5 @@ function HealBot_Options_Integrations_OnShow(this)
HealBot_Options_Integrations_Nampower:SetChecked(HealBot_Config.HealBot_Integrations_Nampower);
HealBot_Options_Integrations_SuperWoW:SetChecked(HealBot_Config.HealBot_Integrations_SuperWoW);
HealBot_Options_Integrations_ClassicAPI:SetChecked(HealBot_Config.HealBot_Integrations_ClassicAPI);
HealBot_Options_Integrations_ShowHoTTimers:SetChecked(HealBot_Config.HealBot_Integrations_ShowHoTTimers);
end
+50 -20
View File
@@ -8,7 +8,7 @@
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="31" y="-40"/>
<AbsDimension x="100" y="-35"/>
</Offset>
</Anchor>
</Anchors>
@@ -27,7 +27,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Integrations_UnitXP" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="5"/>
<AbsDimension x="0" y="-6"/>
</Offset>
</Anchor>
</Anchors>
@@ -44,9 +44,9 @@
<CheckButton name="HealBot_Options_Integrations_SuperWoW" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Integrations_Nampower" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="31" y="-145"/>
<AbsDimension x="0" y="-60"/>
</Offset>
</Anchor>
</Anchors>
@@ -65,7 +65,7 @@
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Integrations_SuperWoW" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="5"/>
<AbsDimension x="0" y="-6"/>
</Offset>
</Anchor>
</Anchors>
@@ -80,22 +80,52 @@
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_Integrations_ShowHoTTimers" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Integrations_ClassicAPI" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-6"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
getglobal(this:GetName().."Text"):SetText("Track Player HoT Timers");
</OnLoad>
<OnClick>
HealBot_Config.HealBot_Integrations_ShowHoTTimers = this:GetChecked() and 1 or 0;
</OnClick>
</Scripts>
</CheckButton>
<Frame setAllPoints="true">
<Layers>
<Layer level="ARTWORK">
<FontString name="HealBot_Options_Integrations_NampowerInfo" inherits="GameFontHighlightSmall" justifyH="LEFT" justifyV="TOP" text="Note: For the 1-click Shapeshift auto-unshift to work smoothly, you must ENABLE 'Retry server rejected spells' in Nampower ENABLE Queue Instant Cast Spells and Queue Cast Time Spells.">
<Size x="340" y="48"/>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Integrations_Nampower" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="20" y="-4"/>
</Offset>
</Anchor>
</Anchors>
<Color r="0.7" g="0.7" b="0.7"/>
</FontString>
<FontString name="HealBot_Options_Integrations_HoTInfo" inherits="GameFontHighlightSmall" justifyH="LEFT" justifyV="TOP" text="Note: HoT Timers require Nampower to be enabled and active to provide accurate aura times.">
<Size x="340" y="30"/>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Integrations_ShowHoTTimers" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="20" y="-4"/>
</Offset>
</Anchor>
</Anchors>
<Color r="0.7" g="0.7" b="0.7"/>
</FontString>
</Layer>
</Layers>
</Frame>
</Frames>
<Layers>
<Layer level="ARTWORK">
<FontString name="HealBot_Options_Integrations_NampowerInfo" inherits="GameFontHighlightSmall" justifyH="LEFT" justifyV="TOP" text="Note: For the 1-click Shapeshift auto-unshift to work smoothly, you must ENABLE 'Retry server rejected spells' in Nampower ENABLE Queue Instant Cast Spells and Queue Cast Time Spells.">
<Size x="330" y="30"/>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="65" y="-95"/>
</Offset>
</Anchor>
</Anchors>
<Color r="0.7" g="0.7" b="0.7"/>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnShow>
HealBot_Options_Integrations_OnShow(this);
+109 -7
View File
@@ -1,6 +1,41 @@
-- HealBot Options panel file: HealBot_Options_Skins.lua
-- Split from original HealBot_Options.lua
HealBot_Font_List = {
{ text = "Friz Quadrata", file = "Fonts\\FRIZQT__.TTF" },
{ text = "Arial Narrow", file = "Fonts\\ARIALN.TTF" },
{ text = "Skurri", file = "Fonts\\skurri.ttf" },
{ text = "Morpheus", file = "Fonts\\MORPHEUS.ttf" },
}
function HealBot_Options_FontDD_OnLoad(this)
UIDropDownMenu_Initialize(this, HealBot_Options_FontDD_Initialize)
UIDropDownMenu_SetWidth(110, this)
end
function HealBot_Options_FontDD_Initialize()
local currentFont = (HealBot_Config.bfont and HealBot_Config.bfont[HealBot_Config.Current_Skin]) or "Fonts\\FRIZQT__.TTF"
for i = 1, getn(HealBot_Font_List) do
local fontItem = HealBot_Font_List[i]
local info = {}
info.text = fontItem.text
info.func = HealBot_Options_FontDD_OnClick
info.value = fontItem.file
info.checked = (currentFont == fontItem.file)
UIDropDownMenu_AddButton(info)
end
end
function HealBot_Options_FontDD_OnClick()
UIDropDownMenu_SetSelectedID(HealBot_Options_Font_Dropdown, this:GetID())
if HealBot_Options_Font_DropdownText then
HealBot_Options_Font_DropdownText:SetText(this:GetText())
end
if not HealBot_Config.bfont then HealBot_Config.bfont = {} end
HealBot_Config.bfont[HealBot_Config.Current_Skin] = this.value
HealBot_Action_ResetSkin()
end
-- HealBot_Options_BarMaxRowsS_OnValueChanged: UI handler for OnValueChanged options panel.
function HealBot_Options_BarMaxRowsS_OnValueChanged(this)
if not HealBot_Config.bmaxrows then HealBot_Config.bmaxrows = {} end
@@ -8,15 +43,41 @@ function HealBot_Options_BarMaxRowsS_OnValueChanged(this)
HealBot_Action_PartyChanged()
end
-- HealBot_Options_GridOrientation_OnClick: UI handler for OnClick options panel.
function HealBot_Options_GridOrientation_OnClick(this)
function HealBot_Options_GridOrientationDD_OnLoad(this)
UIDropDownMenu_Initialize(this, HealBot_Options_GridOrientationDD_Initialize);
UIDropDownMenu_SetWidth(110, this);
end
function HealBot_Options_GridOrientationDD_Initialize()
local orient = HealBot_Config.GridOrientation and HealBot_Config.GridOrientation[HealBot_Config.Current_Skin] or 1;
local info = {};
info.text = "Vertical (Columns)";
info.func = HealBot_Options_GridOrientationDD_OnClick;
info.value = 1;
info.checked = (orient == 1);
UIDropDownMenu_AddButton(info);
info = {};
info.text = "Horizontal (Rows)";
info.func = HealBot_Options_GridOrientationDD_OnClick;
info.value = 2;
info.checked = (orient == 2);
UIDropDownMenu_AddButton(info);
end
function HealBot_Options_GridOrientationDD_OnClick()
UIDropDownMenu_SetSelectedID(HealBot_Options_GridOrientation_Dropdown, this:GetID());
if not HealBot_Config.GridOrientation then HealBot_Config.GridOrientation = {} end
if this:GetChecked() then
HealBot_Config.GridOrientation[HealBot_Config.Current_Skin] = 2 -- Horizontal
else
HealBot_Config.GridOrientation[HealBot_Config.Current_Skin] = 1 -- Vertical
end
HealBot_Config.GridOrientation[HealBot_Config.Current_Skin] = this.value;
HealBot_Action_PartyChanged()
if (this.value == 2) then
HealBot_Options_BarMaxRowsS:Hide();
HealBot_Options_BarNumColsS:Show();
else
HealBot_Options_BarMaxRowsS:Show();
HealBot_Options_BarNumColsS:Hide();
end
end
-- HealBot_Options_NewSkin_OnTextChanged: UI handler for OnTextChanged options panel.
@@ -71,6 +132,24 @@ function HealBot_Options_NewSkinb_OnClick(this)
HealBot_Config.babortcola[HealBot_Options_NewSkin:GetText()] = HealBot_Config.babortcola[HealBot_Config.Current_Skin]
HealBot_Config.ShowHeader[HealBot_Options_NewSkin:GetText()] = HealBot_Config.ShowHeader[HealBot_Config.Current_Skin]
if not HealBot_Config.bcolormaxr then HealBot_Config.bcolormaxr = {} end
if not HealBot_Config.bcolormaxg then HealBot_Config.bcolormaxg = {} end
if not HealBot_Config.bcolormaxb then HealBot_Config.bcolormaxb = {} end
if not HealBot_Config.bcolorminr then HealBot_Config.bcolorminr = {} end
if not HealBot_Config.bcolorming then HealBot_Config.bcolorming = {} end
if not HealBot_Config.bcolorminb then HealBot_Config.bcolorminb = {} end
if not HealBot_Config.bfont then HealBot_Config.bfont = {} end
local curSkin = HealBot_Config.Current_Skin
local newSkin = HealBot_Options_NewSkin:GetText()
HealBot_Config.bcolormaxr[newSkin] = HealBot_Config.bcolormaxr[curSkin] or 0
HealBot_Config.bcolormaxg[newSkin] = HealBot_Config.bcolormaxg[curSkin] or 1
HealBot_Config.bcolormaxb[newSkin] = HealBot_Config.bcolormaxb[curSkin] or 0
HealBot_Config.bcolorminr[newSkin] = HealBot_Config.bcolorminr[curSkin] or 1
HealBot_Config.bcolorming[newSkin] = HealBot_Config.bcolorming[curSkin] or 0
HealBot_Config.bcolorminb[newSkin] = HealBot_Config.bcolorminb[curSkin] or 0
HealBot_Config.bfont[newSkin] = HealBot_Config.bfont[curSkin] or "Fonts\\FRIZQT__.TTF"
table.insert(HealBot_Skins,2,HealBot_Options_NewSkin:GetText())
HealBot_Config.Skin_ID = 2;
HealBot_Config.Skins = HealBot_Skins; HealBot_Config.Current_Skin = HealBot_Options_NewSkin:GetText();
@@ -118,6 +197,13 @@ function HealBot_Options_DeleteSkin_OnClick(this)
HealBot_Config.babortcolb[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.babortcola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.ShowHeader[HealBot_Options_SkinsText:GetText()] = nil
if HealBot_Config.bcolormaxr then HealBot_Config.bcolormaxr[HealBot_Options_SkinsText:GetText()] = nil end
if HealBot_Config.bcolormaxg then HealBot_Config.bcolormaxg[HealBot_Options_SkinsText:GetText()] = nil end
if HealBot_Config.bcolormaxb then HealBot_Config.bcolormaxb[HealBot_Options_SkinsText:GetText()] = nil end
if HealBot_Config.bcolorminr then HealBot_Config.bcolorminr[HealBot_Options_SkinsText:GetText()] = nil end
if HealBot_Config.bcolorming then HealBot_Config.bcolorming[HealBot_Options_SkinsText:GetText()] = nil end
if HealBot_Config.bcolorminb then HealBot_Config.bcolorminb[HealBot_Options_SkinsText:GetText()] = nil end
if HealBot_Config.bfont then HealBot_Config.bfont[HealBot_Options_SkinsText:GetText()] = nil end
table.remove(HealBot_Skins,HealBot_Config.Skin_ID)
HealBot_Config.Skin_ID = 1;
HealBot_Config.Skins = HealBot_Skins;
@@ -158,3 +244,19 @@ function HealBot_Options_Skins_OnSelect()
HealBot_Options_SetSkins()
end
end
function HealBot_Options_TestBarsButton_OnClick(this)
if HealBot_Config.TestBarsOn then
HealBot_Config.TestBarsOn = false
this:SetText(HEALBOT_OPTIONS_TESTBARS.." OFF")
else
HealBot_Config.TestBarsOn = true
this:SetText(HEALBOT_OPTIONS_TESTBARS.." ON")
end
HealBot_Action_PartyChanged()
end
function HealBot_Options_NumTestBars_OnValueChanged(this)
HealBot_Config.numTestBars = this:GetValue()
if HealBot_Config.TestBarsOn then HealBot_Action_PartyChanged() end
end
+460 -540
View File
File diff suppressed because it is too large Load Diff
+283 -271
View File
@@ -2,307 +2,319 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_Spells.lua" />
<Frame name="HealBot_Options_Panel2" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<Frame name="HealBot_Options_KeysFrame" inherits="OptionFrameBoxTemplate">
<Frame name="HealBot_Options_Panel2" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<Frame name="HealBot_Options_KeysFrame">
<Size>
<AbsDimension y="268"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-30"/>
<AbsDimension x="20" y="-30"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="0"/>
<AbsDimension x="-20" y="-30"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_ComboButtons_ButtonText1" text="HEALBOT_OPTIONS_USEBUTTONS" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="110" y="-10" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<Slider name="HealBot_Options_Dummy" hidden="true" inherits="HealBot_Options_SliderTemplate">
<Anchors>
<Anchor point="TOP">
<Offset>
<AbsDimension x="0" y="0" />
</Offset>
</Anchor>
</Anchors>
</Slider>
<Frame name="HealBot_Options_ComboClassButton">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_ComboButtons_ButtonText" text="HEALBOT_OPTIONS_COMBOBUTTON" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Dummy" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="-5" y="-25" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
</Frame>
<CheckButton name="HealBot_ComboButtons_Button1" inherits="SendMailRadioButtonTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Dummy" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="40" y="-30"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTONLEFT)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_ComboButtons_ButtonText1" text="HEALBOT_OPTIONS_USEBUTTONS" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOP">
<Offset>
<AbsDimension x="0" y="-5"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<Slider name="HealBot_Options_Dummy" hidden="true" inherits="HealBot_Options_SliderTemplate">
<Anchors>
<Anchor point="TOP">
<Offset>
<AbsDimension x="0" y="0"/>
</Offset>
</Anchor>
</Anchors>
</Slider>
<Frame name="HealBot_Options_ComboClassButton">
<Size>
<AbsDimension x="40" y="16"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Dummy" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-22"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_ComboButtons_ButtonText" text="HEALBOT_OPTIONS_COMBOBUTTON" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="LEFT">
<Offset>
<AbsDimension x="0" y="0"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
</Frame>
<CheckButton name="HealBot_ComboButtons_Button2" inherits="SendMailRadioButtonTemplate" id="2">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_ComboButtons_Button1" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="40" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTONMIDDLE)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_ComboButtons_Button3" inherits="SendMailRadioButtonTemplate" id="3">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_ComboButtons_Button2" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="50" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTONRIGHT)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_ComboButtons_Button4" inherits="SendMailRadioButtonTemplate" id="4">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_ComboButtons_Button1" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="0" y="-18"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTON4)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_ComboButtons_Button5" inherits="SendMailRadioButtonTemplate" id="5">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_ComboButtons_Button4" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="55" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTON5)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_ComboButtons_Button1" inherits="SendMailRadioButtonTemplate" id="1">
<Anchors>
<Anchor point="LEFT" relativeTo="HealBot_Options_ComboClassButton" relativePoint="RIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTONLEFT)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<EditBox name="HealBot_Options_Click" inherits="HealBot_Options_EditBoxTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Dummy" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="-5" y="-68"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_CLICK)
</OnLoad>
<OnTextChanged>
HealBot_Options_Click_OnTextChanged(this)
</OnTextChanged>
</Scripts>
</EditBox>
<EditBox name="HealBot_Options_Shift" inherits="HealBot_Options_EditBoxTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Click" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-20"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_SHIFT)
</OnLoad>
<OnTextChanged>
HealBot_Options_Shift_OnTextChanged(this)
</OnTextChanged>
</Scripts>
</EditBox>
<EditBox name="HealBot_Options_Ctrl" inherits="HealBot_Options_EditBoxTemplate">
<Anchors>
<Anchor point="TOPRIGHT" relativeTo="HealBot_Options_Shift" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="0" y="-20"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_CTRL)
</OnLoad>
<OnTextChanged>
HealBot_Options_Ctrl_OnTextChanged(this)
</OnTextChanged>
</Scripts>
</EditBox>
<EditBox name="HealBot_Options_ShiftCtrl" inherits="HealBot_Options_EditBoxTemplate">
<Anchors>
<Anchor point="TOPRIGHT" relativeTo="HealBot_Options_Ctrl" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="0" y="-20"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_SHIFTCTRL)
</OnLoad>
<OnTextChanged>
HealBot_Options_ShiftCtrl_OnTextChanged(this)
</OnTextChanged>
</Scripts>
</EditBox>
<CheckButton name="HealBot_Options_EnableHealthy" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShiftCtrl" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="25" y="-4" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EnableHealthy_OnLoad(this,HEALBOT_OPTIONS_ENABLEHEALTHY)</OnLoad>
<OnClick>HealBot_Options_EnableHealthy_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_ComboButtons_Button2" inherits="SendMailRadioButtonTemplate" id="2">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_ComboButtons_Button1" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="40" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTONMIDDLE)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_ComboButtons_Button3" inherits="SendMailRadioButtonTemplate" id="3">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_ComboButtons_Button2" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="50" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTONRIGHT)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_ComboButtons_Button4" inherits="SendMailRadioButtonTemplate" id="4">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_ComboButtons_Button1" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-4"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTON4)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_ComboButtons_Button5" inherits="SendMailRadioButtonTemplate" id="5">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_ComboButtons_Button2" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-4"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_ComboButtons_Button_OnLoad(this,HEALBOT_OPTIONS_BUTTON5)</OnLoad>
<OnClick>HealBot_ComboButtons_Button_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<EditBox name="HealBot_Options_Click" inherits="HealBot_Options_EditBoxTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Dummy" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-68"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_CLICK)
</OnLoad>
<OnTextChanged>
HealBot_Options_Click_OnTextChanged(this)
</OnTextChanged>
</Scripts>
</EditBox>
<EditBox name="HealBot_Options_Shift" inherits="HealBot_Options_EditBoxTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Click" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-20"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_SHIFT)
</OnLoad>
<OnTextChanged>
HealBot_Options_Shift_OnTextChanged(this)
</OnTextChanged>
</Scripts>
</EditBox>
<EditBox name="HealBot_Options_Ctrl" inherits="HealBot_Options_EditBoxTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Shift" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-20"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_CTRL)
</OnLoad>
<OnTextChanged>
HealBot_Options_Ctrl_OnTextChanged(this)
</OnTextChanged>
</Scripts>
</EditBox>
<EditBox name="HealBot_Options_ShiftCtrl" inherits="HealBot_Options_EditBoxTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Ctrl" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-20"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
HealBot_Options_EditBox_OnLoad(this,HEALBOT_OPTIONS_SHIFTCTRL)
</OnLoad>
<OnTextChanged>
HealBot_Options_ShiftCtrl_OnTextChanged(this)
</OnTextChanged>
</Scripts>
</EditBox>
<CheckButton name="HealBot_Options_EnableHealthy" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShiftCtrl" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-4"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EnableHealthy_OnLoad(this,HEALBOT_OPTIONS_ENABLEHEALTHY)</OnLoad>
<OnClick>HealBot_Options_EnableHealthy_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
<Frame name="HealBot_Options_TooltipsPanel" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Frame name="HealBot_Options_TooltipsPanel">
<Size>
<AbsDimension y="118"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EnableHealthy" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="20" y="-300"/>
<AbsDimension x="0" y="-12"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Anchor point="TOPRIGHT" relativeTo="HealBot_Options_ShiftCtrl" relativePoint="BOTTOMRIGHT">
<Offset>
<AbsDimension x="-20" y="-180"/>
<AbsDimension x="0" y="-12"/>
</Offset>
</Anchor>
</Anchors>
<Frames>
<CheckButton name="HealBot_Options_ShowTooltip" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_TooltipsPanel" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="20" y="-4" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowTooltip_OnLoad(this,HEALBOT_OPTIONS_SHOWTOOLTIP)</OnLoad>
<OnClick>HealBot_Options_ShowTooltip_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_TooltipPos" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowTooltip" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="68" y="-2" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_TooltipPos_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_ShowTooltipTarget" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_TooltipsPanel" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="20" y="-30" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowTooltipTarget_OnLoad(this,HEALBOT_OPTIONS_SHOWUNITTOOLTIP)</OnLoad>
<OnClick>HealBot_Options_ShowTooltipTarget_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ShowTooltipSpellDetail" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_TooltipsPanel" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="20" y="-55" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowTooltipSpellDetail_OnLoad(this,HEALBOT_OPTIONS_SHOWDETTOOLTIP)</OnLoad>
<OnClick>HealBot_Options_ShowTooltipSpellDetail_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ShowTooltipInstant" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_TooltipsPanel" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="20" y="-80" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowTooltipInstant_OnLoad(this,HEALBOT_OPTIONS_SHOWRECTOOLTIP)</OnLoad>
<OnClick>HealBot_Options_ShowTooltipInstant_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Frames>
<CheckButton name="HealBot_Options_ShowTooltip" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="0" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowTooltip_OnLoad(this,HEALBOT_OPTIONS_SHOWTOOLTIP)</OnLoad>
<OnClick>HealBot_Options_ShowTooltip_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
</Frames>
</Frame>
<Frame name="HealBot_Options_TooltipPos" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="15" y="2"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_TooltipPos_OnLoad(this)</OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_ShowTooltipTarget" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowTooltip" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-4"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowTooltipTarget_OnLoad(this,HEALBOT_OPTIONS_SHOWUNITTOOLTIP)</OnLoad>
<OnClick>HealBot_Options_ShowTooltipTarget_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ShowTooltipSpellDetail" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowTooltipTarget" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-4"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowTooltipSpellDetail_OnLoad(this,HEALBOT_OPTIONS_SHOWDETTOOLTIP)</OnLoad>
<OnClick>HealBot_Options_ShowTooltipSpellDetail_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ShowTooltipInstant" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowTooltipSpellDetail" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-4"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowTooltipInstant_OnLoad(this,HEALBOT_OPTIONS_SHOWRECTOOLTIP)</OnLoad>
<OnClick>HealBot_Options_ShowTooltipInstant_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
</Frames>
</Frame>
</Ui>
+362 -72
View File
@@ -41,7 +41,12 @@ function HealBot_HealthColor(unit, hlth, maxhlth)
return dr, dg, db, HealBot_Config.Barcola[HealBot_Config.Current_Skin];
end
local text = UnitName(unit);
local text
if string.find(unit, "^Test") then
text = HealBot_Model.units[unit] and HealBot_Model.units[unit].name or unit
else
text = UnitName(unit) or unit
end
if not HealBot_HealsIn[text] then
HealBot_HealsIn[text] = 0;
end
@@ -64,18 +69,33 @@ function HealBot_HealthColor(unit, hlth, maxhlth)
end
local colorMode = HealBot_Config.bcolormode[HealBot_Config.Current_Skin] or 1
if colorMode == 2 and HealBot_Model and HealBot_Model.units[unit] and HealBot_Model.units[unit].englishClass and RAID_CLASS_COLORS and RAID_CLASS_COLORS[HealBot_Model.units[unit].englishClass] then
if colorMode == 2 and string.find(unit, "pet") then
r, g, b = 0.4, 0.9, 0.6 -- Mint color
elseif colorMode == 2 and HealBot_Model and HealBot_Model.units[unit] and HealBot_Model.units[unit].englishClass and RAID_CLASS_COLORS and RAID_CLASS_COLORS[HealBot_Model.units[unit].englishClass] then
local engClass = HealBot_Model.units[unit].englishClass
r = RAID_CLASS_COLORS[engClass].r
g = RAID_CLASS_COLORS[engClass].g
b = RAID_CLASS_COLORS[engClass].b
elseif colorMode == 2 and string.find(unit, "pet") then
r, g, b = 0.4, 0.9, 0.6 -- Mint color
else
if pct >= 0.98 then r = 0.0; end
if pct < 0.98 and pct >= 0.65 then r = 2.94 - (pct * 3); end
if pct <= 0.64 and pct > 0.31 then g = (pct - 0.31) * 3; end
if pct <= 0.31 then g = 0.0; end
local skin = HealBot_Config.Current_Skin
local maxR = HealBot_Config.bcolormaxr and HealBot_Config.bcolormaxr[skin] or 0.0
local maxG = HealBot_Config.bcolormaxg and HealBot_Config.bcolormaxg[skin] or 1.0
local maxB = HealBot_Config.bcolormaxb and HealBot_Config.bcolormaxb[skin] or 0.0
local minR = HealBot_Config.bcolorminr and HealBot_Config.bcolorminr[skin] or 1.0
local minG = HealBot_Config.bcolorming and HealBot_Config.bcolorming[skin] or 0.0
local minB = HealBot_Config.bcolorminb and HealBot_Config.bcolorminb[skin] or 0.0
if maxR == 0 and maxG == 1 and maxB == 0 and minR == 1 and minG == 0 and minB == 0 then
if pct >= 0.98 then r = 0.0; end
if pct < 0.98 and pct >= 0.65 then r = 2.94 - (pct * 3); end
if pct <= 0.64 and pct > 0.31 then g = (pct - 0.31) * 3; end
if pct <= 0.31 then g = 0.0; end
else
r = minR + (maxR - minR) * pct
g = minG + (maxG - minG) * pct
b = minB + (maxB - minB) * pct
end
end
return r, g, b, a;
end
@@ -246,30 +266,49 @@ function HealBot_Action_EnableButton(button)
bar.txt:SetTextColor(sr, sg, sb, sa);
local fontName, fontHeight, fontFlags = bar.txt:GetFont()
local fontOutline = HealBot_Config.bfontoutline[HealBot_Config.Current_Skin] or 0
if fontOutline == 1 then
bar.txt:SetFont(fontName, fontHeight, "OUTLINE")
else
bar.txt:SetFont(fontName, fontHeight, "")
local expectedFlags = fontOutline == 1 and "OUTLINE" or ""
local expectedFont = (HealBot_Config.bfont and HealBot_Config.bfont[HealBot_Config.Current_Skin]) or fontName
if fontFlags ~= expectedFlags or fontName ~= expectedFont then
bar.txt:SetFont(expectedFont, fontHeight, expectedFlags)
end
local iconSize = HealBot_Config.biconsize[HealBot_Config.Current_Skin] or 12
for i = 1, 10 do
local icon = getglobal(button:GetName() .. "BarIcon" .. i)
local icon = button["icon"..i]
if not icon then
icon = getglobal(button:GetName() .. "BarIcon" .. i)
button["icon"..i] = icon
end
if icon then
if HealBot_UnitIcons and HealBot_UnitIcons[unit] and HealBot_UnitIcons[unit][i] then
icon:SetTexture(HealBot_UnitIcons[unit][i])
icon:SetWidth(iconSize)
icon:SetHeight(iconSize)
icon:Show()
local currentTexture = icon:GetTexture()
local newTexture = HealBot_UnitIcons[unit][i]
if currentTexture ~= newTexture then
icon:SetTexture(newTexture)
end
if icon:GetWidth() ~= iconSize then
icon:SetWidth(iconSize)
icon:SetHeight(iconSize)
end
if not icon:IsVisible() then
icon:Show()
end
else
icon:Hide()
if icon:IsVisible() then
icon:Hide()
end
end
end
end
local raidIcon = getglobal(button:GetName() .. "BarRaidIcon")
if raidIcon then
local index = GetRaidTargetIndex(unit)
local index
if not string.find(unit, "^Test") then
index = GetRaidTargetIndex(unit)
end
if index then
SetRaidTargetIconTexture(raidIcon, index)
raidIcon:Show()
@@ -298,15 +337,34 @@ end
-- HealBot_Action_ResetSkin: Internal utility: HealBot_Action_ResetSkin
function HealBot_Action_ResetSkin()
HealBot_Action_PartyChanged()
local skin = HealBot_Config.Current_Skin
local bfont = (HealBot_Config.bfont and HealBot_Config.bfont[skin]) or "Fonts\\FRIZQT__.TTF"
local btextheight = (HealBot_Config.btextheight and HealBot_Config.btextheight[skin]) or 10
local fontOutline = (HealBot_Config.bfontoutline and HealBot_Config.bfontoutline[skin]) or 0
local expectedFlags = fontOutline == 1 and "OUTLINE" or ""
if HealBot_Action_OptionsButton and HealBot_Action_OptionsButton:GetFontString() then
HealBot_Action_OptionsButton:GetFontString():SetFont(bfont, btextheight, expectedFlags)
end
if HealBot_Action_AbortButton and HealBot_Action_AbortButton:GetFontString() then
HealBot_Action_AbortButton:GetFontString():SetFont(bfont, btextheight, expectedFlags)
end
for j = 1, 20 do
local headerobj = getglobal("HealBot_Action_Header" .. j)
if headerobj and headerobj:GetFontString() then
headerobj:GetFontString():SetFont(bfont, btextheight, expectedFlags)
end
end
if HealBot_Options:IsVisible() then
HealBot_Action_SetTexture(HealBot_DiseaseColorpick, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_MagicColorpick, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_PoisonColorpick, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_CurseColorpick, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_EnTextColorpick, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_EnTextColorpickin, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_DisTextColorpick, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_DebTextColorpick, HealBot_Config.btexture[HealBot_Config.Current_Skin])
HealBot_Action_SetTexture(HealBot_DiseaseColorpick, HealBot_Config.btexture[skin])
HealBot_Action_SetTexture(HealBot_MagicColorpick, HealBot_Config.btexture[skin])
HealBot_Action_SetTexture(HealBot_PoisonColorpick, HealBot_Config.btexture[skin])
HealBot_Action_SetTexture(HealBot_CurseColorpick, HealBot_Config.btexture[skin])
HealBot_Action_SetTexture(HealBot_EnTextColorpick, HealBot_Config.btexture[skin])
HealBot_Action_SetTexture(HealBot_EnTextColorpickin, HealBot_Config.btexture[skin])
HealBot_Action_SetTexture(HealBot_DisTextColorpick, HealBot_Config.btexture[skin])
HealBot_Action_SetTexture(HealBot_DebTextColorpick, HealBot_Config.btexture[skin])
HealBot_SetSkinColours()
end
end
@@ -347,6 +405,13 @@ function HealBot_Action_PositionButton(button, OsetX, OsetY, bwidth, bheight, ch
headerno = headerno + 1;
local headerobj = getglobal("HealBot_Action_Header" .. headerno);
headerobj:SetText(header)
local bfont = (HealBot_Config.bfont and HealBot_Config.bfont[HealBot_Config.Current_Skin]) or "Fonts\\FRIZQT__.TTF"
local btextheight = (HealBot_Config.btextheight and HealBot_Config.btextheight[HealBot_Config.Current_Skin]) or 10
local fontOutline = (HealBot_Config.bfontoutline and HealBot_Config.bfontoutline[HealBot_Config.Current_Skin]) or 0
local expectedFlags = fontOutline == 1 and "OUTLINE" or ""
if headerobj:GetFontString() then
headerobj:GetFontString():SetFont(bfont, btextheight, expectedFlags)
end
headerobj:Show();
headerobj:ClearAllPoints();
headerobj:SetHeight(bheight);
@@ -383,6 +448,13 @@ function HealBot_Action_PositionButtonHorizontal(button, OsetX, OsetY, bwidth, b
headerno = headerno + 1;
local headerobj = getglobal("HealBot_Action_Header" .. headerno);
headerobj:SetText(header)
local bfont = (HealBot_Config.bfont and HealBot_Config.bfont[HealBot_Config.Current_Skin]) or "Fonts\\FRIZQT__.TTF"
local btextheight = (HealBot_Config.btextheight and HealBot_Config.btextheight[HealBot_Config.Current_Skin]) or 10
local fontOutline = (HealBot_Config.bfontoutline and HealBot_Config.bfontoutline[HealBot_Config.Current_Skin]) or 0
local expectedFlags = fontOutline == 1 and "OUTLINE" or ""
if headerobj:GetFontString() then
headerobj:GetFontString():SetFont(bfont, btextheight, expectedFlags)
end
headerobj:Show();
headerobj:ClearAllPoints();
headerobj:SetHeight(bheight);
@@ -441,8 +513,10 @@ end
-- HealBot_Action_SetHealButton: Assigns a unit string to a grid button slot.
function HealBot_Action_SetHealButton(index, unit)
if not index then
HealBot_Action_HealButtons = {};
HealBot_Action_UnitButtons = {};
for k in pairs(HealBot_Action_HealButtons) do HealBot_Action_HealButtons[k] = nil end
for k in pairs(HealBot_Action_UnitButtons) do
HealBot_Action_UnitButtons[k] = nil
end
return nil
end
local button = getglobal("HealBot_Action_HealUnit" .. index);
@@ -495,10 +569,12 @@ function HealBot_Action_PartyChanged()
end
end
for j = 1, 15 do
for j = 1, 20 do
local headerobj = getglobal("HealBot_Action_Header" .. j);
headerobj:SetText(" ")
headerobj:Hide();
if headerobj then
headerobj:SetText(" ")
headerobj:Hide();
end
end
local bwidth = HealBot_Config.bwidth[HealBot_Config.Current_Skin] or 85;
@@ -524,7 +600,52 @@ function HealBot_Action_PartyChanged()
local i = 0;
local last = 0;
local GroupValid = numBars;
last = last + 6
if HealBot_Config.TestBarsOn then
local testBars = HealBot_Config.numTestBars or 25
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
HeaderPos[i + 1] = HEALBOT_OPTIONS_TESTBARS or "Test Bars"
end
local testClasses = {"PRIEST", "DRUID", "SHAMAN", "PALADIN", "WARRIOR", "MAGE", "WARLOCK", "HUNTER", "ROGUE"}
local testNames = {"Arthas", "Illidan", "Sylvanas", "Thrall", "Jaina", "Uther", "Grommash", "Malfurion", "Tyrande", "Guldan", "Kael", "Rexxar", "Varian", "Voljin", "Baine"}
for j = 1, testBars do
i = i + 1
local unit = "Test" .. j
HealBot_Action_SetHealButton(i, unit)
if not HealBot_Model.units[unit] then
local rClass = testClasses[math.random(1, #testClasses)]
local rName = testNames[math.random(1, #testNames)] .. j
local mHealth = math.random(4000, 8000)
local cHealth = math.random(1, mHealth)
local pt = 0
if rClass == "WARRIOR" then pt = 1 elseif rClass == "ROGUE" then pt = 3 end
HealBot_Model.units[unit] = { name = rName, guid = "TestGuid"..j, class = rClass, englishClass = rClass, health = cHealth, maxHealth = mHealth, mana = 2000, maxMana = 4000, powerType = pt, incomingHeal = 0, hasAggro = false, range = 1 }
if not HealBot_UnitIcons then HealBot_UnitIcons = {} end
HealBot_UnitIcons[unit] = {}
local testIcons = {
"Interface\\Icons\\Spell_Holy_Renew",
"Interface\\Icons\\Spell_Nature_Rejuvenation",
"Interface\\Icons\\Spell_Nature_ResistNature", -- Regrowth
"Interface\\Icons\\Spell_Holy_PowerWordShield",
"Interface\\Icons\\Spell_Holy_Excorcism" -- Fear Ward
}
-- Shuffle icons
for k = #testIcons, 2, -1 do
local j = math.random(k)
testIcons[k], testIcons[j] = testIcons[j], testIcons[k]
end
local numIcons = math.random(0, 3)
for k = 1, numIcons do
HealBot_UnitIcons[unit][k] = testIcons[k]
end
end
numBars = numBars + 1
end
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
numBars = numBars + 1
numHeaders = numHeaders + 1
end
else
last = last + 6
if HealBot_Config.GroupHeals == 1 then
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
HeaderPos[i + 1] = HEALBOT_OPTIONS_GROUPHEALS
@@ -837,44 +958,47 @@ function HealBot_Action_PartyChanged()
HeaderPos[i + 1] = nil;
numBars = numBars - 1;
end
HealBot_ReleaseTable(order);
HealBot_ReleaseTable(units);
end
last = last + 40
local PetsValid = numBars;
if HealBot_Config.PetHeals == 1 then
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
HeaderPos[i + 1] = HEALBOT_OPTIONS_PETHEALS
numBars = numBars + 1;
numHeaders = numHeaders + 1;
end
if GetNumRaidMembers() > 0 then
for j = 1, 40 do
local unit = "raidpet" .. j;
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
i = i + 1;
HealBot_Action_SetHealButton(i, unit);
numBars = numBars + 1;
end
if i == last then break end
end
else
local petUnits = { "pet", "partypet1", "partypet2", "partypet3", "partypet4" };
for _, unit in ipairs(petUnits) do
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
i = i + 1;
HealBot_Action_SetHealButton(i, unit);
numBars = numBars + 1;
end
if i == last then break end
end
end
HealBot_ReleaseTable(order);
HealBot_ReleaseTable(units);
last = last + 40
local PetsValid = numBars;
if HealBot_Config.PetHeals == 1 then
if HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
HeaderPos[i + 1] = HEALBOT_OPTIONS_PETHEALS
numBars = numBars + 1;
numHeaders = numHeaders + 1;
end
if numBars == PetsValid + 1 and HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
HeaderPos[PetsValid + 1] = nil;
numBars = numBars - 1;
numHeaders = numHeaders - 1;
if GetNumRaidMembers() > 0 then
for j = 1, 40 do
local unit = "raidpet" .. j;
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
i = i + 1;
HealBot_Action_SetHealButton(i, unit);
numBars = numBars + 1;
end
if i == last then break end
end
else
if not HealBot_PetUnits then
HealBot_PetUnits = { "pet", "partypet1", "partypet2", "partypet3", "partypet4" };
end
for _, unit in ipairs(HealBot_PetUnits) do
if not HealBot_Action_UnitButtons[unit] and HealBot_MayHeal(unit) then
i = i + 1;
HealBot_Action_SetHealButton(i, unit);
numBars = numBars + 1;
end
if i == last then break end
end
end
end
if numBars == PetsValid + 1 and HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] == 1 then
HeaderPos[PetsValid + 1] = nil;
numBars = numBars - 1;
numHeaders = numHeaders - 1;
end
local bpadding = (HealBot_Config.bpadding and HealBot_Config.bpadding[HealBot_Config.Current_Skin]) or 10
local OffsetY = bpadding;
@@ -988,10 +1112,17 @@ function HealBot_Action_PartyChanged()
HealBot_Grid_Limit = limit;
HealBot_Grid_NumBars = numBars;
local bfont = (HealBot_Config.bfont and HealBot_Config.bfont[HealBot_Config.Current_Skin]) or "Fonts\\FRIZQT__.TTF"
local fontOutline = (HealBot_Config.bfontoutline and HealBot_Config.bfontoutline[HealBot_Config.Current_Skin]) or 0
local expectedFlags = fontOutline == 1 and "OUTLINE" or ""
if HealBot_Config.HideOptions == 1 then
HealBot_Action_OptionsButton:Hide();
else
HealBot_Action_OptionsButton:SetPoint("BOTTOM", "HealBot_Action", "BOTTOM", 0, bpadding);
if HealBot_Action_OptionsButton:GetFontString() then
HealBot_Action_OptionsButton:GetFontString():SetFont(bfont, btextheight, expectedFlags)
end
HealBot_Action_OptionsButton:Show();
MaxOffsetY = MaxOffsetY + 30;
end
@@ -1007,6 +1138,7 @@ function HealBot_Action_PartyChanged()
bar.txt = getglobal(bar:GetName() .. "_text");
bar.txt:SetTextColor(sr, sg, sb, sa);
bar.txt:SetText(HEALBOT_ACTION_ABORT);
bar.txt:SetFont(bfont, btextheight, expectedFlags);
HealBot_Action_SetTexture(bar, btexture);
bar:SetMinMaxValues(0, 100);
bar:SetValue(100);
@@ -1054,8 +1186,8 @@ end
function HealBot_Action_Reset()
HealBot_Action:ClearAllPoints();
HealBot_Action:SetPoint("TOP", "MinimapCluster", "BOTTOM", 7, 10);
HealBot_Action_HealTarget = {};
HealBot_Action_HealFocus = {};
for k in pairs(HealBot_Action_HealTarget) do HealBot_Action_HealTarget[k] = nil end
for k in pairs(HealBot_Action_HealFocus) do HealBot_Action_HealFocus[k] = nil end
HealBot_Action_PartyChanged();
end
@@ -1132,7 +1264,10 @@ function HealBot_Action_AppendUnit(unit)
local btexture = (HealBot_Config.btexture and HealBot_Config.btexture[HealBot_Config.Current_Skin]) or 5
HealBot_Action_SetTexture(bar, btexture)
local btextheight = (HealBot_Config.btextheight and HealBot_Config.btextheight[HealBot_Config.Current_Skin]) or 10
bar.txt:SetTextHeight(btextheight)
local bfont = (HealBot_Config.bfont and HealBot_Config.bfont[HealBot_Config.Current_Skin]) or "Fonts\\FRIZQT__.TTF"
local fontOutline = (HealBot_Config.bfontoutline and HealBot_Config.bfontoutline[HealBot_Config.Current_Skin]) or 0
local expectedFlags = fontOutline == 1 and "OUTLINE" or ""
bar.txt:SetFont(bfont, btextheight, expectedFlags)
bar2:SetHeight(bheight)
HealBot_Action_SetTexture(bar2, btexture)
@@ -1153,7 +1288,7 @@ end
function HealBot_Action_AppendNewUnits()
if not HealBot_Grid_LastI then return end
local unitsToCheck = {}
local unitsToCheck = HealBot_GetTable()
-- Gather units based on config, similar to PartyChanged
if HealBot_Config.GroupHeals == 1 then
@@ -1220,4 +1355,159 @@ function HealBot_Action_AppendNewUnits()
HealBot_Action_AppendUnit(unit)
end
end
HealBot_ReleaseTable(unitsToCheck)
end
local HealBot_PlayerHoTsListFrame = nil
local HealBot_PlayerHoTFrames = {}
local HealBot_PlayerHoTs_ValidHoTs = {
["Renew"] = "Interface\\Icons\\Spell_Holy_Renew",
["Rejuvenation"] = "Interface\\Icons\\Spell_Nature_Rejuvenation",
["Regrowth"] = "Interface\\Icons\\Spell_Nature_ResistNature",
["Power Word: Shield"] = "Interface\\Icons\\Spell_Holy_PowerWordShield",
}
local HealBot_PlayerHoTs_ListCache = {}
local function HealBot_PlayerHoTs_SortComparator(a, b)
return (a.expires or 0) < (b.expires or 0)
end
function HealBot_Action_UpdatePlayerHoTs()
if not HealBot_PlayerHoTsListFrame then
HealBot_PlayerHoTsListFrame = CreateFrame("Frame", "HealBot_PlayerHoTsListFrame", HealBot_Action)
HealBot_PlayerHoTsListFrame:SetWidth(128)
HealBot_PlayerHoTsListFrame:SetHeight(1)
HealBot_PlayerHoTsListFrame:SetPoint("TOPLEFT", HealBot_Action, "BOTTOMLEFT", 0, -2)
HealBot_PlayerHoTsListFrame:Show()
end
if HealBot_Config.HealBot_Integrations_ShowHoTTimers ~= 1 then
HealBot_PlayerHoTsListFrame:Hide()
return
else
HealBot_PlayerHoTsListFrame:Show()
end
local currentTime = GetTime()
-- Clear cache instead of reallocating
local numHoTs = 0
if HealBot_Integrations_Nampower_Active and HealBot_Nampower_Auras then
for targetName, auras in pairs(HealBot_Nampower_Auras) do
for spellName, expiration in pairs(auras) do
if HealBot_PlayerHoTs_ValidHoTs[spellName] then
if expiration > currentTime then
numHoTs = numHoTs + 1
if not HealBot_PlayerHoTs_ListCache[numHoTs] then
HealBot_PlayerHoTs_ListCache[numHoTs] = {}
end
HealBot_PlayerHoTs_ListCache[numHoTs].name = targetName
HealBot_PlayerHoTs_ListCache[numHoTs].spell = spellName
HealBot_PlayerHoTs_ListCache[numHoTs].expires = expiration
end
end
end
end
end
-- Blank out remaining cache entries so sort doesn't read them
for i = numHoTs + 1, table.getn(HealBot_PlayerHoTs_ListCache) do
HealBot_PlayerHoTs_ListCache[i].expires = 9999999999
end
-- Sort only the active portion by shifting expired ones to the end
table.sort(HealBot_PlayerHoTs_ListCache, HealBot_PlayerHoTs_SortComparator)
for i = 1, math.max(numHoTs, table.getn(HealBot_PlayerHoTFrames)) do
local frame = HealBot_PlayerHoTFrames[i]
if i <= numHoTs then
if not frame then
frame = CreateFrame("Frame", "HealBot_PlayerHoT" .. i, HealBot_PlayerHoTsListFrame)
frame:SetWidth(128)
frame:SetHeight(16)
if i == 1 then
frame:SetPoint("TOPLEFT", HealBot_PlayerHoTsListFrame, "TOPLEFT", 0, 0)
else
frame:SetPoint("TOPLEFT", HealBot_PlayerHoTFrames[i-1], "BOTTOMLEFT", 0, -2)
end
local icon = frame:CreateTexture(nil, "ARTWORK")
icon:SetWidth(14)
icon:SetHeight(14)
icon:SetPoint("LEFT", frame, "LEFT", 2, 0)
frame.icon = icon
local text = frame:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
text:SetPoint("LEFT", icon, "RIGHT", 4, 0)
text:SetJustifyH("LEFT")
frame.text = text
HealBot_PlayerHoTFrames[i] = frame
end
local hot = HealBot_PlayerHoTs_ListCache[i]
local timeLeft = math.floor(hot.expires - currentTime)
-- Resolve GUID to Name
if not HealBot_Nampower_NameCache then HealBot_Nampower_NameCache = HealBot_GetTable() end
local dispName = HealBot_Nampower_NameCache[hot.name]
if not dispName then
dispName = hot.name
local resolved = false
local unitID = HealBot_Model:GetUnitByGUID(hot.name) or HealBot_Model:GetUnitIDByName(hot.name)
if unitID then
local n = UnitName(unitID)
if n then
dispName = n
resolved = true
end
elseif string.sub(hot.name, 1, 2) == "0x" or string.sub(hot.name, 1, 2) == "0X" then
if HealBot_PlayerGUID and string.lower(HealBot_PlayerGUID) == string.lower(hot.name) then
dispName = UnitName("player") or "Player"
resolved = true
elseif HealBot_GetUnitGUID then
if string.lower(HealBot_GetUnitGUID("player") or "") == string.lower(hot.name) then
dispName = UnitName("player") or "Player"
resolved = true
elseif string.lower(HealBot_GetUnitGUID("target") or "") == string.lower(hot.name) then
dispName = UnitName("target") or "Target"
resolved = true
elseif string.lower(HealBot_GetUnitGUID("mouseover") or "") == string.lower(hot.name) then
dispName = UnitName("mouseover") or "Mouseover"
resolved = true
end
end
end
if resolved then
HealBot_Nampower_NameCache[hot.name] = dispName
elseif string.sub(hot.name, 1, 2) == "0x" then
dispName = "Unknown"
end
end
local spellId = HealBot_GetSpellId and HealBot_GetSpellId(hot.spell) or nil
local tex = HealBot_PlayerHoTs_ValidHoTs[hot.spell] or "Interface\\Icons\\INV_Misc_QuestionMark"
if spellId then
tex = GetSpellTexture(spellId, "BOOKTYPE_SPELL") or tex
end
frame.icon:SetTexture(tex)
frame.text:SetText(dispName .. ": " .. timeLeft .. "s")
frame.text:SetTextColor(0.8, 1, 0.8)
frame:Show()
else
if frame then
frame:Hide()
end
end
end
HealBot_PlayerHoTsListFrame:SetHeight(math.max(1, numHoTs * 18))
end
+12 -4
View File
@@ -20,8 +20,15 @@ function HealBot_Action_RefreshTooltip(unit)
if not unit then unit = HealBot_Action_TooltipUnit end
if not unit then return end;
local hlth=UnitHealth(unit);
local maxhlth=UnitHealthMax(unit);
local hlth=0;
local maxhlth=100;
if string.find(unit, "^Test") then
hlth = HealBot_Model.units[unit] and HealBot_Model.units[unit].health or 5000;
maxhlth = HealBot_Model.units[unit] and HealBot_Model.units[unit].maxHealth or 10000;
else
hlth=UnitHealth(unit);
maxhlth=UnitHealthMax(unit);
end
local spellLeft = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Left"));
local spellMiddle = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Middle"));
@@ -33,8 +40,9 @@ function HealBot_Action_RefreshTooltip(unit)
HealBot_Action_Tooltip_ClearLines();
if HealBot_Config.Tooltip_ShowTarget==1 then
if UnitName(unit) then
HealBot_Action_Tooltip_SetLineLeft(UnitName(unit),0,1,0,linenum)
local uname = HealBot_Model.units[unit] and HealBot_Model.units[unit].name or UnitName(unit)
if uname then
HealBot_Action_Tooltip_SetLineLeft(uname,0,1,0,linenum)
if hlth and maxhlth then
local r,g,b,a=HealBot_HealthColor(unit,hlth,maxhlth);
HealBot_Action_Tooltip_SetLineRight(hlth.."/"..maxhlth.." (-"..maxhlth-hlth..")",r,g,b,linenum)
+42 -2
View File
@@ -21,6 +21,7 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
* `/hb` - Toggles the main HealBot panel on and off
* `/hb options` - Toggles the HealBot options panel on and off
* `/hb reset` - Resets the contents of the main HealBot panel
* `/hb debug` - Toggles in-game debug message output to the main chat frame
### Key Features & Current Functionality
* **MVC & Observer Architecture:** High-performance, reactive engine that updates frames dynamically on state changes, drastically reducing CPU and memory overhead. Features memory recycling pool and event loop decoupling for zero-stutter combat.
@@ -30,7 +31,7 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
* **Talent-Based Calculations & Equipment Bonus:** Dynamic spell healing calculations for Druid, Priest, and Paladin based on talents, and automatically scans equipped gear to scale healing predictions.
* **Modifier-Aware Tooltips:** Tooltips dynamically update to show exact bound actions (Shift/Ctrl/Alt) and required mana costs (turns red if insufficient mana).
* **Blizzard Party Frame Toggle:** Toggle to automatically hide Blizzard's default party frames when in a group in favor of HealBot's layouts.
* **HoT & Buff Tracking:** Intelligently track active HoTs and buffs directly on the grid frames with custom icons (e.g., Renew, Rejuvenation, Regrowth, Fear Ward).
* **HoT & Buff Tracking:** Intelligently track active HoTs and buffs directly on the grid frames with custom icons (e.g., Renew, Rejuvenation, Regrowth, Fear Ward). Optional extended HoT timer tracker togglable below frames.
* **Mana Bars for Healers:** Enable and position mini-mana status bars next to unit frames, toggleable to display for healer classes only or all classes.
* **Curse & Debuff Warning (CDC):** Dynamic visual and audio alerts for cleanable debuffs. Customizable colors based on debuff type (Curse, Poison, Disease, Magic).
* **Pet & Familiar Frames:** Dedicated, toggleable frames for tracking and healing player pets.
@@ -49,6 +50,43 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
### Change Log
**v1.7.5**
* **Feature - Test Bars** - Implemented a "Test Bars" button and slider in the Skins options tab, allowing you to spawn and adjust a dummy raid group of up to 40 members without being in a real raid. This allows for easy layout and appearance customization out of combat.
* **UI - Skins Options & Custom Health Gradients** - Added configurable Max HP and Min HP colour pickers with descriptive labels for custom gradient support. Fixed colour picker button click interceptors and hooked ColorPickerFrame callbacks. Integrated global font selector across raid frame text, headers, Options button, and preview bars. Reorganized Skins tab layout to anchor Test Bars cleanly in Column 2.
* **UI - Cleanup** - While adding new funcionalities the way menus look was ignored, new functions were added to each tab where there was free space, so attempt was made to clean up this convoluted mess I made. Menu Tabs are now aligned and grouped in a manner that makes more sense.
* **UI - Options Tabs Relative Anchoring Fix** - Fixed layout skewing and margin drift across Spells, Buffs, Chat, Extras (Integrations), and Auto options tabs. Replaced arbitrary hardcoded coordinate shifts with clean relative-anchoring hierarchies centered across the dialog width.
* **Performance Fix - Table Pooling & GC Leaks** - Resolved critical table leaks in emergency heals where pooled tables (`order` and `units`) failed to release when pet heals were disabled, un-nested pet healing from emergency heals, eliminated high-frequency (4 Hz) anonymous closure allocations in `HealBot_Action_UpdatePlayerHoTs`, and implemented in-place key recycling for equipment scanning and grid button tables.
**v1.7.4**
* **Performance Fix - CPU Spikes** - Fixed massive FPS drops during raid combat. The `HealBot_CheckBuffs` function previously forced the client to generate hidden UI tooltips for up to 32 buffs per player on every single `UNIT_AURA` event. Tooltip parsing is now cached per texture, bypassing thousands of redundant API calls per second.
* **Performance Fix - Frame Rendering** - Eliminated redundant UI layout recalculations in `HealBot_Action_EnableButton`. The UI no longer forces `SetFont`, `SetWidth`, `SetHeight`, and `GetGlobal` lookups on every single combat tick (which previously caused 4,000+ layout updates per second in 40-man raids).
* **Performance Fix - Range Checking** - Greatly reduced CPU stutter caused by range calculations. `HealBot_Range_Check` now caches map positioning math and API calls per-frame, preventing the addon from calculating the exact same `math.sqrt` distance up to 5 times per unit during heavy combat.
* **Performance Fix - Unit ID Lookup** - Optimized `HealBot_FindUnitID` by pre-allocating raid unit tokens, preventing massive string concatenation and garbage collection spam during high-frequency combat events like `CHAT_MSG_ADDON` (HealComm).
* **Performance Fix - String GC Leak** - Fixed garbage collection hitches caused by `string.gfind` closures in the HealComm parsing loop by rewriting it to use closure-free `string.find` native loops.
* **Debug Output Command** - Added `/hb debug` (or `/hb dbg`) slash command to toggle real-time debug message printing directly into the standard chat frame without requiring custom chat channels.
* **Performance Fix - Spell Lookup** - Fixed a massive CPU drain and garbage generation issue where the entire spellbook was linearly scanned every frame per unit. Spell IDs are now cached via O(1) dictionary lookup on login and talent/spell changes.
* **Performance Fix - Unit Hash Lookup** - Eliminated heavy C-API calls to `UnitName()` during incoming heals by caching raid and party unit tokens in a fast O(1) hash table that updates on roster changes.
* **Performance Fix - Range Cache GC Leak** - Fixed a continuous memory leak in the range checker caused by string concatenation (`unit .. "_" .. range`) running every frame. Range states are now stored in a nested numeric table cache.
* **Performance Fix - Talent Rank Scan** - Fixed severe CPU stutter when gaining or losing auras that affect stats. Previously, inventory updates forced a full equipment and spell recalculation which linearly scanned the entire talent tree multiple times per rank. Talent ranks are now cached natively.
* **Feature - HoT Tracking** - Added an option in the Integrations tab to track Player-cast HoT timers in a dedicated list below the main HealBot frame. Requires Nampower to fetch exact durations. Added support for tracking Power Word: Shield. Implemented with a pre-allocated static cache array for zero GC leaks, and precise GUID trapping for instant name resolution on self and non-party members.
**v1.7.3**
* **Performance Fix - Table Pooling Part 2** - Fixed remaining un-pooled table allocations in layout updates, macro parsing, nampower integration, and aura tracking by utilizing HealBot_GetTable().
* **Performance Fix - HealComm Networking** - Fixed issue where incoming `HealComm` messages triggered synchronous UI redraws, causing massive lag in 40-man raids during combat. `HealBot_RecalcHeals` is now decoupled and deferred through the `HealBot_OnUpdate` dirty queue, allowing multiple network events to collapse into a single frame redraw.
**v1.7.2**
* **Performance Fix - Table Pooling** - Fixed massive Vanilla Lua 5.0 garbage collection memory leaks caused by unbounded table allocations in high-frequency update loops (e.g., `OnUpdate` and `PreserveStateByGUID`). Moved tables to file-local scope and implemented inline clearing.
* **Performance Fix - OOC Cleanup** - Added an out-of-combat garbage collection hook (`PLAYER_REGEN_ENABLED`) to purge disconnected senders from the `HealBot_IncomingHealers` global table, preventing memory bloat during prolonged play sessions.
* **Bug Fix - Incoming Heals Comms** - Fixed a regex string parsing bug that caused incoming heals from other HealBot instances to drop if a unit's name contained non-alphabetic characters (e.g. dashes or spaces in pet names).
* **Feature - Standard HealComm Sync** - Implemented lightweight parsing of the standard `HealComm` addon channel. HealBot now perfectly syncs incoming heals with modern raid frames like Luna, Grid, and pfUI, while retaining backwards compatibility with older versions of HealBot.
* **UI Update - Raid Marks** - Anchored raid target icons to top of unit frames instead of center.
* **Bug Fix** - Fixed an issue where the debuff warning sound and UI message would spam repeatedly on every aura update. The warning now only plays once per unique dispellable debuff type applied to a unit. Increased warning trigger range to 40 yards.
**v1.7.1**
* **Bug Fix - Shapeshift Auto-Unshift** - Fixed an issue where the shapeshift spell queue would incorrectly pull druids out of Tree of Life form .
* **Cleanup** - Removed deprecated `UPDATE_SHAPESHIFT_FORM` event listeners and `HealBot_UpdateShapeshiftForm` function to save CPU cycles.
**v1.7.0**
* **Feature - Raid Marks** - Added tracking and display of raid marks on unit frames.
* **External Addon Integrations** - Added a new 'Extras' tab in Options to optionally enable integrations with `UnitXP_SP3` (for ultra-precise 3D range and Line of Sight checks), `nampower` (for accurate real-time heal/buff tracking), `SuperWoW` (for robust GUID-based state tracking), and `ClassicAPI` (for native +Healing bonuses and fast 3D distance checks).
@@ -79,6 +117,7 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
* **UI Update - Customizable icon size** - Added an option to change size of HoT icons (default to 12px).
* **Cleanup** - Removed dead code `HealBot_Groups` table.
* **Bug Fix - Buff Watch Self** - Fixed an issue where the "Self Only" toggle for watched buffs failed to load visually across sessions.
* **Bug Fix - Pet Coloring** - Fixed an issue where custom server integrations giving pets a class could override the mint pet color when class color override is toggled.
**v1.6.2**
* **Hotfix - raid and party frames** - if getNumRaidMembers() > 0 wrapper around extra bars stopped from displaying all frames blocked from displaying Extras\Raid.
@@ -112,6 +151,8 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
* **Memory Optimization:** Fixed a significant memory leak where tracking tables were being repeatedly allocated every tick during aura scanning, and replaced `table.foreach` with pairs loops to avoid GC spikes during combat.
**v1.4.1**
* **Frame Disappearing Fix:** Fixed a layout rendering bug where frames would flash for a split second and disappear on login due to improper table clearing of unit buttons, leaving empty arrays that incorrectly failed the layout check.
* **Ranked Spell Parsing Fix:** Fixed a Lua crash during addon initialization when discovering ranked spells without an explicit target property. Ranked spells now dynamically inherit the target table from their base spells.
* **Talent-based Healing Calculations:** Implemented dynamic spell healing calculations for Druid, Priest, and Paladin classes based on talents.
* **Modifier Key Polling:** Replaced MODIFIER_STATE_CHANGED event with polling in HealBot_OnUpdate to track modifier keys reliably.
* **Incoming Heals Fix:** Fixed a bug where incoming heals failed to broadcast or show on the UI due to synchronous GCD fails and `CheckInteractDistance` limitations in the 1.12 API.
@@ -128,7 +169,6 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
* **Chat Announcements & Mouseover Casts:** Chat announcements are now correctly fired when using native Hovercasting (Mouseover). Additionally, added safety checks to prevent spamming chat announcements when accidentally clicking on a dead player (unless casting a resurrection spell).
* **New Priest Buff (Enlighten):** Added the custom "Enlighten" buff to Priest trackable buffs, complete with the `btnholyscriptures` icon on unit frames.
**1.3.3**
* **Chat Panel Refactor:** Completely replaced the spell selection dropdowns in the Chat tab with manual text input boxes, allowing users to type exact spell names (with or without ranks) directly, matching the behavior of the key-bindings configuration. Fixed a string matching bug caused by Vanilla WoW's hidden trailing spaces when comparing spell names, ensuring that both rankless (e.g. `Flash Heal`) and ranked inputs trigger correctly.
* **Chat Layout Stack:** Restructured the Chat Options XML layout to correctly stack the inputs into neat rows, preventing horizontal overlap and providing more space for typing long announce messages.