71 Commits

Author SHA1 Message Date
Bluewhale1337 178d1184a3 docs: add Talents.md 2026-07-26 13:59:23 +02:00
Bluewhale1337 f1b7e3950f chore: bump version to 1.6.2 in TOC file 2026-07-26 13:48:35 +02:00
Bluewhale1337 faf040997e feat: refactor spell tooltip scanning and update version to 1.6.2 2026-07-24 20:22:49 +02:00
Bluewhale1337 4c9f50770a fix: remove redundant end statement in layout refresh function 2026-07-22 11:19:21 +02:00
Bluewhale1337 ed11046eda Cleaning up some leftovers 2026-07-22 09:55:17 +02:00
Bluewhale1337 d36ad994ea feat: add support for dynamic unit appending during combat and improve layout handling 2026-07-22 09:20:22 +02:00
Bluewhale1337 a3f3d9e4c6 feat: expand unit capacity to 100 buttons and add RAID_ROSTER_UPDATE event handling 2026-07-21 22:46:14 +02:00
Bluewhale1337 2b1ccb03c5 hotfix: add pet frame color support and update documentation with latest feature set 2026-07-21 19:01:34 +02:00
Bluewhale1337 bbff4a461c Merge branch 'dev' of https://github.com/Bluewhale1337/HealBotBlue into dev 2026-07-21 13:51:55 +02:00
Bluewhale1337 40ad96ae07 bump version to 1.6.0 in HealBotBlue.toc 2026-07-21 13:51:51 +02:00
Bluewhale1337 611f584b8d docs: update version to v1.6 in changelog 2026-07-21 13:50:07 +02:00
Bluewhale1337 9fd6f47946 Merge pull request #8 from Bluewhale1337/main
Hotfix merge
2026-07-21 13:44:13 +02:00
Bluewhale1337 1f339a8da5 Merge branch 'dev' into main
Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-07-21 13:40:02 +02:00
Bluewhale1337 00f9c3d485 fix(ui): center text, fix menu overlap, relabel extra to raid (hotfix 1.5.1) 2026-07-21 13:28:55 +02:00
Bluewhale1337 41e4a15075 feat: read version dynamically from TOC file 2026-07-21 13:26:43 +02:00
Bluewhale1337 026d4093aa refactor: optimize event processing, move global UI buttons, and reorganize options layout 2026-07-21 11:21:35 +02:00
Bluewhale1337 db07c467a3 chore: dynamically fetch version from add-on metadata instead of hardcoding 2026-07-21 09:31:55 +02:00
Bluewhale1337 c47d17f790 feat: implement auto-swap profile system and add safety null checks for skin configuration data 2026-07-21 09:29:44 +02:00
Bluewhale1337 dd9f9886b4 feat: implement automatic skin swapping based on group size and add horizontal grid layout options 2026-07-21 09:02:33 +02:00
Bluewhale1337 85ad55c1cb perf: optimize CPU and memory usage via boolean state tracking, event filtering, and per-character SavedVariables. 2026-07-20 23:22:15 +02:00
Bluewhale1337 441a45150f feat: add Spell_Holy_AshesToAshes icon and implement debuff tracking loop in UnitAura handler 2026-07-20 18:13:47 +02:00
Bluewhale1337 0b610adaab Merge pull request #7 from Bluewhale1337/Bluewhale1337-patch-1
Update README.md
2026-07-20 08:12:21 +02:00
Bluewhale1337 609e2cc87b Update README.md
Fixed formatting

Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-07-20 08:12:07 +02:00
Bluewhale1337 12838ff250 Update HealBot_Localization.en.lua
in-game displayed version update
2026-07-19 22:43:28 +02:00
Bluewhale1337 e6ad9e7506 perf: eliminate remaining GC spikes by preventing layout rebuilds on combat toggle and zeroing hot-loop table allocations 2026-07-18 23:43:35 +02:00
Bluewhale1337 9f08b356e1 docs: append v1.5.1 changelog detailing memory, mana, and buff tracking fixes 2026-07-18 23:39:07 +02:00
Bluewhale1337 3845ada15f fix: remove artificial mana check to allow 0-mana cost buffs and fix tooltips disappearing instead of turning red 2026-07-18 23:37:51 +02:00
Bluewhale1337 826bf64eda fix: resolve Self Only buff tracking failing on raid frames by replacing direct unit string comparisons with UnitIsUnit 2026-07-18 23:34:20 +02:00
Bluewhale1337 8854cd3caa docs: add release notes for v1.4.2 to README.md 2026-07-18 23:26:14 +02:00
Bluewhale1337 c8a5e4f0eb perf: eliminate string allocation GC spikes in healthbar refreshing and remove full UI rebuilds on target change 2026-07-18 13:35:59 +02:00
Bluewhale1337 2d75406d88 Merge pull request #6 from Bluewhale1337/dev
Merge pull request #5 from Bluewhale1337/main
2026-07-18 12:40:48 +02:00
Bluewhale1337 2e35be6516 Merge pull request #5 from Bluewhale1337/main
Hotfix merge to dev
2026-07-18 12:40:18 +02:00
Bluewhale1337 07a9c3a93d Merge branch 'dev' into main
Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-07-18 12:40:04 +02:00
Bluewhale1337 c8e62fe80e docs: restore v1.4.2 changelog entry 2026-07-18 12:36:38 +02:00
Bluewhale1337 1334fc09bf perf: replace table.foreach with pairs loops to avoid GC spikes during combat 2026-07-18 12:27:51 +02:00
Bluewhale1337 ce594af5fa fix: memory leak in UnitAura and bump version to 1.4.2 2026-07-18 10:47:28 +02:00
Bluewhale1337 f1c5d6a8d1 Features: Expand action handling to support inline scripts, macros, and items while adding dynamic tooltip mana colorization and table memory management. 2026-07-15 14:56:03 +02:00
Bluewhale1337 0186fc1d93 Merge pull request #4 from Bluewhale1337/dev
Merging dev changes to main 1.4.1
2026-07-12 20:21:49 +02:00
Bluewhale1337 ff97414bb1 feat: implement robust spell failure detection, talent-based healing calculations, and improved incoming heal synchronization. 2026-07-12 19:44:50 +02:00
Bluewhale1337 d0d6a39fb9 feat: implement talent-based dynamic spell healing calculations for Druid, Priest, and Paladin classes 2026-07-12 15:44:44 +02:00
Bluewhale1337 4209b05ca0 Merge pull request #3 from Bluewhale1337/dev
Dev branch changes merged to main
2026-07-12 00:51:45 +02:00
Bluewhale1337 66172cab45 refactor: replace MODIFIER_STATE_CHANGED event with polling in HealBot_OnUpdate to track modifier keys 2026-07-12 00:37:25 +02:00
Bluewhale1337 eec5745dbb Update of readme 2026-07-12 00:20:04 +02:00
Bluewhale1337 4678236cc0 feat: add Enlighten spell support and update localization files 2026-07-11 15:21:28 +02:00
Bluewhale1337 a1aa1a4c1d feat: add spell cast announcements with target validation for resurrections and added announcements for hoovercasting (mousover frames) 2026-07-11 11:06:27 +02:00
Bluewhale1337 86e0e0b18a Refactor: rename global variables and constants with HealBot prefix and register MODIFIER_STATE_CHANGED event 2026-07-10 23:13:48 +02:00
Bluewhale1337 becb2ddfdb Feat: added customizable unit frame health text and support for non-mana resource tracking 2026-07-10 17:08:50 +02:00
Bluewhale1337 7eb07d724e Merge branch 'main' into dev - applying hotfixes 2026-07-10 16:06:16 +02:00
Bluewhale1337 2e8e57f5c4 Merge branch 'main' of https://github.com/Bluewhale1337/HealBotBlue 2026-07-10 15:54:42 +02:00
Bluewhale1337 f8c6c3493b Refactor + Horfixes: replace UIDropDownMenu calls with wrapper functions and redesign chat option UI to support spell-based configuration. 2026-07-10 15:54:36 +02:00
Bluewhale1337 01a8e3bc6c Update README.md
Known issues section added
2026-07-09 08:13:34 +02:00
Bluewhale1337 c50bcd54f3 Hotfix - prevent legacy UIDropDownMenu crashes by patching refresh and selection functions 2026-07-06 22:15:41 +02:00
Bluewhale1337 4c7cfbde8e add null checks when toggling HealBot options panels to prevent errors 2026-07-04 14:47:22 +02:00
Bluewhale1337 cb1ba1ab75 Implement auto-unshifting for druid shapeshift forms and add status command 2026-07-04 09:41:06 +02:00
Bluewhale1337 0c8b687f53 Implement EQUIPMENT_CHANGED observer pattern and update project to v1.4.0 2026-07-03 12:37:20 +02:00
Bluewhale1337 42715fba47 Added pet frames support 2026-07-03 11:55:42 +02:00
Bluewhale1337 6fe02c1a16 Merge pull request #1 from Bluewhale1337/main
Propagate hotfixes
2026-07-02 12:05:41 +02:00
Bluewhale1337 a6c75b78f7 Update HealBot_Localization.en.lua
Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-07-02 10:54:17 +02:00
Bluewhale1337 1e1e06163c Update HealBotBlue.toc
hotfix 1.3.1

Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-07-02 10:54:06 +02:00
Bluewhale1337 2995ccbd32 Update README.md
Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-07-02 10:53:17 +02:00
Bluewhale1337 8b3355656e Update HealBot_Controller_Spells.lua
Hotfix: reimplemented missing helper function back.

Signed-off-by: Bluewhale1337 <295648290+Bluewhale1337@users.noreply.github.com>
2026-07-02 10:51:49 +02:00
Bluewhale1337 dc50c9797f Fixing readme 2026-06-30 18:33:59 +02:00
Bluewhale1337 dd7fcaf082 Merge branch 'dev'
Moving last comit from dev before it gets reset
2026-06-30 18:29:49 +02:00
Bluewhale1337 b77c4d73c6 Merge branch 'dev' 2026-06-30 18:24:35 +02:00
Bluewhale1337 e567c0f394 Minor bugfixes to target restoration, layout, Buff tracking 2026-06-30 18:18:01 +02:00
Bluewhale1337 b8b6a57ef8 Port and adapt 6 main hotfixes to decoupled architecture + small function re-write HealBot_SetSkinColours to adhere to DRY principles 2026-06-28 13:07:19 +02:00
Bluewhale1337 3ae3f26f77 Further modularization of HealBot codebase by splitting core logic into dedicated controller and view components 2026-06-25 19:33:48 +02:00
Bluewhale1337 786e5d66df Reorganized skins panel slider layout and optimize spell initialization sequence 2026-06-25 08:57:46 +02:00
Bluewhale1337 63fc88b006 refactor: modularize configuration UI by splitting options into dedicated component files using coding agent 2026-06-25 08:44:56 +02:00
Bluewhale1337 03634b37e4 Re
factor: fix UI layout overlaps and anchor constraints in options menu and update changelog
2026-06-24 22:24:47 +02:00
Bluewhale1337 dd9cfc301a feat: add customizable frame padding and border thickness settings to UI and optimize equipment change scanning 2026-06-24 20:49:47 +02:00
39 changed files with 8703 additions and 6997 deletions
+50 -1428
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -18,7 +18,7 @@
<FontString name="$parent_text" inherits="GameFontNormalSmall"> <FontString name="$parent_text" inherits="GameFontNormalSmall">
<Anchors> <Anchors>
<Anchor point="CENTER"> <Anchor point="CENTER">
<Offset> <AbsDimension y="1"/> </Offset> <Offset> <AbsDimension y="0"/> </Offset>
</Anchor> </Anchor>
</Anchors> </Anchors>
</FontString> </FontString>
+17 -2
View File
@@ -1,15 +1,30 @@
## Interface: 11200 ## Interface: 11200
## Title: HealBotBlue ## Title: HealBotBlue
## Version: 1.2.2 ## Version: 1.6.2
## Author: Bluewhale ## Author: Bluewhale
## Notes: Adds panel with skinable bars for healing and decursive ## Notes: Adds panel with skinable bars for healing and decursive
## SavedVariables: HealBot_Config ## SavedVariablesPerCharacter: HealBot_Config
..\..\FrameXML\Fonts.xml ..\..\FrameXML\Fonts.xml
..\..\FrameXML\OptionsFrameTemplates.xml ..\..\FrameXML\OptionsFrameTemplates.xml
..\..\FrameXML\UIPanelTemplates.xml ..\..\FrameXML\UIPanelTemplates.xml
..\..\FrameXML\UIDropDownMenu.xml ..\..\FrameXML\UIDropDownMenu.xml
HealBot_Error.xml HealBot_Error.xml
HealBot_Model.lua HealBot_Model.lua
HealBot_Controller_Range.lua
HealBot_Controller_Comms.lua
HealBot_Controller_Aura.lua
HealBot_Controller_Spells.lua
HealBot_Controller_Events.lua
HealBot.xml HealBot.xml
HealBot_View_Layout.lua
HealBot_View_Tooltip.lua
HealBot_Action.xml HealBot_Action.xml
HealBot_Options.xml HealBot_Options.xml
HealBot_Options_General.xml
HealBot_Options_Spells.xml
HealBot_Options_Healing.xml
HealBot_Options_CDC.xml
HealBot_Options_Skins.xml
HealBot_Options_Buffs.xml
HealBot_Options_Chat.xml
HealBot_Options_Auto.xml
+158 -1055
View File
File diff suppressed because it is too large Load Diff
+49
View File
@@ -232,6 +232,15 @@
<Button name="HealBot_Action_HealUnit39" inherits="HealingButtonTemplate" text="Unit not set"/> <Button name="HealBot_Action_HealUnit39" inherits="HealingButtonTemplate" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit40" inherits="HealingButtonTemplate" text="Unit not set"/> <Button name="HealBot_Action_HealUnit40" inherits="HealingButtonTemplate" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit41" inherits="HealingButtonTemplate" text="Unit not set"/> <Button name="HealBot_Action_HealUnit41" inherits="HealingButtonTemplate" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit42" inherits="HealingButtonTemplate" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit43" inherits="HealingButtonTemplate" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit44" inherits="HealingButtonTemplate" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit45" inherits="HealingButtonTemplate" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit46" inherits="HealingButtonTemplate" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit47" inherits="HealingButtonTemplate" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit48" inherits="HealingButtonTemplate" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit49" inherits="HealingButtonTemplate" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit50" inherits="HealingButtonTemplate" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit51" inherits="HealingButtonTemplate2" text="Unit not set"/> <Button name="HealBot_Action_HealUnit51" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit52" inherits="HealingButtonTemplate2" text="Unit not set"/> <Button name="HealBot_Action_HealUnit52" inherits="HealingButtonTemplate2" text="Unit not set"/>
@@ -243,6 +252,46 @@
<Button name="HealBot_Action_HealUnit58" inherits="HealingButtonTemplate2" text="Unit not set"/> <Button name="HealBot_Action_HealUnit58" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit59" inherits="HealingButtonTemplate2" text="Unit not set"/> <Button name="HealBot_Action_HealUnit59" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit60" inherits="HealingButtonTemplate2" text="Unit not set"/> <Button name="HealBot_Action_HealUnit60" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit61" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit62" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit63" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit64" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit65" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit66" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit67" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit68" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit69" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit70" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit71" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit72" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit73" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit74" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit75" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit76" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit77" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit78" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit79" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit80" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit81" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit82" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit83" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit84" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit85" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit86" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit87" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit88" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit89" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit90" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit91" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit92" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit93" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit94" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit95" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit96" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit97" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit98" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit99" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_HealUnit100" inherits="HealingButtonTemplate2" text="Unit not set"/>
<Button name="HealBot_Action_Header1" inherits="HealingButtonTemplate4" text="Unit not set"/> <Button name="HealBot_Action_Header1" inherits="HealingButtonTemplate4" text="Unit not set"/>
<Button name="HealBot_Action_Header2" inherits="HealingButtonTemplate4" text="Unit not set"/> <Button name="HealBot_Action_Header2" inherits="HealingButtonTemplate4" text="Unit not set"/>
+14 -14
View File
@@ -6,9 +6,9 @@
-- http://www.curse-gaming.com/mod.php?addid=2384 -- http://www.curse-gaming.com/mod.php?addid=2384
-------------------------------------------------- --------------------------------------------------
HB_BONUSSCANNER_PATTERN_SETNAME = "^(.*) %(%d/%d%)$"; HEALBOT_BONUSSCANNER_PATTERN_SETNAME = "^(.*) %(%d/%d%)$";
HB_BONUSSCANNER_PATTERN_GENERIC_PREFIX = "^%+(%d+)%%?(.*)$"; HEALBOT_BONUSSCANNER_PATTERN_GENERIC_PREFIX = "^%+(%d+)%%?(.*)$";
HB_BONUSSCANNER_PATTERN_GENERIC_SUFFIX = "^(.*)%+(%d+)%%?$"; HEALBOT_BONUSSCANNER_PATTERN_GENERIC_SUFFIX = "^(.*)%+(%d+)%%?$";
HealBot_BonusScanner = { HealBot_BonusScanner = {
bonuses = 0; bonuses = 0;
@@ -128,17 +128,17 @@ end;
function HealBot_BonusScanner:ScanLine(line) function HealBot_BonusScanner:ScanLine(line)
local tmpStr, found; local tmpStr, found;
if(string.sub(line,0,string.len(HB_BONUSSCANNER_PREFIX_EQUIP)) == HB_BONUSSCANNER_PREFIX_EQUIP) then if(string.sub(line,0,string.len(HEALBOT_BONUSSCANNER_PREFIX_EQUIP)) == HEALBOT_BONUSSCANNER_PREFIX_EQUIP) then
tmpStr = string.sub(line,string.len(HB_BONUSSCANNER_PREFIX_EQUIP)+1); tmpStr = string.sub(line,string.len(HEALBOT_BONUSSCANNER_PREFIX_EQUIP)+1);
HealBot_BonusScanner:CheckPassive(tmpStr); HealBot_BonusScanner:CheckPassive(tmpStr);
elseif(string.sub(line,0,string.len(HB_BONUSSCANNER_PREFIX_SET)) == HB_BONUSSCANNER_PREFIX_SET elseif(string.sub(line,0,string.len(HEALBOT_BONUSSCANNER_PREFIX_SET)) == HEALBOT_BONUSSCANNER_PREFIX_SET
and HealBot_BonusScanner.temp.set ~= "" and HealBot_BonusScanner.temp.set ~= ""
and not HealBot_BonusScanner.temp.sets[HealBot_BonusScanner.temp.set]) then and not HealBot_BonusScanner.temp.sets[HealBot_BonusScanner.temp.set]) then
tmpStr = string.sub(line,string.len(HB_BONUSSCANNER_PREFIX_SET)+1); tmpStr = string.sub(line,string.len(HEALBOT_BONUSSCANNER_PREFIX_SET)+1);
HealBot_BonusScanner.temp.slot = "Set"; HealBot_BonusScanner.temp.slot = "Set";
HealBot_BonusScanner:CheckPassive(tmpStr); HealBot_BonusScanner:CheckPassive(tmpStr);
else else
_, _, tmpStr = string.find(line, HB_BONUSSCANNER_PATTERN_SETNAME); _, _, tmpStr = string.find(line, HEALBOT_BONUSSCANNER_PATTERN_SETNAME);
if(tmpStr) then if(tmpStr) then
HealBot_BonusScanner.temp.set = tmpStr; HealBot_BonusScanner.temp.set = tmpStr;
else else
@@ -154,7 +154,7 @@ function HealBot_BonusScanner:CheckPassive(line)
local i, p, value, found; local i, p, value, found;
found = nil; found = nil;
for i,p in HB_BONUSSCANNER_PATTERNS_PASSIVE do for i,p in HEALBOT_BONUSSCANNER_PATTERNS_PASSIVE do
_, _, value = string.find(line, "^" .. p.pattern); _, _, value = string.find(line, "^" .. p.pattern);
if(value) then if(value) then
HealBot_BonusScanner:AddValue(p.effect, value) HealBot_BonusScanner:AddValue(p.effect, value)
@@ -183,9 +183,9 @@ function HealBot_BonusScanner:CheckGeneric(line)
tmpStr = string.gsub( tmpStr, "%s+$", "" ); tmpStr = string.gsub( tmpStr, "%s+$", "" );
tmpStr = string.gsub( tmpStr, "%.$", "" ); tmpStr = string.gsub( tmpStr, "%.$", "" );
_, _, value, token = string.find(tmpStr, HB_BONUSSCANNER_PATTERN_GENERIC_PREFIX); _, _, value, token = string.find(tmpStr, HEALBOT_BONUSSCANNER_PATTERN_GENERIC_PREFIX);
if(not value) then if(not value) then
_, _, token, value = string.find(tmpStr, HB_BONUSSCANNER_PATTERN_GENERIC_SUFFIX); _, _, token, value = string.find(tmpStr, HEALBOT_BONUSSCANNER_PATTERN_GENERIC_SUFFIX);
end end
if(token and value) then if(token and value) then
token = string.gsub( token, "^%s+", "" ); token = string.gsub( token, "^%s+", "" );
@@ -202,8 +202,8 @@ end
function HealBot_BonusScanner:CheckToken(token, value) function HealBot_BonusScanner:CheckToken(token, value)
local i, p, s1, s2; local i, p, s1, s2;
if(HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP[token]) then if(HEALBOT_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP[token]) then
HealBot_BonusScanner:AddValue(HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP[token], value); HealBot_BonusScanner:AddValue(HEALBOT_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP[token], value);
return true; return true;
end end
return false; return false;
@@ -212,7 +212,7 @@ end
function HealBot_BonusScanner:CheckOther(line) function HealBot_BonusScanner:CheckOther(line)
local i, p, value, start, found; local i, p, value, start, found;
for i,p in HB_BONUSSCANNER_PATTERNS_OTHER do for i,p in HEALBOT_BONUSSCANNER_PATTERNS_OTHER do
start, _, value = string.find(line, "^" .. p.pattern); start, _, value = string.find(line, "^" .. p.pattern);
if(start) then if(start) then
if(p.value) then if(p.value) then
+203
View File
@@ -0,0 +1,203 @@
-- HealBot_Controller_Aura.lua
-- Handles tracking buffs/debuffs (auras) on group/raid units
HealBot_MissingBuffs = {}
local StaticHasBuff = {}
function HealBot_UnitAffected(unit, effect)
if not effect then return nil; end
local i = 1
while true do
local buff = UnitBuff(unit, i)
if not buff then
break
end
if buff == effect then
return buff
end
i = i + 1
end
i = 1
while true do
local debuff = UnitDebuff(unit, i)
if not debuff then
break
end
if debuff == effect then
return debuff
end
i = i + 1
end
return nil;
end
function HealBot_CheckShamanWeaponBuff(spellName)
local hasMainHandEnchant, _, _, hasOffHandEnchant = GetWeaponEnchantInfo()
if hasMainHandEnchant or hasOffHandEnchant then
return true
end
return false
end
function HealBot_CheckBuffs(unit)
if HealBot_Config.BuffWatch ~= 1 then
HealBot_MissingBuffs[unit] = nil
return
end
local inCombat = UnitAffectingCombat("player") or UnitAffectingCombat(unit)
if inCombat and HealBot_Config.BuffWatchInCombat ~= 1 then
HealBot_MissingBuffs[unit] = nil
return
end
local myClass = UnitClass("player")
if not HealBot_Buff_Spells[myClass] then return end
if UnitIsDeadOrGhost(unit) or not UnitIsConnected(unit) then
HealBot_MissingBuffs[unit] = nil
return
end
-- Group Buff Equivalents
local HealBot_Buff_Equivalents = {
[HEALBOT_POWER_WORD_FORTITUDE] = HEALBOT_PRAYER_OF_FORTITUDE,
[HEALBOT_DIVINE_SPIRIT] = HEALBOT_PRAYER_OF_SPIRIT,
[HEALBOT_SHADOW_PROTECTION] = HEALBOT_PRAYER_OF_SHADOW_PROTECTION,
[HEALBOT_ARCANE_INTELLECT] = HEALBOT_ARCANE_BRILLIANCE,
[HEALBOT_MARK_OF_THE_WILD] = HEALBOT_GIFT_OF_THE_WILD,
}
-- Gather buffs on unit
local hasBuff = StaticHasBuff
for k in pairs(hasBuff) do
hasBuff[k] = nil
end
local i = 1
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()
if buffName then
hasBuff[buffName] = true
end
i = i + 1
end
HealBot_ScanTooltip:Hide()
HealBot_MissingBuffs[unit] = nil
if HealBot_Config.BuffDropDowns and HealBot_Config.BuffDropDowns[myClass] then
for j = 1, 8 do
local val = HealBot_Config.BuffDropDowns[myClass][j]
if val and val > 0 then
local isSelfOnly = (HealBot_Config.BuffWatchSelf and HealBot_Config.BuffWatchSelf[j] == 1)
if not (isSelfOnly and not UnitIsUnit(unit, "player")) then
local spellName = HealBot_Buff_Spells[myClass][val]
local hasIt = hasBuff[spellName]
if not hasIt and HealBot_Buff_Equivalents[spellName] then
hasIt = hasBuff[HealBot_Buff_Equivalents[spellName]]
end
if not hasIt then
if myClass == "SHAMAN" and UnitIsUnit(unit, "player") and string.find(spellName, " Weapon") then
hasIt = HealBot_CheckShamanWeaponBuff(spellName)
end
end
if not hasIt then
HealBot_MissingBuffs[unit] = spellName
break
end
end
end
end
end
end
local HealBot_TrackedHoTs = {
["Interface\\Icons\\Spell_Holy_Renew"] = true,
["Interface\\Icons\\Spell_Nature_Rejuvenation"] = true,
["Interface\\Icons\\Spell_Nature_ResistNature"] = true,
["Interface\\Icons\\Spell_Holy_PowerWordShield"] = true,
["Interface\\Icons\\Spell_Holy_SealOfProtection"] = true,
["Interface\\Icons\\Spell_Holy_Excorcism"] = true,
["Interface\\Icons\\btnholyscriptures"] = true,
["Interface\\Icons\\Spell_Holy_AshesToAshes"] = true,
}
function HealBot_OnEvent_UnitAura(this, unit)
local DebuffType;
if HealBot_Heals[unit] and unit ~= "target" then
if not HealBot_UnitIcons[unit] then
HealBot_UnitIcons[unit] = {}
end
for j = 1, 5 do
HealBot_UnitIcons[unit][j] = nil
end
local iconCount = 0
local i = 1;
while true do
local debuff, tmp, debuff_type = UnitDebuff(unit, i, 1)
if debuff then
if iconCount < 5 then
iconCount = iconCount + 1
HealBot_UnitIcons[unit][iconCount] = debuff
end
if HealBot_CDCInc[UnitClass(unit)] == 1 and HealBot_DebuffWatch[debuff_type] then
HealBot_UnitDebuff[unit] = debuff_type
DebuffType = debuff_type;
if HealBot_DebuffPriority[debuff_type] then
break
end
end
i = i + 1;
else
if i == 1 then HealBot_UnitDebuff[unit] = nil; end
break
end
end
local b = 1
while true do
local buff = UnitBuff(unit, b)
if not buff then break end
if HealBot_TrackedHoTs[buff] and iconCount < 5 then
iconCount = iconCount + 1
HealBot_UnitIcons[unit][iconCount] = buff
end
b = b + 1
end
local d = 1
while true do
local debuff = UnitDebuff(unit, d)
if not debuff then break end
if HealBot_TrackedHoTs[debuff] and iconCount < 5 then
iconCount = iconCount + 1
HealBot_UnitIcons[unit][iconCount] = debuff
end
d = d + 1
end
if HealBot_UnitDebuff[unit] then
if DebuffType and HealBot_Range_Check(unit, 27) == 1 then
if HealBot_Config.ShowDebuffWarning == 1 then
UIErrorsFrame:AddMessage(UnitName(unit) .. " suffers from " .. DebuffType,
HealBot_Config.CDCBarColour[DebuffType].R,
HealBot_Config.CDCBarColour[DebuffType].G,
HealBot_Config.CDCBarColour[DebuffType].B,
1, UIERRORS_HOLD_TIME);
end
if HealBot_Config.SoundDebuffWarning == 1 then HealBot_PlaySound(HealBot_Config.SoundDebuffPlay); end
end
end
HealBot_CheckBuffs(unit);
HealBot_RecalcHeals(unit);
end
end
+115
View File
@@ -0,0 +1,115 @@
-- HealBot_Controller_Comms.lua
-- Handles network sync (addon messaging), errors, and chat debugging
function HealBot_Get_DebugChan()
local index = GetChannelName("HBmsg");
if (index > 0) then
return index;
else
return nil;
end
end
function HealBot_AddChat(msg)
local chanid = HealBot_Get_DebugChan();
if chanid and HealBot_SpamCnt < 3 then
HealBot_SpamCnt = HealBot_SpamCnt + 1;
local hour, minute = GetGameTime();
if minute == 0 then
msg = "[" .. hour .. ":00] " .. msg;
elseif minute < 10 then
msg = "[" .. hour .. ":0" .. minute .. "] " .. msg;
else
msg = "[" .. hour .. ":" .. minute .. "] " .. msg;
end
SendChatMessage(msg, "CHANNEL", nil, chanid);
elseif ( DEFAULT_CHAT_FRAME ) then
DEFAULT_CHAT_FRAME:AddMessage(msg);
end
end
function HealBot_AddDebug(msg)
local chanid = HealBot_Get_DebugChan();
if chanid and HealBot_SpamCnt < 3 then
HealBot_SpamCnt = HealBot_SpamCnt + 1;
local hour, minute = GetGameTime();
if minute == 0 then
msg = "[" .. hour .. ":00] DEBUG: " .. msg;
elseif minute < 10 then
msg = "[" .. hour .. ":0" .. minute .. "] DEBUG: " .. msg;
else
msg = "[" .. hour .. ":" .. minute .. "] DEBUG: " .. msg;
end
SendChatMessage(msg, "CHANNEL", nil, chanid);
end
end
function HealBot_Report_Error(msg)
if HealBot_ErrorCnt < 28 then
HealBot_ErrorCnt = HealBot_ErrorCnt + 1;
ShowUIPanel(HealBot_Error);
HealBot_ErrorsIn(msg, HealBot_ErrorCnt);
end
end
function HealBot_AddError(msg)
UIErrorsFrame:AddMessage(msg, 1.0, 1.0, 1.0, 1.0, UIERRORS_HOLD_TIME);
HealBot_AddDebug(msg);
end
function HealBot_SendAddonMessage(prefix, text)
if GetNumRaidMembers() > 0 then
SendAddonMessage(prefix, text, "RAID")
elseif GetNumPartyMembers() > 0 then
SendAddonMessage(prefix, text, "PARTY")
end
end
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;
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;
end
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+) <<=>> (.+)");
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
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
else
local unitname, tmpTest
tmpTest, tmpTest, unitname = string.find(inc_msg, "^RES (.+)$");
if ( unitname ) then
HealBot_AddDebug(sender_id .. " is ressing " .. unitname);
HealBot_Ressing[unitname] = sender_id;
HealBot_RecalcHeals(HealBot_FindUnitID(unitname));
end
end
end
end
end
+478
View File
@@ -0,0 +1,478 @@
-- HealBot_Controller_Events.lua
-- Manages WoW Frame events and periodic updates, routing to respective services
HealBot_View_DirtyUnits = {}
local HealBot_Timer1, HealsIn_Timer = 0, 0;
HealBot_LastModState = ""
function HealBot_OnLoad(this)
this:RegisterEvent("VARIABLES_LOADED");
SLASH_HEALBOT1 = "/healbot";
SLASH_HEALBOT2 = "/hb";
SlashCmdList["HEALBOT"] = function(msg)
HealBot_SlashCmd(msg);
end
HealBot_AddError(HEALBOT_ADDON .. HEALBOT_LOADED);
-- Register MVC Observers
HealBot_Model:RegisterObserver("UNIT_HEALTH_CHANGED", function(unitID)
HealBot_View_DirtyUnits[unitID] = true
end)
HealBot_Model:RegisterObserver("UNIT_POWER_CHANGED", function(unitID)
HealBot_View_DirtyUnits[unitID] = true
end)
HealBot_Model:RegisterObserver("UNIT_AURA_CHANGED", function(unitID)
HealBot_View_DirtyUnits[unitID] = true
end)
HealBot_Model:RegisterObserver("ROSTER_CHANGED", function()
HealBot_Delay_RecalcParty = 1
end)
HealBot_Model:RegisterObserver("EQUIPMENT_CHANGED", function(unitID)
if unitID == "player" then
HealBot_EquipChangeTimer = 1
end
end)
end
function HealBot_RegisterThis(this)
-- Deprecated / not used
end
function HealBot_OnUpdate(this, arg1)
if HealBot_Action_TooltipUnit and HealBot_Tooltip:IsVisible() then
local s = IsShiftKeyDown() and true or false
local c = IsControlKeyDown() and true or false
local a = IsAltKeyDown() and true or false
if HealBot_LastModS ~= s or HealBot_LastModC ~= c or HealBot_LastModA ~= a then
HealBot_LastModS = s
HealBot_LastModC = c
HealBot_LastModA = a
HealBot_Action_RefreshTooltip(HealBot_Action_TooltipUnit)
end
else
HealBot_LastModS = false
HealBot_LastModC = false
HealBot_LastModA = false
end
if HealBot_TargetRestorePending then
HealBot_TargetRestoreTimer = HealBot_TargetRestoreTimer + arg1;
if HealBot_TargetRestoreTimer >= 0.1 then
local pending = HealBot_TargetRestorePending;
HealBot_TargetRestorePending = nil;
HealBot_TargetRestoreTimer = 0;
if pending.type == "enemy" then
TargetLastEnemy();
elseif pending.type == "friend" then
TargetLastTarget();
elseif pending.type == "clear" then
ClearTarget();
end
end
end
-- Process Dirty Queue for MVC View
local unitID, _ = next(HealBot_View_DirtyUnits)
while unitID do
HealBot_Action_RefreshButtons(unitID)
HealBot_View_DirtyUnits[unitID] = nil
unitID, _ = next(HealBot_View_DirtyUnits)
end
if HealBot_EquipChangeTimer > 0 then
HealBot_EquipChangeTimer = HealBot_EquipChangeTimer - arg1
if HealBot_EquipChangeTimer <= 0 then
HealBot_EquipChangeTimer = 0
HealBot_BonusScanner:ScanEquipment()
HealBot_CalcEquipBonus = true;
HealBot_RecalcSpells();
end
end
HealBot_Timer1 = HealBot_Timer1 + arg1;
if HealBot_Timer1 >= 2.5 then
if not HealBot_IsFighting then
HealsIn_Timer = HealsIn_Timer + 1;
if HealsIn_Timer >= 10 then
for k in pairs(HealBot_HealsIn) do HealBot_HealsIn[k] = nil end
for k in pairs(HealBot_Healers) do HealBot_Healers[k] = nil end
HealsIn_Timer = 0;
end
if HealBot_SpellsInitFlag > 1 then
HealBot_SpellsInitFlag = HealBot_SpellsInitFlag + 1;
if HealBot_SpellsInitFlag > 2 then
local cnt = HealBot_InitSpells();
HealBot_SpellsInitFlag = 0;
HealBot_RecalcSpells();
end
end
if HealBot_Delay_RecalcParty > 0 then
HealBot_Delay_RecalcParty = HealBot_Delay_RecalcParty + 1
if HealBot_Delay_RecalcParty > 1 then
HealBot_Delay_RecalcParty = 0;
HealBot_RecalcParty();
end
end
else
HealsIn_Timer = 0;
end
HealBot_Timer1 = 0;
HealBot_SpamCnt = 0;
end
end
local HealBot_EventHandlers = {
["UNIT_HEALTH"] = function(this, arg1)
if HealBot_Model:UpdateUnitHealth(arg1) then
HealBot_Model:NotifyObservers("UNIT_HEALTH_CHANGED", arg1)
end
HealBot_OnEvent_UnitHealth(this, arg1)
end,
["UNIT_MANA"] = function(this, arg1)
if arg1 ~= "player" and HealBot_Config.ShowManaBars == 0 then return end
if HealBot_Model:UpdateUnitPower(arg1) then
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
end
end,
["UNIT_RAGE"] = function(this, arg1)
if arg1 ~= "player" and HealBot_Config.ShowManaBars == 0 then return end
if HealBot_Model:UpdateUnitPower(arg1) then
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
end
end,
["UNIT_ENERGY"] = function(this, arg1)
if arg1 ~= "player" and HealBot_Config.ShowManaBars == 0 then return end
if HealBot_Model:UpdateUnitPower(arg1) then
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
end
end,
["UNIT_DISPLAYPOWER"] = function(this, arg1)
if arg1 ~= "player" and HealBot_Config.ShowManaBars == 0 then return end
if HealBot_Model:UpdateUnitPower(arg1) then
HealBot_Model:NotifyObservers("UNIT_POWER_CHANGED", arg1)
end
end,
["UNIT_AURA"] = function(this, arg1)
HealBot_Model:MarkAuraChanged(arg1)
HealBot_Model:NotifyObservers("UNIT_AURA_CHANGED", arg1)
HealBot_OnEvent_UnitAura(this, arg1)
end,
["PLAYER_TARGET_CHANGED"] = function(this)
if HealBot_Model:UpdateUnitIdentity("target") then
HealBot_Model:NotifyObservers("ROSTER_CHANGED", "target")
end
HealBot_Model:UpdateUnitStatus("target")
HealBot_Model:UpdateUnitHealth("target")
HealBot_Model:UpdateUnitPower("target")
HealBot_OnEvent_PlayerTargetChanged(this)
end,
["PARTY_MEMBERS_CHANGED"] = function(this)
for _, unit in ipairs(HealBot_Model.partyMembers) do
HealBot_Model:RefreshUnit(unit)
end
for _, unit in ipairs(HealBot_Model.raidMembers) do
HealBot_Model:RefreshUnit(unit)
end
HealBot_Model:NotifyObservers("ROSTER_CHANGED")
HealBot_OnEvent_PartyMembersChanged(this)
end,
["RAID_ROSTER_UPDATE"] = function(this)
for _, unit in ipairs(HealBot_Model.partyMembers) do
HealBot_Model:RefreshUnit(unit)
end
for _, unit in ipairs(HealBot_Model.raidMembers) do
HealBot_Model:RefreshUnit(unit)
end
HealBot_Model:NotifyObservers("ROSTER_CHANGED")
HealBot_OnEvent_PartyMembersChanged(this)
end,
["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)
HealBot_OnEvent_VariablesLoaded(this)
end,
-- Legacy pass-throughs
["CHAT_MSG_ADDON"] = function(this, arg1, arg2, arg3, arg4) HealBot_OnEvent_AddonMsg(this, arg1, arg2, arg3, arg4) end,
["SPELLCAST_START"] = function(this, arg1, arg2) HealBot_OnEvent_SpellcastStart(this, arg1, arg2) end,
["SPELLCAST_STOP"] = function(this) HealBot_OnEvent_SpellcastStop(this, "SPELLCAST_STOP") end,
["SPELLCAST_INTERRUPTED"] = function(this) HealBot_OnEvent_SpellcastStop(this, "SPELLCAST_INTERRUPTED") end,
["SPELLCAST_FAILED"] = function(this) HealBot_OnEvent_SpellcastStop(this, "SPELLCAST_FAILED") end,
["PLAYER_REGEN_DISABLED"] = function(this) HealBot_OnEvent_PlayerRegenDisabled(this) end,
["PLAYER_REGEN_ENABLED"] = function(this) HealBot_OnEvent_PlayerRegenEnabled(this) end,
["PARTY_MEMBER_DISABLE"] = function(this, arg1) HealBot_OnEvent_PartyMemberDisable(this, arg1) end,
["PARTY_MEMBER_ENABLE"] = function(this, arg1) HealBot_OnEvent_PartyMemberEnable(this, arg1) end,
["CHAT_MSG_SYSTEM"] = function(this, arg1) HealBot_OnEvent_SystemMsg(this, arg1) end,
["ZONE_CHANGED_NEW_AREA"] = function(this) HealBot_OnEvent_ZoneChanged(this) end,
["UPDATE_INVENTORY_ALERTS"] = function(this)
HealBot_Model:NotifyObservers("EQUIPMENT_CHANGED", "player")
HealBot_OnEvent_PlayerEquipmentChanged(this)
end,
["UNIT_INVENTORY_CHANGED"] = function(this, arg1)
if arg1 ~= "player" then return end
HealBot_Model:NotifyObservers("EQUIPMENT_CHANGED", arg1)
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
}
function HealBot_OnEvent(this, event, arg1, arg2, arg3, arg4)
local handler = HealBot_EventHandlers[event]
if handler then
handler(this, arg1, arg2, arg3, arg4)
else
HealBot_AddDebug("OnEvent (" .. event .. ")")
end
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
end
end
end
end);
local foundModern = false
if HealBot_Config.Skins then
for _, skin in ipairs(HealBot_Config.Skins) do
if skin == "Modern Flat" then foundModern = true break end
end
if not foundModern then
table.insert(HealBot_Config.Skins, "Modern Flat")
end
end
HealBot_InitData();
if not HealBot_PartyFrameHooked then
local origShowPartyFrame = ShowPartyFrame;
ShowPartyFrame = function()
if HealBot_Config.HideParty == 1 then
if HidePartyFrame then HidePartyFrame(); end
elseif origShowPartyFrame then
origShowPartyFrame();
end
end
HealBot_PartyFrameHooked = true;
end
if HealBot_Config.HideParty == 1 and HidePartyFrame then
HidePartyFrame();
end
if class == "PRIEST" or class == "DRUID" or class == "PALADIN" or class == "SHAMAN" then
HealBot_BonusScanner:ScanEquipment();
HealBot_Action_ShowFrame();
this:RegisterEvent("ZONE_CHANGED_NEW_AREA");
this:RegisterEvent("PLAYER_REGEN_DISABLED");
this:RegisterEvent("PLAYER_REGEN_ENABLED");
this:RegisterEvent("PLAYER_TARGET_CHANGED");
this:RegisterEvent("PARTY_MEMBERS_CHANGED");
this:RegisterEvent("RAID_ROSTER_UPDATE");
this:RegisterEvent("PARTY_MEMBER_DISABLE");
this:RegisterEvent("PARTY_MEMBER_ENABLE");
this:RegisterEvent("UNIT_PET");
this:RegisterEvent("UNIT_HEALTH");
this:RegisterEvent("UNIT_MANA");
this:RegisterEvent("UNIT_RAGE");
this:RegisterEvent("UNIT_ENERGY");
this:RegisterEvent("UNIT_DISPLAYPOWER");
this:RegisterEvent("SPELLS_CHANGED");
this:RegisterEvent("SPELLCAST_START");
this:RegisterEvent("SPELLCAST_STOP");
this:RegisterEvent("SPELLCAST_INTERRUPTED");
this:RegisterEvent("SPELLCAST_FAILED");
this:RegisterEvent("UNIT_AURA");
this:RegisterEvent("UPDATE_INVENTORY_ALERTS");
this:RegisterEvent("UNIT_INVENTORY_CHANGED");
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
function HealBot_OnEvent_UnitHealth(this, unit)
if (not HealBot_Heals[unit]) then return end
HealBot_CheckCasting(unit);
if unit == HealBot_Action_TooltipUnit then
HealBot_Action_RefreshTooltip(HealBot_Action_TooltipUnit);
end
end
function HealBot_OnEvent_UnitMana(this, unit)
if (unit ~= "player") then return end
HealBot_RecalcHeals();
end
function HealBot_OnEvent_ZoneChanged(this)
HealBot_ResetRangeScale();
HealBot_Delay_RecalcParty = 1;
end
function HealBot_OnEvent_PlayerRegenDisabled(this)
-- Removed HealBot_RecalcParty();
if (UnitIsDeadOrGhost("player")) or (UnitOnTaxi("player")) then
if HealBot_Config.AutoClose==1 and HealBot_Config.ActionVisible~=0 then
HealBot_Action.ProgrammaticHide = true;
HealBot_Action:Hide();
HealBot_Action.ProgrammaticHide = nil;
end;
else
HealBot_Action_ShowFrame();
-- Reapply user settings to override the engine's white default
if HealBot_Config and HealBot_Config.Current_Skin then
local skin = HealBot_Config.Current_Skin;
if HealBot_Config.backcolr and HealBot_Config.backcolr[skin] then
HealBot_Action:SetBackdropColor(
HealBot_Config.backcolr[skin],
HealBot_Config.backcolg[skin],
HealBot_Config.backcolb[skin],
HealBot_Config.backcola[skin]
);
HealBot_Action:SetBackdropBorderColor(
HealBot_Config.borcolr[skin],
HealBot_Config.borcolg[skin],
HealBot_Config.borcolb[skin],
HealBot_Config.borcola[skin]
);
end
end
HealBot_IsFighting = true;
end
-- HealBot_RecalcHeals();
end
function HealBot_OnEvent_PlayerRegenEnabled(this)
HealBot_IsFighting = false;
HealBot_Delay_RecalcParty = 1;
end
function HealBot_OnEvent_PlayerTargetChanged(this)
if HealBot_Action_UnitButtons and HealBot_Action_UnitButtons["target"] then
HealBot_View_DirtyUnits["target"] = true
HealBot_OnEvent_UnitAura(nil, "target");
end
end
function HealBot_OnEvent_PartyMembersChanged(this)
HealBot_Delay_RecalcParty = 1;
end
function HealBot_OnEvent_PartyMemberDisable(this, unit)
HealBot_RecalcHeals();
end
function HealBot_OnEvent_SystemMsg(this, msg)
if type(msg) == "string" then
local tmpTest, tmpTest, deserter = string.find(msg, HEALBOT_HASLEFTRAID);
if not deserter then
local tmpTest, tmpTest, deserter = string.find(msg, HEALBOT_HASLEFTPARTY);
end
if deserter then
if (HealBot_Healers[deserter]) then
local tmpTest, unitname, heal_val, heal_valn
tmpTest, tmpTest, unitname, heal_val = string.find(HealBot_Healers[deserter], ">> (%a+) <<=>> (.%d+) <<" );
heal_valn = tonumber(heal_val)
HealBot_Healers[deserter] = nil;
HealBot_AddDebug("Healer " .. deserter .. " left the group - Last known activity was heal " .. unitname .. " for " .. heal_val .. " << trapped in event SystemMsg");
if heal_valn > 0 and HealBot_HealsIn[unitname] then
HealBot_HealsIn[unitname] = HealBot_HealsIn[unitname] - heal_valn;
if HealBot_HealsIn[unitname] < 0 then
HealBot_HealsIn[unitname] = 0;
end
end
end
elseif msg == HEALBOT_YOULEAVETHEGROUP or msg == HEALBOT_YOULEAVETHERAID then
HealBot_Delay_RecalcParty = 1;
end
end
end
function HealBot_OnEvent_PartyMemberEnable(this, unit)
HealBot_RecalcHeals();
end
function HealBot_OnEvent_PlayerEquipmentChanged(this)
HealBot_EquipChangeTimer = 1;
end
function HealBot_OnEvent_PlayerEquipmentChanged2(this, unit)
if unit == "player" then
HealBot_EquipChangeTimer = 1;
end
end
function HealBot_OnEvent_SpellsChanged(this, arg1)
if arg1 then return; end
HealBot_AddDebug("HB: SpellsChanged");
HealBot_SpellsInitFlag = 2;
end
function HealBot_OnEvent_TalentsChanged(this, arg1)
HealBot_AddDebug("HB: TalentsChanged");
end
function HealBot_OnEvent_PlayerEnteringWorld(this)
HealBot_IsFighting = false;
-- Re-apply the refresh hook late in case another addon overrode it during load
if HealBot_ApplyRefreshHook then
HealBot_ApplyRefreshHook()
end
end
function HealBot_OnEvent_SpellcastStart(this, spell, duration)
HealBot_IsCasting = true;
HealBot_RecalcHeals();
HealBot_CheckCasting();
if spell == HEALBOT_RESURRECTION or spell == HEALBOT_ANCESTRALSPIRIT or spell == HEALBOT_REBIRTH or spell == HEALBOT_REDEMPTION then
if UnitName("Target") then
HealBot_SendAddonMessage("CTRA", "RES " .. UnitName("Target"));
HealBot_IamRessing = true;
end
end
end
function HealBot_OnEvent_SpellcastStop(this, eventName)
HealBot_IsCasting = false;
if eventName == "SPELLCAST_FAILED" then
HealBot_CastFailed = true;
end
HealBot_StopCasting();
HealBot_RecalcHeals();
if HealBot_IamRessing then
HealBot_SendAddonMessage("CTRA", "RESNO");
HealBot_IamRessing = false;
end
end
+42
View File
@@ -0,0 +1,42 @@
-- HealBot_Controller_Range.lua
-- Handles periodic range checking for units
local _scale = 0
function HealBot_ResetRangeScale()
_scale = 0
end
function HealBot_Range_Check(unit, range)
local return_val = 0;
if not range then
range = 40;
end
if ( unit == "player" ) then
return_val = 1;
elseif ( UnitIsVisible(unit) == 1 ) then
local tx, ty = GetPlayerMapPosition(unit)
local dist
if tx > 0 or ty > 0 then
local px, py = GetPlayerMapPosition("player")
dist = math.sqrt((px - tx)^2 + (py - ty)^2)
if dist > _scale and (px > 0 or py > 0) then
if ( CheckInteractDistance(unit, 4) ) then
_scale = dist
end
end
if dist <= (_scale * range / 27) then
return_val = 1
end
else
if ( HealBot_Config.QualityRange == 1 ) or range <= 27 then
if ( CheckInteractDistance(unit, 4) ) then
return_val = 1;
end
else
return_val = 1;
end
end
end
return return_val;
end
+822
View File
@@ -0,0 +1,822 @@
-- HealBot_Controller_Spells.lua
-- Centralized Spell management, calculation, and casting logic
HealBot_CastingSpell = nil;
HealBot_CastingTarget = nil;
HealBot_TargetRestorePending = nil;
HealBot_TargetRestoreTimer = 0;
local HealBot_Health60 = {
["DRUID"] = 3500,
["MAGE"] = 2500,
["HUNTER"] = 3500,
["PALADIN"] = 4000,
["PRIEST"] = 2500,
["ROGUE"] = 3500,
["SHAMAN"] = 3800,
["WARLOCK"] = 3500,
["WARRIOR"] = 5000,
}
function HealBot_GetSpellName(id)
if (not id) then
return nil;
end
local spellName, subSpellName = GetSpellName(id, BOOKTYPE_SPELL);
if (not spellName) then
return nil;
end
if (not subSpellName or subSpellName == "") then
return spellName;
end
return spellName .. " (" .. subSpellName .. ")";
end
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
end
function HealBot_CastSpellByName(spell)
if (HealBot_Spells[spell] and HealBot_Spells[spell].BagSlot) then
HealBot_UseItem(spell);
return;
end
local id;
if not HealBot_Spells[spell] then
id = HealBot_GetSpellId(spell);
elseif HealBot_Spells[spell].id then
id = HealBot_Spells[spell].id
else
id = HealBot_GetSpellId(spell);
end
if (not id) then
return;
end
CastSpell(id, BOOKTYPE_SPELL);
end
function HealBot_AnnounceCast(spell, target)
if not spell or not target then return end
if UnitIsDeadOrGhost(target) then
local spellLower = string.lower(spell)
if not (string.find(spellLower, "resurrection") or string.find(spellLower, "ancestral spirit") or string.find(spellLower, "redemption") or string.find(spellLower, "rebirth")) then
return
end
end
if HealBot_Config.ChatMessages then
local tName = target
if target == "target" then tName = HealBot_TargetName() or "target" else tName = UnitName(target) end
if not tName then tName = target end
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
-- Strip trailing spaces from base spell
baseSpell = string.gsub(baseSpell, "%s+$", "")
for i = 1, 5 do
local msgConf = HealBot_Config.ChatMessages[i]
local configSpell = msgConf and msgConf.Spell or ""
-- Strip trailing spaces from config spell just in case
configSpell = string.gsub(configSpell, "%s+$", "")
if msgConf and configSpell ~= "" and msgConf.Channel ~= "None" and (configSpell == spell or configSpell == baseSpell) then
local msg = msgConf.Message or ""
msg = string.gsub(msg, "#Spell#", spell)
msg = string.gsub(msg, "#Target#", tName)
local chan = msgConf.Channel
if chan == "Say" then
SendChatMessage(msg, "SAY")
elseif chan == "Party" and GetNumPartyMembers() > 0 then
SendChatMessage(msg, "PARTY")
elseif chan == "Raid" and GetNumRaidMembers() > 0 then
SendChatMessage(msg, "RAID")
elseif chan == "Whisper" and UnitIsPlayer(target) then
SendChatMessage(msg, "WHISPER", nil, tName)
end
end
end
end
end
function HealBot_Process_HealValue(spell, target)
if HealBot_Spells[spell] and HealBot_Spells[spell].CastTime > 1 then
HealBot_HealValue = HealBot_Spells[spell].HealsDur;
-- Apply dynamic Preservation bonus
if HEALBOT_REGROWTH and string.find(spell, HEALBOT_REGROWTH) then
local presRank = HealBot_GetTalentRank("Preservation")
if presRank > 0 then
local hasRejuv = false
for i=1,32 do
local buff = UnitBuff(target, i)
if not buff then break end
if string.find(buff, "Spell_Nature_Rejuvenation") then
hasRejuv = true
break
end
end
if hasRejuv then
local extHeal = HealBot_Spells[spell].HealsExt or 0
local bonus = extHeal * (presRank * 0.10)
HealBot_HealValue = HealBot_HealValue + math.floor(bonus)
end
end
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;
end
HealBot_HealsIn[uname] = HealBot_HealsIn[uname] + HealBot_HealValue;
HealBot_RecalcHeals(HealBot_FindUnitID(uname));
end
end
end
function HealBot_StartCasting(spell, target, ttype)
HealBot_CastFailed = false;
HealBot_CastSpellByName(spell);
if ( SpellCanTargetUnit(target) ) then
SpellTargetUnit(target);
ttype = "fired";
elseif SpellIsTargeting() then
SpellTargetUnit(target);
SpellStopTargeting()
elseif ttype == "direct" then
if ( UnitIsUnit(target, "player") or CheckInteractDistance(target, 4) ) then
ttype = "fired";
end
end
if ttype == "fired" and HealBot_Spells[spell] then
if not HealBot_CastFailed then
HealBot_CastingSpell = spell;
HealBot_CastingTarget = target;
HealBot_Process_HealValue(spell, target);
HealBot_AnnounceCast(spell, target);
end
end
end
function HealBot_StopCasting()
if HealBot_CastingTarget then
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));
end
end
HealBot_HealValue = 0;
end
end
HealBot_CastingSpell = nil;
HealBot_CastingTarget = nil;
local bar = HealBot_Action_HealthBar(HealBot_Action_AbortButton);
local ar = HealBot_Config.babortcolr[HealBot_Config.Current_Skin] or 0.1;
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");
bar:SetStatusBarColor(ar, ag, ab, 0);
local sr = HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin];
local sg = HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin];
local sb = HealBot_Config.btextdisbledcolb[HealBot_Config.Current_Skin];
local sa = HealBot_Config.btextdisbledcola[HealBot_Config.Current_Skin];
bar.txt:SetTextColor(sr, sg, sb, sa);
end
function HealBot_UnitHealth(unit)
local Current, Desired = UnitHealth(unit), UnitHealthMax(unit);
if unit == 'target' and Desired == 100 then
local class, level = HealBot_UnitClass(unit), UnitLevel(unit);
if HealBot_Health60[class] and level > 0 then
Desired = math.floor(HealBot_Health60[class] / 60 * level + 0.5)
else
Desired = UnitHealthMax('player');
end
Current = Desired / 100 * Current;
end
return Current, Desired;
end
function HealBot_CheckCasting(unit)
if not HealBot_CastingSpell or HealBot_AlwaysHeal() then return nil end
if not HealBot_Spells[HealBot_CastingSpell] then return nil end
if not unit then unit = HealBot_CastingTarget end
if unit ~= HealBot_CastingTarget then return nil end
local bar = HealBot_Action_HealthBar(HealBot_Action_AbortButton);
local ar = HealBot_Config.babortcolr[HealBot_Config.Current_Skin] or 0.1;
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;
if not bar.txt then bar.txt = getglobal(bar:GetName() .. "_text") end
if HealBot_IsCasting == false and HealBot_AbortButton == 0 then
bar:SetStatusBarColor(ar, ag, ab, 0);
local sr = HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin];
local sg = HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin];
local sb = HealBot_Config.btextdisbledcolb[HealBot_Config.Current_Skin];
local sa = HealBot_Config.btextdisbledcola[HealBot_Config.Current_Skin];
bar.txt:SetTextColor(sr, sg, sb, sa);
return nil
end
local Current, Desired = HealBot_UnitHealth(unit)
local Needed = Desired - Current;
Needed = Needed * (1 + (HealBot_Config.OverHeal * 4));
if Needed < 0 then Needed = 0 end
if (Needed > HealBot_Spells[HealBot_CastingSpell].HealsDur) then
local sr = HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin];
local sg = HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin];
local sb = HealBot_Config.btextdisbledcolb[HealBot_Config.Current_Skin];
local sa = HealBot_Config.btextdisbledcola[HealBot_Config.Current_Skin];
bar.txt:SetTextColor(sr, sg, sb, sa);
bar:SetStatusBarColor(ar, ag, ab, 0);
return nil
elseif HealBot_AbortButton == 1 and HealBot_IsCasting == true then
bar:SetStatusBarColor(ar, ag, ab, aa);
local sr = HealBot_Config.btextenabledcolr[HealBot_Config.Current_Skin];
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");
bar.txt:SetTextColor(sr, sg, sb, sa);
end
end
function HealBot_CastSpellOnFriend(spell, target)
if (not spell or not target or not UnitName(target)) then
return;
end
local targetEnemy = UnitCanAttack("player", "target");
local oldTarget = UnitName("target");
if HealBot_UnitClass("player") == "DRUID" and HealBot_ActiveShapeshiftStance and HealBot_Config.AutoUnshift == 1 then
CastShapeshiftForm(HealBot_ActiveShapeshiftStance);
end
if oldTarget ~= UnitName(target) then
TargetUnit(target);
end
HealBot_StartCasting(spell, target, "direct");
if targetEnemy then
HealBot_TargetRestorePending = { type = "enemy" };
elseif oldTarget and oldTarget ~= UnitName(target) then
HealBot_TargetRestorePending = { type = "friend" };
elseif not oldTarget then
HealBot_TargetRestorePending = { type = "clear" };
end
HealBot_TargetRestoreTimer = 0;
end
function HealBot_SetItemDefaults(spell)
if not HealBot_Spells[spell].Target then
HealBot_Spells[spell].Target = {"player", "party", "pet"};
end
if not HealBot_Spells[spell].Price then
HealBot_Spells[spell].Price = 0;
end
if not HealBot_Spells[spell].CastTime then
HealBot_Spells[spell].CastTime = 0;
end
if not HealBot_Spells[spell].Mana then
HealBot_Spells[spell].Mana = 0;
end
if not HealBot_Spells[spell].Channel then
HealBot_Spells[spell].Channel = HealBot_Spells[spell].CastTime;
end
if not HealBot_Spells[spell].Duration then
HealBot_Spells[spell].Duration = HealBot_Spells[spell].Channel;
end
if not HealBot_Spells[spell].HealsMin then
HealBot_Spells[spell].HealsMin = 0;
end
if not HealBot_Spells[spell].HealsMax then
HealBot_Spells[spell].HealsMax = 0;
end
HealBot_Spells[spell].RealHealing = 0;
HealBot_Spells[spell].HealsCast = (HealBot_Spells[spell].HealsMin + HealBot_Spells[spell].HealsMax) / 2;
if not HealBot_Spells[spell].HealsExt then
HealBot_Spells[spell].HealsExt = 0;
end
end
function HealBot_SetSpellDefaults(spell)
local baseHeal = HealBot_Spells[spell].HealsCast or 0
local extHeal = HealBot_Spells[spell].HealsExt or 0
local realHeal = HealBot_Spells[spell].RealHealing or 0
local _, class = UnitClass("player")
if class == "DRUID" then
local giftRank = HealBot_GetTalentRank("Gift of Nature")
local genRank = HealBot_GetTalentRank("Genesis")
local mult = 1 + (giftRank * 0.02)
baseHeal = baseHeal * mult
extHeal = extHeal * mult
realHeal = realHeal * mult
if genRank > 0 then
extHeal = extHeal * (1 + (genRank * 0.05))
end
elseif class == "PRIEST" then
local spiritRank = HealBot_GetTalentRank("Spiritual Healing")
local mult = 1 + (spiritRank * 0.06)
baseHeal = baseHeal * mult
extHeal = extHeal * mult
realHeal = realHeal * mult
if HEALBOT_RENEW and string.find(spell, HEALBOT_RENEW) then
local renewRank = HealBot_GetTalentRank("Improved Renew")
extHeal = extHeal * (1 + (renewRank * 0.05))
end
elseif class == "PALADIN" then
local hlRank = HealBot_GetTalentRank("Healing Light")
if (HEALBOT_HOLY_LIGHT and string.find(spell, HEALBOT_HOLY_LIGHT)) or
(HEALBOT_FLASH_OF_LIGHT and string.find(spell, HEALBOT_FLASH_OF_LIGHT)) or
(HEALBOT_HOLY_SHOCK and string.find(spell, HEALBOT_HOLY_SHOCK)) then
local mult = 1 + (hlRank * 0.04)
baseHeal = baseHeal * mult
realHeal = realHeal * mult
end
end
HealBot_Spells[spell].HealsDur = math.floor(baseHeal + extHeal + realHeal);
end
function HealBot_AddHeal(spell)
HealBot_SetSpellDefaults(spell);
table.foreachi(HealBot_Spells[spell].Target, function (i, val)
table.insert(HealBot_Heals[val], spell);
end);
HealBot_Spells[spell].BagSlot = HealBot_GetBagSlot(spell);
end
function HealBot_FindHealSpells()
local id = 1;
if HealBot_SpellsInitFlag > 0 then NeedEquipUpdate = 1; return; end
HealBot_Heals = { player = {}, pet = {}, party = {} };
table.foreach(HealBot_CurrentSpells, function (index, spell)
if (HealBot_Spells[spell]) then
if HealBot_CalcEquipBonus then
local healingbonus_penalty = 1;
if HealBot_Spells[spell].Level < 20 then
healingbonus_penalty = (1 - ((20 - HealBot_Spells[spell].Level) * 0.0375));
end
local temp_Spell_cast = 3.5;
if HealBot_Spells[spell].CastTime == 0 then
temp_Spell_cast = 3.5;
end
if not HealBot_Spells[spell].CastTime then
HealBot_Spells[spell].CastTime = 1.5;
end
if HealBot_Spells[spell].CastTime >= 1.5 and HealBot_Spells[spell].CastTime < 3.5 then
temp_Spell_cast = HealBot_Spells[spell].CastTime;
end
RealHealing = ((HealBot_GetBonus() * healingbonus_penalty) * (temp_Spell_cast / 3.5));
local playerClass, englishClass = UnitClass("player");
local SpiBonus = 0;
if (englishClass == "PRIEST") then
SpiBonus = ((HealBot_SpiBonus(spell) * healingbonus_penalty) * (temp_Spell_cast / 3.5))
RealHealing = RealHealing + SpiBonus;
end
RealHealing = math.floor(RealHealing);
HealBot_Spells[spell].RealHealing = RealHealing;
end
HealBot_AddHeal(spell);
end
end);
local items = {};
for bag = 0, NUM_BAG_FRAMES do
for slot = 1, GetContainerNumSlots(bag) do
local item = HealBot_GetItemName(bag, slot);
if HealBot_Spells[item] and not items[item] then
HealBot_SetItemDefaults(item);
HealBot_AddHeal(item);
items[item] = 1;
end
end
end
table.foreach(HealBot_Heals, function (key, val)
if (table.getn(val) == 0) then
HealBot_Heals[key] = nil;
end
end);
HealBot_Heals.target = HealBot_Heals.party;
for i = 1, 4 do
HealBot_Heals["party" .. i] = HealBot_Heals.party;
HealBot_Heals["partypet" .. i] = HealBot_Heals.party;
end
for i = 1, 40 do
HealBot_Heals["raid" .. i] = HealBot_Heals.party;
HealBot_Heals["raidpet" .. i] = HealBot_Heals.party;
end
if HealBot_CalcEquipBonus then
HealBot_AddDebug("...Done Equip Bonus:" .. RealHealing);
end
HealBot_CalcEquipBonus = false;
end
function HealBot_CanCastSpell(spell, unit)
local this = HealBot_Spells[spell];
-- Removed manual mana check so WoW can properly handle 0-cost buffs (Clearcasting/Inner Focus)
-- and so tooltips can render in red instead of disappearing.
if this.BagSlot then
local bag, slot = HealBot_UnpackBagSlot(this.BagSlot);
local start, duration, enable = GetContainerItemCooldown(bag, slot);
if (start > 0 and duration > 0 and enable > 0) then
return false;
end
end
return true;
end
function HealBot_GetHealSpell(unit, pattern)
if (not UnitName(unit)) then return nil 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 HealBot_UnitClass("player") == "DRUID" then
if HealBot_ActiveShapeshiftStance and HealBot_Config.AutoUnshift ~= 1 then return nil end;
end
-- Handle Inline Scripts
if string.sub(pattern, 1, 1) == "/" then
return pattern;
end
-- Handle Spells
if HealBot_Spells[pattern] or HealBot_GetSpellId(pattern) then
local spell = HealBot_GetSpellName(HealBot_GetSpellId(pattern)) or pattern
local range = 40;
if HealBot_Spells[spell] then
if not HealBot_CanCastSpell(spell, unit) then return nil end;
range = HealBot_Spells[spell].range or 40;
end
if HealBot_Range_Check(unit, range) == 0 then return nil end;
return spell;
end
-- Handle Named Macros
if GetMacroIndexByName(pattern) ~= 0 then
return pattern;
end
-- Handle Items
local bag, slot = HealBot_FindBagSlot(pattern)
if bag then
-- optionally check item range, but skipping for now as it's complex in vanilla
return pattern;
end
return nil;
end
function HealBot_HealUnit(unit, pattern)
HealBot_CastSpellOnFriend(HealBot_GetHealSpell(unit, pattern), unit);
end
function HealBot_RecalcHeals(unit)
HealBot_Action_Refresh(unit);
end
function HealBot_RecalcParty()
HealBot_Action_PartyChanged();
if HealBot_Action_HealButtons then
for _, button in ipairs(HealBot_Action_HealButtons) do
if button and button.unit then
HealBot_OnEvent_UnitAura(nil, button.unit);
end
end
end
HealBot_Action_RefreshButtons();
end
function HealBot_RecalcSpells()
HealBot_FindHealSpells();
HealBot_RecalcParty();
end
function HealBot_GetTalentRank(talentName)
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;
end
end
end
return 0;
end
function HealBot_SpiBonus(spell)
local heals_modifer = 0;
local base, stat, posBuff, negBuff = UnitStat("player", 5);
local currRank = HealBot_GetTalentRank("Spiritual Guidance")
if currRank > 0 then
local spiGuideBonus = stat * 0.05;
heals_modifer = heals_modifer + (currRank * spiGuideBonus);
end
return heals_modifer;
end
function HealBot_GetBonus()
local HealBonus = HealBot_BonusScanner:GetBonus() or 0;
if UnitClass("player") == "PALADIN" then
local ironRank = HealBot_GetTalentRank("Ironclad")
if ironRank > 0 then
local base, effectiveArmor = UnitArmor("player")
HealBonus = HealBonus + (effectiveArmor * (ironRank * 0.01))
end
end
return HealBonus;
end
function HealBot_InitSpells()
local id = 1
local cnt = 0;
local class = HealBot_UnitClass("player")
HealBot_CurrentSpells = {};
while true do
local spell = HealBot_GetSpellName(id);
if not spell then
break
end
if (HealBot_Spells[spell]) then
HealBot_Spells[spell].id = id;
HealBot_InitGetSpellData(spell, id, class);
table.insert(HealBot_CurrentSpells, spell);
cnt = cnt + 1;
end
id = id + 1;
end
return cnt;
end
function HealBot_InitGetSpellData(spell, id, class)
local i, _mana, _cast, _HealsMin, _HealsMax, _HealsExt, _duration, _range, _shield, _channel;
local tooltip = getglobal("HealBot_ScanTooltip");
local tmpText, line, tmpTest
if (not spell) then
return;
end
HealBot_ScanTooltip:SetOwner(HealBot_ScanTooltip, "ANCHOR_NONE")
HealBot_ScanTooltip:SetSpell(id, BOOKTYPE_SPELL);
_mana = 0;
_range = 40;
_cast = 0;
line = nil;
for lineNum = 2, 6 do
local lText = getglobal("HealBot_ScanTooltipTextLeft"..lineNum);
if lText and lText:IsVisible() and lText:GetText() then
local txt = lText:GetText();
local t1, t2, match;
t1, t2, match = string.find(txt, HEALBOT_TOOLTIP_MANA);
if match then _mana = match; end
if txt == HEALBOT_TOOLTIP_INSTANT_CAST or txt == "Instant" then
_cast = 0;
elseif txt == HEALBOT_TOOLTIP_CHANNELED then
_cast = 0;
else
t1, t2, match = string.find(txt, HEALBOT_TOOLTIP_CAST_TIME);
if match then _cast = match; end
end
t1, t2, match = string.find(txt, HEALBOT_TOOLTIP_RANGE);
if match then _range = match; end
if not string.find(txt, HEALBOT_TOOLTIP_MANA) and txt ~= HEALBOT_TOOLTIP_INSTANT_CAST and txt ~= "Instant" and txt ~= HEALBOT_TOOLTIP_CHANNELED and not string.find(txt, HEALBOT_TOOLTIP_CAST_TIME) and not string.find(txt, HEALBOT_TOOLTIP_RANGE) then
if not line then line = txt; end
end
end
local rText = getglobal("HealBot_ScanTooltipTextRight"..lineNum);
if rText and rText:IsVisible() and rText:GetText() then
local txt = rText:GetText();
local t1, t2, match;
t1, t2, match = string.find(txt, HEALBOT_TOOLTIP_RANGE);
if match then _range = match; end
end
end
tmpTest = nil;
if line then
if class == "PRIEST" then
if string.sub(spell, 1, 14) == string.sub(HEALBOT_POWER_WORD_SHIELD, 1, 14) then
tmpTest, tmpTest, _HealsMin, _shield = string.find(line, HEALBOT_SPELL_PATTERN_SHIELD);
_HealsExt = 0;
_HealsMax = _HealsMin;
elseif string.sub(spell, 1, 4) == string.sub(HEALBOT_RENEW, 1, 4) then
tmpTest, tmpTest, _HealsExt, tmpTest, _duration = string.find(line, HEALBOT_SPELL_PATTERN_RENEW);
_HealsMin = 0;
_HealsMax = 0;
if (_HealsExt == nil) then
tmpTest, tmpTest, _HealsExt, _duration = string.find(line, HEALBOT_SPELL_PATTERN_RENEW1);
end
if (_HealsExt == nil) then
tmpTest, tmpTest, _duration, _HealsExt = string.find(line, HEALBOT_SPELL_PATTERN_RENEW2);
end
if (_HealsExt == nil) then
tmpTest, tmpTest, _duration, _HealsExt = string.find(line, HEALBOT_SPELL_PATTERN_RENEW3);
end
elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_LESSER_HEAL, 1, 9) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_LESSER_HEAL);
elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_GREATER_HEAL, 1, 9) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_GREATER_HEAL);
elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_FLASH_HEAL, 1, 9) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_FLASH_HEAL);
elseif string.sub(spell, 1, 4) == string.sub(HEALBOT_HEAL, 1, 4) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_HEAL);
end
elseif class == "DRUID" then
if string.sub(spell, 1, 6) == string.sub(HEALBOT_REGROWTH, 1, 6) then
tmpTest, tmpTest, _HealsMin, _HealsMax, _HealsExt = string.find(line, HEALBOT_SPELL_PATTERN_REGROWTH);
if (tmpTest == nil) then
tmpTest, tmpTest, _HealsMin, _HealsMax, tmpTest, _HealsExt = string.find(line, HEALBOT_SPELL_PATTERN_REGROWTH1);
end
elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_REJUVENATION, 1, 9) then
tmpTest, tmpTest, _HealsExt, _duration = string.find(line, HEALBOT_SPELL_PATTERN_REJUVENATION);
_HealsMin = 0;
_HealsMax = 0;
if (_HealsExt == nil) then
tmpTest, tmpTest, _HealsExt, tmpTest, _duration = string.find(line, HEALBOT_SPELL_PATTERN_REJUVENATION1);
end
elseif string.sub(spell, 1, 7) == string.sub(HEALBOT_HEALING_TOUCH, 1, 7) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_HEALING_TOUCH);
end
elseif class == "PALADIN" then
if string.sub(spell, 1, 9) == string.sub(HEALBOT_HOLY_LIGHT, 1, 9) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_HOLY_LIGHT);
elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_FLASH_OF_LIGHT, 1, 9) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_FLASH_OF_LIGHT);
end
elseif class == "SHAMAN" then
if string.sub(spell, 1, 9) == string.sub(HEALBOT_HEALING_WAVE, 1, 9) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_HEALING_WAVE);
elseif string.sub(spell, 1, 9) == string.sub(HEALBOT_LESSER_HEALING_WAVE, 1, 9) then
tmpTest, _HealsMin, _HealsMax = HealBot_Generic_Patten(line, HEALBOT_SPELL_PATTERN_LESSER_HEALING_WAVE);
end
end
else
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: HealBot_ScanTooltip is lost");
HealBot_Report_Error("ERROR: If BonusScanner is used, try disabling BonusScanner");
end
if (_mana == nil) then
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: _mana is NIL");
HealBot_Report_Error("ERROR: Spell: " .. spell);
if HealBot_ScanTooltipTextLeft2:GetText() then
HealBot_Report_Error("ERROR: Tooltip = >> " .. HealBot_ScanTooltipTextLeft2:GetText() .. " <<");
end
HealBot_Report_Error("ERROR: Patten = >> " .. HEALBOT_TOOLTIP_MANA .. " <<");
end
if (_range == nil) then
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: _range is NIL");
HealBot_Report_Error("ERROR: Spell: " .. spell);
if HealBot_ScanTooltipTextRight2:GetText() then
HealBot_Report_Error("ERROR: Tooltip = >> " .. HealBot_ScanTooltipTextRight2:GetText() .. " <<");
end
HealBot_Report_Error("ERROR: Patten = >> " .. HEALBOT_TOOLTIP_RANGE .. " <<");
end
if (_cast == nil) then
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: _cast is NIL");
HealBot_Report_Error("ERROR: Spell: " .. spell);
if HealBot_ScanTooltipTextLeft3:GetText() then
HealBot_Report_Error("ERROR: Tooltip = >> " .. HealBot_ScanTooltipTextLeft3:GetText() .. " <<");
end
HealBot_Report_Error("ERROR: Patten = >> " .. HEALBOT_TOOLTIP_CAST_TIME .. " <<");
end
if (tmpTest == nil) then
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: tmpTest == nil");
HealBot_Report_Error("ERROR: spell = " .. spell);
if line then
HealBot_Report_Error("ERROR: Tooltip = >> " .. line .. " <<");
end
end
HealBot_Spells[spell].CastTime = tonumber(_cast);
HealBot_Spells[spell].Mana = tonumber(_mana);
HealBot_Spells[spell].Range = tonumber(_range);
HealBot_Spells[spell].HealsMin = tonumber(_HealsMin);
HealBot_Spells[spell].HealsMax = tonumber(_HealsMax);
if _HealsExt then
HealBot_Spells[spell].HealsExt = tonumber(_HealsExt);
end
if _duration then
HealBot_Spells[spell].Duration = tonumber(_duration);
end
if _shield then
HealBot_Spells[spell].Shield = tonumber(_shield);
end
if _channel then
HealBot_Spells[spell].Channel = tonumber(_channel);
end
if not HealBot_Spells[spell].Target then
HealBot_Spells[spell].Target = {"player", "party", "pet"};
end
if not HealBot_Spells[spell].Price then
HealBot_Spells[spell].Price = 0;
end
if not HealBot_Spells[spell].Channel then
HealBot_Spells[spell].Channel = HealBot_Spells[spell].CastTime;
end
if not HealBot_Spells[spell].Duration then
HealBot_Spells[spell].Duration = HealBot_Spells[spell].Channel;
end
if not HealBot_Spells[spell].RealHealing then
HealBot_Spells[spell].RealHealing = 0;
end
HealBot_Spells[spell].HealsCast = (HealBot_Spells[spell].HealsMin + HealBot_Spells[spell].HealsMax) / 2;
if not HealBot_Spells[spell].HealsExt then
HealBot_Spells[spell].HealsExt = 0;
end
end
function HealBot_Generic_Patten(matchStr, matchPattern)
local tmpTest, _HealsMin, _HealsMax, _HealsExt, _duration
tmpTest, tmpTest, _HealsMin, _HealsMax = string.find(matchStr, matchPattern);
if (tmpTest == nil) then
HealBot_Report_Error("================================");
HealBot_Report_Error("ERROR: tmpTest == nil");
HealBot_Report_Error("ERROR: pattern = " .. matchPattern);
HealBot_Report_Error("ERROR: Tooltip = >> " .. matchStr .. " <<");
end
return tmpTest, _HealsMin, _HealsMax;
end
HealBot_ActiveShapeshiftStance = nil;
function HealBot_UpdateShapeshiftForm()
HealBot_ActiveShapeshiftStance = HealBot_GetShapeshiftForm();
end
function HealBot_GetShapeshiftForm()
local forms = GetNumShapeshiftForms();
if forms then
local i;
for i=1,forms do
local icon,name,active = GetShapeshiftFormInfo(i);
if active then
local icon_lower = string.lower(icon);
if not string.find(icon_lower, "humanoidform") and not string.find(icon_lower, "treeoflife") and not string.find(icon_lower, "stoneclawtotem") then
return i;
end
end
end
end
return nil;
end
+63 -6
View File
@@ -1,7 +1,21 @@
HealBot_ConfigDefaults = { HealBot_ConfigDefaults = {
ShowManaBars=0, ShowManaBars=0,
ManaBarsHealersOnly=1, ManaBarsHealersOnly=0,
Version = HEALBOT_VERSION, Version = HEALBOT_VERSION,
AutoSwap_Enabled = 0,
AutoSwap_Profiles = {
[1] = HEALBOT_SKINS_STD,
[2] = HEALBOT_SKINS_STD,
[3] = HEALBOT_SKINS_STD,
[4] = HEALBOT_SKINS_STD,
[5] = HEALBOT_SKINS_STD,
},
bmaxrows = {
[HEALBOT_SKINS_STD] = 0,
},
GridOrientation = {
[HEALBOT_SKINS_STD] = 1,
},
AlertLevel = 0.95, AlertLevel = 0.95,
AutoClose = 1, AutoClose = 1,
PanelSounds = 1, PanelSounds = 1,
@@ -10,8 +24,11 @@ HealBot_ConfigDefaults = {
TargetHeals = 1, TargetHeals = 1,
EmergencyHeals = 1, EmergencyHeals = 1,
ActionLocked = 0, ActionLocked = 0,
ActionVisible = 1,
HideSolo = 0,
OverHeal = 0.25, OverHeal = 0.25,
CastNotify = 1, CastNotify = 1,
AutoUnshift = 1,
ChatMessages = { ChatMessages = {
[1] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" }, [1] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" },
[2] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" }, [2] = { Spell = "None", Message = "Casting #Spell# on #Target#", Channel = "None" },
@@ -22,6 +39,7 @@ HealBot_ConfigDefaults = {
HideOptions = 0, HideOptions = 0,
HideAbort = 1, HideAbort = 1,
ShowTooltip = 1, ShowTooltip = 1,
ShowHealthText = 0,
GrowUpwards = 0, GrowUpwards = 0,
ProtectPvP = 1, ProtectPvP = 1,
QualityRange = 0, QualityRange = 0,
@@ -169,18 +187,30 @@ HealBot_ConfigDefaults = {
}, },
}, },
EnableHealthy = 0, EnableHealthy = 0,
ShowNonManaBars = 0,
ActionVisible = 0, ActionVisible = 0,
ActionMouseover = 1,
CDCLeftText = {[HEALBOT_PRIEST]="None", [HEALBOT_SHAMAN]="None", [HEALBOT_DRUID]="None", [HEALBOT_PALADIN]="None",}, CDCLeftText = {[HEALBOT_PRIEST]="None", [HEALBOT_SHAMAN]="None", [HEALBOT_DRUID]="None", [HEALBOT_PALADIN]="None",},
CDCRightText = {[HEALBOT_PRIEST]="None", [HEALBOT_SHAMAN]="None", [HEALBOT_DRUID]="None", [HEALBOT_PALADIN]="None",}, CDCRightText = {[HEALBOT_PRIEST]="None", [HEALBOT_SHAMAN]="None", [HEALBOT_DRUID]="None", [HEALBOT_PALADIN]="None",},
Current_Skin = HEALBOT_SKINS_STD, Current_Skin = "Modern Flat",
Skin_ID = 1, Skin_ID = 1,
Skins = {HEALBOT_SKINS_STD, "HealBot Party", "HealBot Raid", "Alteric Valley", "Modern Flat"}, Skins = {"Modern Flat", HEALBOT_SKINS_STD, "HealBot Party", "HealBot Raid", "Alteric Valley"},
AutoSwap_Enabled = 0,
AutoSwap_Profiles = {
[1] = "Modern Flat", -- Solo
[2] = "HealBot Party", -- Party (2-5)
[3] = "HealBot Raid", -- Raid 15 (6-15)
[4] = "HealBot Raid", -- Raid 25 (16-25)
[5] = "HealBot Raid", -- Raid 40 (26-40)
},
numcols = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 4, ["Alteric Valley"] = 2, ["Modern Flat"] = 1}, numcols = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 4, ["Alteric Valley"] = 2, ["Modern Flat"] = 1},
bmaxrows = {[HEALBOT_SKINS_STD] = 0, ["HealBot Party"] = 0, ["HealBot Raid"] = 0, ["Alteric Valley"] = 0, ["Modern Flat"] = 0},
GridOrientation = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 1},
btexture = {[HEALBOT_SKINS_STD] = 8,["HealBot Party"] = 6, ["HealBot Raid"] = 7, ["Alteric Valley"] = 9, ["Modern Flat"] = 10}, btexture = {[HEALBOT_SKINS_STD] = 8,["HealBot Party"] = 6, ["HealBot Raid"] = 7, ["Alteric Valley"] = 9, ["Modern Flat"] = 10},
bcspace = {[HEALBOT_SKINS_STD] = 4, ["HealBot Party"] = 4, ["HealBot Raid"] = 2, ["Alteric Valley"] = 2, ["Modern Flat"] = 4}, bcspace = {[HEALBOT_SKINS_STD] = 4, ["HealBot Party"] = 4, ["HealBot Raid"] = 2, ["Alteric Valley"] = 2, ["Modern Flat"] = 4},
brspace = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 2, ["HealBot Raid"] = 2, ["Alteric Valley"] = 1, ["Modern Flat"] = 2}, brspace = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 2, ["HealBot Raid"] = 2, ["Alteric Valley"] = 1, ["Modern Flat"] = 2},
bwidth = {[HEALBOT_SKINS_STD] = 122, ["HealBot Party"] = 115, ["HealBot Raid"] = 90, ["Alteric Valley"] = 85, ["Modern Flat"] = 122}, bwidth = {[HEALBOT_SKINS_STD] = 122, ["HealBot Party"] = 115, ["HealBot Raid"] = 90, ["Alteric Valley"] = 85, ["Modern Flat"] = 100},
bheight = {[HEALBOT_SKINS_STD] = 19, ["HealBot Party"] = 18, ["HealBot Raid"] = 14, ["Alteric Valley"] = 16, ["Modern Flat"] = 20}, bheight = {[HEALBOT_SKINS_STD] = 19, ["HealBot Party"] = 18, ["HealBot Raid"] = 14, ["Alteric Valley"] = 16, ["Modern Flat"] = 40},
btextenabledcolr = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 1}, btextenabledcolr = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 1},
btextenabledcolg = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 1}, btextenabledcolg = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 1},
btextenabledcolb = {[HEALBOT_SKINS_STD] = 0, ["HealBot Party"] = 0, ["HealBot Raid"] = 0, ["Alteric Valley"] = 0, ["Modern Flat"] = 1}, btextenabledcolb = {[HEALBOT_SKINS_STD] = 0, ["HealBot Party"] = 0, ["HealBot Raid"] = 0, ["Alteric Valley"] = 0, ["Modern Flat"] = 1},
@@ -213,11 +243,17 @@ HealBot_ConfigDefaults = {
ShowHeader = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 1}, ShowHeader = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 1},
bcolormode = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 2}, bcolormode = {[HEALBOT_SKINS_STD] = 1, ["HealBot Party"] = 1, ["HealBot Raid"] = 1, ["Alteric Valley"] = 1, ["Modern Flat"] = 2},
bborder = {[HEALBOT_SKINS_STD] = 2, ["HealBot Party"] = 2, ["HealBot Raid"] = 2, ["Alteric Valley"] = 2, ["Modern Flat"] = 1}, bborder = {[HEALBOT_SKINS_STD] = 2, ["HealBot Party"] = 2, ["HealBot Raid"] = 2, ["Alteric Valley"] = 2, ["Modern Flat"] = 1},
bpadding = {[HEALBOT_SKINS_STD] = 10, ["HealBot Party"] = 10, ["HealBot Raid"] = 10, ["Alteric Valley"] = 10, ["Modern Flat"] = 10},
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}, bfontoutline = {[HEALBOT_SKINS_STD] = 0, ["HealBot Party"] = 0, ["HealBot Raid"] = 0, ["Alteric Valley"] = 0, ["Modern Flat"] = 1},
ShowTooltip = 1,
ShowManaBars = 0,
ManaBarsHealersOnly = 0,
Tooltip_ShowSpellDetail = 0, Tooltip_ShowSpellDetail = 0,
Tooltip_ShowTarget = 1, Tooltip_ShowTarget = 1,
Tooltip_Recommend = 1, Tooltip_Recommend = 1,
TooltipPos = 1, TooltipPos = 1,
HideParty = 0,
}; };
HealBot_Config = {}; HealBot_Config = {};
@@ -502,6 +538,7 @@ HealBot_Buff_Spells = {
HEALBOT_PRAYER_OF_SHADOW_PROTECTION, HEALBOT_PRAYER_OF_SHADOW_PROTECTION,
HEALBOT_INNER_FIRE, HEALBOT_INNER_FIRE,
HEALBOT_FEAR_WARD, HEALBOT_FEAR_WARD,
HEALBOT_ENLIGHTEN,
}, },
[HEALBOT_MAGE] = { [HEALBOT_MAGE] = {
HEALBOT_ARCANE_INTELLECT, HEALBOT_ARCANE_INTELLECT,
@@ -532,7 +569,7 @@ HealBot_Debuff_Types = {
HealBot_IsFighting = false; HealBot_IsFighting = false;
HealBot_DebuffPriority = {"none"}; HealBot_DebuffPriority = {"none"};
HealBot_DebuffWatch = {[HEALBOT_DISEASE_en]="NO", [HEALBOT_MAGIC_en]="NO", [HEALBOT_POISON_en]="NO", [HEALBOT_CURSE_en]="NO"}; HealBot_DebuffWatch = {[HEALBOT_DISEASE_en]=false, [HEALBOT_MAGIC_en]=false, [HEALBOT_POISON_en]=false, [HEALBOT_CURSE_en]=false};
HealBot_Heals = {}; HealBot_Heals = {};
@@ -546,3 +583,23 @@ HealBot_SpamCnt=0;
HealBot_Action_TooltipUnit=nil; HealBot_Action_TooltipUnit=nil;
HealBot_Ressing = {}; HealBot_Ressing = {};
HealBot_IamRessing = false; HealBot_IamRessing = false;
-- Table Recycling Pool (Puppeteer-inspired)
local tablePool = {}
function HealBot_GetTable()
local t = table.remove(tablePool)
if not t then
t = {}
end
return t
end
function HealBot_ReleaseTable(t)
if type(t) == "table" then
for k in pairs(t) do
t[k] = nil
end
table.insert(tablePool, t)
end
end
+44 -33
View File
@@ -70,6 +70,9 @@ HEALBOT_LESSER_HEAL = "Geringes Heilen";
HEALBOT_LESSER_HEALING_WAVE = "Geringe Welle der Heilung"; HEALBOT_LESSER_HEALING_WAVE = "Geringe Welle der Heilung";
HEALBOT_MEND_PET = "Tier Heilen"; HEALBOT_MEND_PET = "Tier Heilen";
HEALBOT_POWER_WORD_SHIELD = "Machtwort: Schild"; HEALBOT_POWER_WORD_SHIELD = "Machtwort: Schild";
HEALBOT_INNER_FIRE = "Inneres Feuer";
HEALBOT_FEAR_WARD = "Furchtzauberschutz";
HEALBOT_ENLIGHTEN = "Enlighten";
HEALBOT_REGROWTH = "Nachwachsen"; HEALBOT_REGROWTH = "Nachwachsen";
HEALBOT_RENEW = "Erneuerung"; HEALBOT_RENEW = "Erneuerung";
HEALBOT_REJUVENATION = "Verj\195\188ngung"; HEALBOT_REJUVENATION = "Verj\195\188ngung";
@@ -113,25 +116,25 @@ HEALBOT_RANK_11 = " (Rang 11)";
HEALBOT_LIBRARY_INCHEAL = "Erh\195\182ht durch Zauber und Effekte verursachte Heilung um bis zu (%d+)%."; HEALBOT_LIBRARY_INCHEAL = "Erh\195\182ht durch Zauber und Effekte verursachte Heilung um bis zu (%d+)%.";
HEALBOT_LIBRARY_INCDAMHEAL = "Erh\195\182ht durch Zauber und magische Effekte zugef\195\188gten Schaden und Heilung um bis zu (%d+)%."; HEALBOT_LIBRARY_INCDAMHEAL = "Erh\195\182ht durch Zauber und magische Effekte zugef\195\188gten Schaden und Heilung um bis zu (%d+)%.";
HB_BONUSSCANNER_NAMES = { HEALBOT_BONUSSCANNER_NAMES = {
HEAL = "Heilung", HEAL = "Heilung",
} }
HB_BONUSSCANNER_PREFIX_EQUIP = "Anlegen: "; HEALBOT_BONUSSCANNER_PREFIX_EQUIP = "Anlegen: ";
HB_BONUSSCANNER_PREFIX_SET = "Set: "; HEALBOT_BONUSSCANNER_PREFIX_SET = "Set: ";
HB_BONUSSCANNER_PATTERNS_PASSIVE = { HEALBOT_BONUSSCANNER_PATTERNS_PASSIVE = {
{ pattern = "Erh\195\182ht durch Zauber und magische Effekte zugef\195\188gten Schaden und Heilung um bis zu (%d+)%.", effect = {"HEAL","DMG"} }, { pattern = "Erh\195\182ht durch Zauber und magische Effekte zugef\195\188gten Schaden und Heilung um bis zu (%d+)%.", effect = {"HEAL","DMG"} },
{ pattern = "Erh\195\182ht durch Zauber und Effekte verursachte Heilung um bis zu (%d+)%.", effect = "HEAL" }, { pattern = "Erh\195\182ht durch Zauber und Effekte verursachte Heilung um bis zu (%d+)%.", effect = "HEAL" },
{ pattern = "Erh\195\182ht die durch Zauber und Effekte verursachte Heilung um bis zu (%d+)%.", effect = "HEAL" }, { pattern = "Erh\195\182ht die durch Zauber und Effekte verursachte Heilung um bis zu (%d+)%.", effect = "HEAL" },
}; };
HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = { HEALBOT_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = {
["Heilzauber"] = "HEAL", ["Heilzauber"] = "HEAL",
["Heilung und Zauberschaden"] = {"HEAL","DMG"}, ["Heilung und Zauberschaden"] = {"HEAL","DMG"},
}; };
HB_BONUSSCANNER_PATTERNS_OTHER = { HEALBOT_BONUSSCANNER_PATTERNS_OTHER = {
{ pattern = "Zandalarianisches Siegel des Mojo", effect = {"DMG", "HEAL"}, value = 18 }, { pattern = "Zandalarianisches Siegel des Mojo", effect = {"DMG", "HEAL"}, value = 18 },
{ pattern = "Zandalarianisches Siegel der Inneren Ruhe", effect = "HEAL", value = 33 }, { pattern = "Zandalarianisches Siegel der Inneren Ruhe", effect = "HEAL", value = 33 },
@@ -154,32 +157,32 @@ HEALBOT_DEBUFF_WEAKENED_SOUL = "Interface\\Icons\\Spell_Holy_AshesToAshes";
HEALBOT_DEBUFF_RECENTLY_BANDAGED = "Interface\\Icons\\INV_Misc_Bandage_08"; HEALBOT_DEBUFF_RECENTLY_BANDAGED = "Interface\\Icons\\INV_Misc_Bandage_08";
HB_SPELL_PATTERN_LESSER_HEAL = "Euer Ziel um (%d+) bis (%d+) Punkt%(e%) heilen"; HEALBOT_SPELL_PATTERN_LESSER_HEAL = "Euer Ziel um (%d+) bis (%d+) Punkt%(e%) heilen";
HB_SPELL_PATTERN_HEAL = "Euer Ziel um (%d+) bis (%d+) Punkt%(e%) heilen"; HEALBOT_SPELL_PATTERN_HEAL = "Euer Ziel um (%d+) bis (%d+) Punkt%(e%) heilen";
HB_SPELL_PATTERN_GREATER_HEAL = "Ein langsam zu wirkender Zauber, der ein einzelnes Ziel um (%d+) bis (%d+) Punkt%(e%) heilt"; HEALBOT_SPELL_PATTERN_GREATER_HEAL = "Ein langsam zu wirkender Zauber, der ein einzelnes Ziel um (%d+) bis (%d+) Punkt%(e%) heilt";
HB_SPELL_PATTERN_FLASH_HEAL = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)"; HEALBOT_SPELL_PATTERN_FLASH_HEAL = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HB_SPELL_PATTERN_RENEW2 = "Heilt das Ziel (%d+) Sek. lang um (%d+) bis (%d+) Schadenspunk"; HEALBOT_SPELL_PATTERN_RENEW2 = "Heilt das Ziel (%d+) Sek. lang um (%d+) bis (%d+) Schadenspunk";
HB_SPELL_PATTERN_RENEW3 = "Heilt das Ziel (%d+) Sek. lang um (%d+) Schadenspunk"; HEALBOT_SPELL_PATTERN_RENEW3 = "Heilt das Ziel (%d+) Sek. lang um (%d+) Schadenspunk";
HB_SPELL_PATTERN_SHIELD = "absorbiert dabei (%d+) Punkt%(e%) Schaden. H\195\164lt (%d+) Sek"; HEALBOT_SPELL_PATTERN_SHIELD = "absorbiert dabei (%d+) Punkt%(e%) Schaden. H\195\164lt (%d+) Sek";
HB_SPELL_PATTERN_HEALING_TOUCH = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)"; HEALBOT_SPELL_PATTERN_HEALING_TOUCH = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HB_SPELL_PATTERN_REGROWTH = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) und \195\188ber (%d+) Sek%. um weitere (%d+)"; HEALBOT_SPELL_PATTERN_REGROWTH = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) und \195\188ber (%d+) Sek%. um weitere (%d+)";
HB_SPELL_PATTERN_REGROWTH1 = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) und \195\188ber (%d+) Sek%. um weitere (%d+) bis (%d+)"; HEALBOT_SPELL_PATTERN_REGROWTH1 = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) und \195\188ber (%d+) Sek%. um weitere (%d+) bis (%d+)";
HB_SPELL_PATTERN_HOLY_LIGHT = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)"; HEALBOT_SPELL_PATTERN_HOLY_LIGHT = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HB_SPELL_PATTERN_FLASH_OF_LIGHT = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)"; HEALBOT_SPELL_PATTERN_FLASH_OF_LIGHT = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HB_SPELL_PATTERN_HEALING_WAVE = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)"; HEALBOT_SPELL_PATTERN_HEALING_WAVE = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HB_SPELL_PATTERN_LESSER_HEALING_WAVE = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)"; HEALBOT_SPELL_PATTERN_LESSER_HEALING_WAVE = "Heilt ein befreundetes Ziel um (%d+) bis (%d+) Punkt%(e%)";
HB_SPELL_PATTERN_REJUVENATION = "Heilt das Ziel von (%d+) \195\188ber (%d+) Sek"; HEALBOT_SPELL_PATTERN_REJUVENATION = "Heilt das Ziel von (%d+) \195\188ber (%d+) Sek";
HB_SPELL_PATTERN_REJUVENATION1 = "Heilt das Ziel von (%d+) bis (%d+) \195\188ber (%d+) Sek"; HEALBOT_SPELL_PATTERN_REJUVENATION1 = "Heilt das Ziel von (%d+) bis (%d+) \195\188ber (%d+) Sek";
HB_TOOLTIP_MANA = "^(%d+) Mana$"; HEALBOT_TOOLTIP_MANA = "^(%d+) Mana$";
HB_TOOLTIP_RANGE = "(%d+) m"; HEALBOT_TOOLTIP_RANGE = "(%d+) m";
HB_TOOLTIP_INSTANT_CAST = "Spontanzauber"; HEALBOT_TOOLTIP_INSTANT_CAST = "Spontanzauber";
HB_TOOLTIP_CAST_TIME = "(%d+.?%d*) Sek"; HEALBOT_TOOLTIP_CAST_TIME = "(%d+.?%d*) Sek";
HB_TOOLTIP_CHANNELED = "Abgebrochen"; HEALBOT_TOOLTIP_CHANNELED = "Abgebrochen";
HB_HASLEFTRAID = "^([^%s]+) hat die \195\131\197\147berfallgruppe verlassen%.$"; HEALBOT_HASLEFTRAID = "^([^%s]+) hat die \195\131\197\147berfallgruppe verlassen%.$";
HB_HASLEFTPARTY = "^([^%s]+) hat die Gruppe verlassen"; HEALBOT_HASLEFTPARTY = "^([^%s]+) hat die Gruppe verlassen";
HB_YOULEAVETHEGROUP = "Du hast die Gruppe verlassen" HEALBOT_YOULEAVETHEGROUP = "Du hast die Gruppe verlassen"
HB_YOULEAVETHERAID = "Du hast den Schlachtzug verlassen" HEALBOT_YOULEAVETHERAID = "Du hast den Schlachtzug verlassen"
----------------- -----------------
-- Translation -- -- Translation --
@@ -205,7 +208,7 @@ HEALBOT_OPTIONS_TAB_HEALING = "Heilung";
HEALBOT_OPTIONS_TAB_CDC = "Debuffs"; HEALBOT_OPTIONS_TAB_CDC = "Debuffs";
HEALBOT_OPTIONS_TAB_SKIN = "Skin" HEALBOT_OPTIONS_TAB_SKIN = "Skin"
HEALBOT_OPTIONS_PANEL_TEXT = "Heilungspanel Optionen:" HEALBOT_OPTIONS_PANEL_TEXT = "Manabalken Optionen:"
HEALBOT_OPTIONS_BARALPHA = "Leisten Transparenz"; HEALBOT_OPTIONS_BARALPHA = "Leisten Transparenz";
HEALBOT_OPTIONS_BARALPHAINHEAL = "Ankomm.Heilung Transparenz"; HEALBOT_OPTIONS_BARALPHAINHEAL = "Ankomm.Heilung Transparenz";
HEALBOT_OPTIONS_ACTIONLOCKED = "Fenster fixieren"; HEALBOT_OPTIONS_ACTIONLOCKED = "Fenster fixieren";
@@ -218,6 +221,7 @@ HEALBOT_OPTIONS_QUALITYRANGE = "Exakter 25 Meter Check in Instanzen";
HEALBOT_OPTIONS_INTEGRATECTRA = "Integriere CTRA"; HEALBOT_OPTIONS_INTEGRATECTRA = "Integriere CTRA";
HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key"; HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key";
HEALBOT_OPTIONS_PROTECTPVP = "Vermeidung des PvP Flags"; HEALBOT_OPTIONS_PROTECTPVP = "Vermeidung des PvP Flags";
HEALBOT_OPTIONS_HIDEPARTY = "Standard-Gruppenfenster ausblenden";
HEALBOT_OPTIONS_HEAL_CHATOPT = "Chat Optionen"; HEALBOT_OPTIONS_HEAL_CHATOPT = "Chat Optionen";
HEALBOT_OPTIONS_SKINTEXT = "Skin" HEALBOT_OPTIONS_SKINTEXT = "Skin"
@@ -320,6 +324,14 @@ HEALBOT_CLASSES_RANGES = "Fernkampf";
HEALBOT_CLASSES_HEALERS = "Heiler"; HEALBOT_CLASSES_HEALERS = "Heiler";
HEALBOT_CLASSES_CUSTOM = "pers\195\182nlich"; HEALBOT_CLASSES_CUSTOM = "pers\195\182nlich";
HEALBOT_OPTIONS_MONITORNO = "Keine";
HEALBOT_OPTIONS_MONITORALL = "Alle";
HEALBOT_OPTIONS_MONITORMELEE = "Nahkampf";
HEALBOT_OPTIONS_MONITORRANGE = "Fernkampf";
HEALBOT_OPTIONS_MONITORHEALERS = "Heiler";
HEALBOT_OPTIONS_MONITORCUSTOM = "Eigene";
HEALBOT_OPTIONS_PETS = "Begleiter";
HEALBOT_OPTIONS_SHOWTOOLTIP = "Zeige Tooltips"; HEALBOT_OPTIONS_SHOWTOOLTIP = "Zeige Tooltips";
HEALBOT_OPTIONS_SHOWDETTOOLTIP = "Zeige detaillierte Spruchinfos"; HEALBOT_OPTIONS_SHOWDETTOOLTIP = "Zeige detaillierte Spruchinfos";
HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "Zeige Zielinfos"; HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "Zeige Zielinfos";
@@ -344,7 +356,6 @@ HEALBOT_WORDS_SEC = "Sek";
HEALBOT_WORDS_TO = "zu"; HEALBOT_WORDS_TO = "zu";
HEALBOT_WORDS_CAST = "Zauber" HEALBOT_WORDS_CAST = "Zauber"
HEALBOT_WORDS_FOR = "f\195\188r"; HEALBOT_WORDS_FOR = "f\195\188r";
end end
+48 -45
View File
@@ -1,4 +1,4 @@
HEALBOT_VERSION = "1.2.2"; HEALBOT_VERSION = GetAddOnMetadata("HealBotBlue", "Version");
------------- -------------
-- ENGLISH -- -- ENGLISH --
@@ -93,6 +93,7 @@ HEALBOT_THORNS = "Thorns";
HEALBOT_OMEN_OF_CLARITY = "Omen of Clarity"; HEALBOT_OMEN_OF_CLARITY = "Omen of Clarity";
HEALBOT_INNER_FIRE = "Inner Fire"; HEALBOT_INNER_FIRE = "Inner Fire";
HEALBOT_FEAR_WARD = "Fear Ward"; HEALBOT_FEAR_WARD = "Fear Ward";
HEALBOT_ENLIGHTEN = "Enlighten";
HEALBOT_RESURRECTION = "Resurrection"; HEALBOT_RESURRECTION = "Resurrection";
HEALBOT_REDEMPTION = "Redemption"; HEALBOT_REDEMPTION = "Redemption";
@@ -131,19 +132,19 @@ HEALBOT_RANK_11 = " (Rank 11)";
HEALBOT_LIBRARY_INCHEAL = "Increases healing done by spells and effects by up to (%d+)%."; HEALBOT_LIBRARY_INCHEAL = "Increases healing done by spells and effects by up to (%d+)%.";
HEALBOT_LIBRARY_INCDAMHEAL = "Increases damage and healing done by magical spells and effects by up to (%d+)%."; HEALBOT_LIBRARY_INCDAMHEAL = "Increases damage and healing done by magical spells and effects by up to (%d+)%.";
HB_BONUSSCANNER_NAMES = { HEALBOT_BONUSSCANNER_NAMES = {
HEAL = "Healing", HEAL = "Healing",
}; };
HB_BONUSSCANNER_PREFIX_EQUIP = "Equip: "; HEALBOT_BONUSSCANNER_PREFIX_EQUIP = "Equip: ";
HB_BONUSSCANNER_PREFIX_SET = "Set: "; HEALBOT_BONUSSCANNER_PREFIX_SET = "Set: ";
HB_BONUSSCANNER_PATTERNS_PASSIVE = { HEALBOT_BONUSSCANNER_PATTERNS_PASSIVE = {
{ pattern = "Increases healing done by spells and effects by up to (%d+)%.", effect = "HEAL" }, { pattern = "Increases healing done by spells and effects by up to (%d+)%.", effect = "HEAL" },
{ pattern = "Increases damage and healing done by magical spells and effects by up to (%d+)%.", effect = {"HEAL", "DMG"} }, { pattern = "Increases damage and healing done by magical spells and effects by up to (%d+)%.", effect = {"HEAL", "DMG"} },
}; };
HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = { HEALBOT_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = {
["Healing Spells"] = "HEAL", ["Healing Spells"] = "HEAL",
["Increases Healing"] = "HEAL", ["Increases Healing"] = "HEAL",
["Healing and Spell Damage"] = {"HEAL", "DMG"}, ["Healing and Spell Damage"] = {"HEAL", "DMG"},
@@ -151,7 +152,7 @@ HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = {
["Spell Damage and Healing"] = {"HEAL", "DMG"}, ["Spell Damage and Healing"] = {"HEAL", "DMG"},
}; };
HB_BONUSSCANNER_PATTERNS_OTHER = { HEALBOT_BONUSSCANNER_PATTERNS_OTHER = {
{ pattern = "Zandalar Signet of Mojo", effect = {"DMG", "HEAL"}, value = 18 }, { pattern = "Zandalar Signet of Mojo", effect = {"DMG", "HEAL"}, value = 18 },
{ pattern = "Zandalar Signet of Serenity", effect = "HEAL", value = 33 }, { pattern = "Zandalar Signet of Serenity", effect = "HEAL", value = 33 },
@@ -173,35 +174,35 @@ HEALBOT_DEBUFF_WEAKENED_SOUL = "Interface\\Icons\\Spell_Holy_AshesToAshes";
HEALBOT_DEBUFF_RECENTLY_BANDAGED = "Interface\\Icons\\INV_Misc_Bandage_08"; HEALBOT_DEBUFF_RECENTLY_BANDAGED = "Interface\\Icons\\INV_Misc_Bandage_08";
HB_SPELL_PATTERN_LESSER_HEAL = "Heal your target for (%d+) to (%d+)"; HEALBOT_SPELL_PATTERN_LESSER_HEAL = "Heal your target for (%d+) to (%d+)";
HB_SPELL_PATTERN_HEAL = "Heal your target for (%d+) to (%d+)"; HEALBOT_SPELL_PATTERN_HEAL = "Heal your target for (%d+) to (%d+)";
HB_SPELL_PATTERN_GREATER_HEAL = "A slow casting spell that heals a single target for (%d+) to (%d+)"; HEALBOT_SPELL_PATTERN_GREATER_HEAL = "A slow casting spell that heals a single target for (%d+) to (%d+)";
HB_SPELL_PATTERN_FLASH_HEAL = "Heals a friendly target for (%d+) to (%d+)"; HEALBOT_SPELL_PATTERN_FLASH_HEAL = "Heals a friendly target for (%d+) to (%d+)";
HB_SPELL_PATTERN_RENEW = "Heals the target of (%d+) to (%d+) damage over (%d+) sec"; HEALBOT_SPELL_PATTERN_RENEW = "Heals the target of (%d+) to (%d+) damage over (%d+) sec";
HB_SPELL_PATTERN_RENEW1 = "Heals the target of (%d+) damage over (%d+) sec"; HEALBOT_SPELL_PATTERN_RENEW1 = "Heals the target of (%d+) damage over (%d+) sec";
HB_SPELL_PATTERN_RENEW2 = "Not needed for en"; HEALBOT_SPELL_PATTERN_RENEW2 = "Not needed for en";
HB_SPELL_PATTERN_RENEW3 = "Not needed for en"; HEALBOT_SPELL_PATTERN_RENEW3 = "Not needed for en";
HB_SPELL_PATTERN_SHIELD = "absorbing (%d+) damage. Lasts (%d+) sec."; HEALBOT_SPELL_PATTERN_SHIELD = "absorbing (%d+) damage. Lasts (%d+) sec.";
HB_SPELL_PATTERN_HEALING_TOUCH = "Heals a friendly target for (%d+) to (%d+)"; HEALBOT_SPELL_PATTERN_HEALING_TOUCH = "Heals a friendly target for (%d+) to (%d+)";
HB_SPELL_PATTERN_REGROWTH = "Heals a friendly target for (%d+) to (%d+) and another (%d+) over (%d+) sec"; HEALBOT_SPELL_PATTERN_REGROWTH = "Heals a friendly target for (%d+) to (%d+) and another (%d+) over (%d+) sec";
HB_SPELL_PATTERN_REGROWTH1 = "Heals a friendly target for (%d+) to (%d+) and another (%d+) to (%d+) over (%d+) sec"; HEALBOT_SPELL_PATTERN_REGROWTH1 = "Heals a friendly target for (%d+) to (%d+) and another (%d+) to (%d+) over (%d+) sec";
HB_SPELL_PATTERN_HOLY_LIGHT = "Heals a friendly target for (%d+) to (%d+)"; HEALBOT_SPELL_PATTERN_HOLY_LIGHT = "Heals a friendly target for (%d+) to (%d+)";
HB_SPELL_PATTERN_FLASH_OF_LIGHT = "Heals a friendly target for (%d+) to (%d+)"; HEALBOT_SPELL_PATTERN_FLASH_OF_LIGHT = "Heals a friendly target for (%d+) to (%d+)";
HB_SPELL_PATTERN_HEALING_WAVE = "Heals a friendly target for (%d+) to (%d+)"; HEALBOT_SPELL_PATTERN_HEALING_WAVE = "Heals a friendly target for (%d+) to (%d+)";
HB_SPELL_PATTERN_LESSER_HEALING_WAVE = "Heals a friendly target for (%d+) to (%d+)"; HEALBOT_SPELL_PATTERN_LESSER_HEALING_WAVE = "Heals a friendly target for (%d+) to (%d+)";
HB_SPELL_PATTERN_REJUVENATION = "Heals the target for (%d+) over (%d+) sec"; HEALBOT_SPELL_PATTERN_REJUVENATION = "Heals the target for (%d+) over (%d+) sec";
HB_SPELL_PATTERN_REJUVENATION1 = "Heals the target for (%d+) to (%d+) over (%d+) sec"; HEALBOT_SPELL_PATTERN_REJUVENATION1 = "Heals the target for (%d+) to (%d+) over (%d+) sec";
HB_SPELL_PATTERN_MEND_PET = "Heals your pet (%d+) health every second while you focus. Lasts (%d+) sec"; HEALBOT_SPELL_PATTERN_MEND_PET = "Heals your pet (%d+) health every second while you focus. Lasts (%d+) sec";
HB_TOOLTIP_MANA = "^(%d+) Mana$"; HEALBOT_TOOLTIP_MANA = "^(%d+) Mana$";
HB_TOOLTIP_RANGE = "(%d+) yd range"; HEALBOT_TOOLTIP_RANGE = "(%d+) yd range";
HB_TOOLTIP_INSTANT_CAST = "Instant cast"; HEALBOT_TOOLTIP_INSTANT_CAST = "Instant cast";
HB_TOOLTIP_CAST_TIME = "(%d+.?%d*) sec cast"; HEALBOT_TOOLTIP_CAST_TIME = "(%d+.?%d*) sec cast";
HB_TOOLTIP_CHANNELED = "Channeled"; HEALBOT_TOOLTIP_CHANNELED = "Channeled";
HB_HASLEFTRAID = "^([^%s]+) has left the raid group$"; HEALBOT_HASLEFTRAID = "^([^%s]+) has left the raid group$";
HB_HASLEFTPARTY = "^([^%s]+) leaves the party$"; HEALBOT_HASLEFTPARTY = "^([^%s]+) leaves the party$";
HB_YOULEAVETHEGROUP = "You leave the group." HEALBOT_YOULEAVETHEGROUP = "You leave the group."
HB_YOULEAVETHERAID = "You have left the raid group" HEALBOT_YOULEAVETHERAID = "You have left the raid group"
----------------- -----------------
@@ -230,7 +231,7 @@ HEALBOT_OPTIONS_TAB_SKIN = "Skin";
HEALBOT_OPTIONS_TAB_BUFF = "Buff"; HEALBOT_OPTIONS_TAB_BUFF = "Buff";
HEALBOT_OPTIONS_TAB_CHAT = "Chat"; HEALBOT_OPTIONS_TAB_CHAT = "Chat";
HEALBOT_OPTIONS_PANEL_TEXT = "Healing panel options:" HEALBOT_OPTIONS_PANEL_TEXT = "Mana bar options:"
HEALBOT_OPTIONS_BARALPHA = "Bar opacity"; HEALBOT_OPTIONS_BARALPHA = "Bar opacity";
HEALBOT_OPTIONS_BARALPHAINHEAL= "Incoming heals opacity"; HEALBOT_OPTIONS_BARALPHAINHEAL= "Incoming heals opacity";
HEALBOT_OPTIONS_ACTIONLOCKED = "Lock position"; HEALBOT_OPTIONS_ACTIONLOCKED = "Lock position";
@@ -243,6 +244,7 @@ HEALBOT_OPTIONS_QUALITYRANGE = "Exact 27yard range check in instances";
--HEALBOT_OPTIONS_INTEGRATECTRA = "Integrate CTRA"; --HEALBOT_OPTIONS_INTEGRATECTRA = "Integrate CTRA";
HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key"; HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key";
HEALBOT_OPTIONS_PROTECTPVP = "Avoid accidental PvP flagging"; HEALBOT_OPTIONS_PROTECTPVP = "Avoid accidental PvP flagging";
HEALBOT_OPTIONS_HIDEPARTY = "Hide Default Party Frames";
HEALBOT_OPTIONS_HEAL_CHATOPT = "Chat Options"; HEALBOT_OPTIONS_HEAL_CHATOPT = "Chat Options";
HEALBOT_OPTIONS_SKINTEXT = "Use skin" HEALBOT_OPTIONS_SKINTEXT = "Use skin"
@@ -321,9 +323,10 @@ HEALBOT_OPTIONS_HEAL_BUTTONS = "Healing bars";
HEALBOT_OPTIONS_EMERGFILTER = "Show extra bars for"; HEALBOT_OPTIONS_EMERGFILTER = "Show extra bars for";
HEALBOT_OPTIONS_GROUPHEALS = "Group"; HEALBOT_OPTIONS_GROUPHEALS = "Group";
HEALBOT_OPTIONS_GROUPHEALS_LABEL = "Group Only";
HEALBOT_OPTIONS_TANKHEALS = "Main tanks"; HEALBOT_OPTIONS_TANKHEALS = "Main tanks";
HEALBOT_OPTIONS_TARGETHEALS = "Targets"; HEALBOT_OPTIONS_TARGETHEALS = "Targets";
HEALBOT_OPTIONS_EMERGENCYHEALS= "Extra"; HEALBOT_OPTIONS_EMERGENCYHEALS= "Raid / Extra";
HEALBOT_OPTIONS_HEALLEVEL = "Healing Level"; HEALBOT_OPTIONS_HEALLEVEL = "Healing Level";
HEALBOT_OPTIONS_ALERTLEVEL = "Alert Level"; HEALBOT_OPTIONS_ALERTLEVEL = "Alert Level";
HEALBOT_OPTIONS_OVERHEAL = "Show Abort button when overhealing" HEALBOT_OPTIONS_OVERHEAL = "Show Abort button when overhealing"
@@ -358,6 +361,14 @@ HEALBOT_CLASSES_RANGES = "Ranged";
HEALBOT_CLASSES_HEALERS = "Healers"; HEALBOT_CLASSES_HEALERS = "Healers";
HEALBOT_CLASSES_CUSTOM = "Custom"; HEALBOT_CLASSES_CUSTOM = "Custom";
HEALBOT_OPTIONS_MONITORNO = "None";
HEALBOT_OPTIONS_MONITORALL = "All";
HEALBOT_OPTIONS_MONITORMELEE = "Melee";
HEALBOT_OPTIONS_MONITORRANGE = "Ranged";
HEALBOT_OPTIONS_MONITORHEALERS = "Healers";
HEALBOT_OPTIONS_MONITORCUSTOM = "Custom";
HEALBOT_OPTIONS_PETS = "Pets";
HEALBOT_OPTIONS_SHOWTOOLTIP = "Show tooltips"; HEALBOT_OPTIONS_SHOWTOOLTIP = "Show tooltips";
HEALBOT_OPTIONS_SHOWDETTOOLTIP = "Show detailed spell information"; HEALBOT_OPTIONS_SHOWDETTOOLTIP = "Show detailed spell information";
HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "Show target information"; HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "Show target information";
@@ -377,11 +388,3 @@ HEALBOT_WORDS_SEC = "sec";
HEALBOT_WORDS_TO = "to"; HEALBOT_WORDS_TO = "to";
HEALBOT_WORDS_CAST = "Cast" HEALBOT_WORDS_CAST = "Cast"
HEALBOT_WORDS_FOR = "for"; HEALBOT_WORDS_FOR = "for";
+44 -33
View File
@@ -61,6 +61,9 @@ HEALBOT_FLASH_HEAL = "Soins rapides";
HEALBOT_FLASH_OF_LIGHT = "Eclair lumineux"; HEALBOT_FLASH_OF_LIGHT = "Eclair lumineux";
HEALBOT_HOLY_SHOCK = "Holy Shock"; HEALBOT_HOLY_SHOCK = "Holy Shock";
HEALBOT_GREATER_HEAL = "Soins sup\195\169rieurs"; HEALBOT_GREATER_HEAL = "Soins sup\195\169rieurs";
HEALBOT_INNER_FIRE = "Feu int\195\169rieur";
HEALBOT_FEAR_WARD = "Gardien de peur";
HEALBOT_ENLIGHTEN = "Enlighten";
HEALBOT_HEALING_TOUCH = "Toucher gu\195\169risseur"; HEALBOT_HEALING_TOUCH = "Toucher gu\195\169risseur";
HEALBOT_HEAL = "Soins"; HEALBOT_HEAL = "Soins";
HEALBOT_HEALING_WAVE = "Vague de soins"; HEALBOT_HEALING_WAVE = "Vague de soins";
@@ -112,14 +115,14 @@ HEALBOT_RANK_11 = " (Rang 11)";
HEALBOT_LIBRARY_INCHEAL = "Increases healing done by spells and effects by up to (%d+)%."; -- *************** needs French translation *************** HEALBOT_LIBRARY_INCHEAL = "Increases healing done by spells and effects by up to (%d+)%."; -- *************** needs French translation ***************
HEALBOT_LIBRARY_INCDAMHEAL = "Increases damage and healing done by magical spells and effects by up to (%d+)%."; -- *************** needs French translation *************** HEALBOT_LIBRARY_INCDAMHEAL = "Increases damage and healing done by magical spells and effects by up to (%d+)%."; -- *************** needs French translation ***************
HB_BONUSSCANNER_NAMES = { HEALBOT_BONUSSCANNER_NAMES = {
HEAL = "Soins", HEAL = "Soins",
}; };
HB_BONUSSCANNER_PREFIX_EQUIP = "Equip\195\169 : "; HEALBOT_BONUSSCANNER_PREFIX_EQUIP = "Equip\195\169 : ";
HB_BONUSSCANNER_PREFIX_SET = "Complet : "; HEALBOT_BONUSSCANNER_PREFIX_SET = "Complet : ";
HB_BONUSSCANNER_PATTERNS_PASSIVE = { HEALBOT_BONUSSCANNER_PATTERNS_PASSIVE = {
{ pattern = "Augmente les effets des sorts de soins de (%d+)% au maximum.", effect = "HEAL" }, { pattern = "Augmente les effets des sorts de soins de (%d+)% au maximum.", effect = "HEAL" },
{ pattern = "Augmente les soins prodigu\195\169s par les sorts et effets de (%d+)% au maximum.", effect = "HEAL"}, { pattern = "Augmente les soins prodigu\195\169s par les sorts et effets de (%d+)% au maximum.", effect = "HEAL"},
{ pattern = "Augmente les d\195\169g\195\162ts et les soins prodigu\195\169s par les sortsfalseles effets magiques de (%d+)% au maximum.", effect = "HEAL" }, { pattern = "Augmente les d\195\169g\195\162ts et les soins prodigu\195\169s par les sortsfalseles effets magiques de (%d+)% au maximum.", effect = "HEAL" },
@@ -127,39 +130,39 @@ HB_BONUSSCANNER_PATTERNS_PASSIVE = {
}; };
HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = { HEALBOT_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = {
["Sorts de Soins"] = "HEAL", ["Sorts de Soins"] = "HEAL",
["D\195\169g\195\162ts et soins "] = {"HEAL", "DMG"}, ["D\195\169g\195\162ts et soins "] = {"HEAL", "DMG"},
}; };
HB_SPELL_PATTERN_LESSER_HEAL = "Soigne la cible de (%d+) \195\160 (%d+) points de vie"; HEALBOT_SPELL_PATTERN_LESSER_HEAL = "Soigne la cible de (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_HEAL = "Soigne la cible de (%d+) \195\160 (%d+) points de vie"; HEALBOT_SPELL_PATTERN_HEAL = "Soigne la cible de (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_GREATER_HEAL = "Une longue incantation qui rend (%d+) \195\160 (%d+) points de vie \195\160 une cible unique"; HEALBOT_SPELL_PATTERN_GREATER_HEAL = "Une longue incantation qui rend (%d+) \195\160 (%d+) points de vie \195\160 une cible unique";
HB_SPELL_PATTERN_FLASH_HEAL = "Rend (%d+) \195\160 (%d+) points de vie"; HEALBOT_SPELL_PATTERN_FLASH_HEAL = "Rend (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_RENEW = "Rend (%d+) \195\160 (%d+) points de vie \195\160 la cible en (%d+) sec"; HEALBOT_SPELL_PATTERN_RENEW = "Rend (%d+) \195\160 (%d+) points de vie \195\160 la cible en (%d+) sec";
HB_SPELL_PATTERN_RENEW1 = "Rend (%d+) points de vie \195\160 la cible en (%d+) sec"; HEALBOT_SPELL_PATTERN_RENEW1 = "Rend (%d+) points de vie \195\160 la cible en (%d+) sec";
HB_SPELL_PATTERN_HEALING_TOUCH = "Rend (%d+) \195\160 (%d+) points de vie"; HEALBOT_SPELL_PATTERN_HEALING_TOUCH = "Rend (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_REGROWTH = "Soigne une cible amie pour (%d+) \195\160 (%d+) puis pour (%d+) points suppl.+mentaires pendant (%d+) sec"; HEALBOT_SPELL_PATTERN_REGROWTH = "Soigne une cible amie pour (%d+) \195\160 (%d+) puis pour (%d+) points suppl.+mentaires pendant (%d+) sec";
HB_SPELL_PATTERN_REGROWTH1 = "Soigne une cible amie pour (%d+) \195\160 (%d+) puis pour (%d+) \195\160 (%d+) points suppl.+mentaires pendant (%d+) sec"; HEALBOT_SPELL_PATTERN_REGROWTH1 = "Soigne une cible amie pour (%d+) \195\160 (%d+) puis pour (%d+) \195\160 (%d+) points suppl.+mentaires pendant (%d+) sec";
HB_SPELL_PATTERN_HOLY_LIGHT = "Rend (%d+) \195\160 (%d+) points de vie"; HEALBOT_SPELL_PATTERN_HOLY_LIGHT = "Rend (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_FLASH_OF_LIGHT = "Rend (%d+) \195\160 (%d+) points de vie"; HEALBOT_SPELL_PATTERN_FLASH_OF_LIGHT = "Rend (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_HEALING_WAVE = "Rend (%d+) \195\160 (%d+) points de vie"; HEALBOT_SPELL_PATTERN_HEALING_WAVE = "Rend (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_LESSER_HEALING_WAVE = "Rend (%d+) \195\160 (%d+) points de vie"; HEALBOT_SPELL_PATTERN_LESSER_HEALING_WAVE = "Rend (%d+) \195\160 (%d+) points de vie";
HB_SPELL_PATTERN_REJUVENATION = "Soigne la cible de (%d+) durant (%d+) sec"; HEALBOT_SPELL_PATTERN_REJUVENATION = "Soigne la cible de (%d+) durant (%d+) sec";
HB_SPELL_PATTERN_REJUVENATION1 = "Soigne la cible de (%d+) a (%d+) durant (%d+) sec"; HEALBOT_SPELL_PATTERN_REJUVENATION1 = "Soigne la cible de (%d+) a (%d+) durant (%d+) sec";
HB_SPELL_PATTERN_SHIELD = "absorbe (%d+) points de d\195\169g\195\162ts. Dure (%d+) sec"; HEALBOT_SPELL_PATTERN_SHIELD = "absorbe (%d+) points de d\195\169g\195\162ts. Dure (%d+) sec";
HB_SPELL_PATTERN_MEND_PET = "Soigne votre compagnon de (%d+) points de vie chaques secondes que vous le ciblez. Dure (%d+) sec" HEALBOT_SPELL_PATTERN_MEND_PET = "Soigne votre compagnon de (%d+) points de vie chaques secondes que vous le ciblez. Dure (%d+) sec"
HB_TOOLTIP_MANA = "^Mana : (%d+)$"; HEALBOT_TOOLTIP_MANA = "^Mana : (%d+)$";
HB_TOOLTIP_INSTANT_CAST = 'Incantation imm\195\169diate'; HEALBOT_TOOLTIP_INSTANT_CAST = 'Incantation imm\195\169diate';
HB_TOOLTIP_CAST_TIME = '(%d+.?%d*) sec'; HEALBOT_TOOLTIP_CAST_TIME = '(%d+.?%d*) sec';
HB_TOOLTIP_RANGE = "de (%d+) m" HEALBOT_TOOLTIP_RANGE = "de (%d+) m"
HB_TOOLTIP_CHANNELED = "Focaliser" HEALBOT_TOOLTIP_CHANNELED = "Focaliser"
HB_HASLEFTRAID = "^([^%s]+) a quitt\195\131\194\169 le groupe de raid$"; HEALBOT_HASLEFTRAID = "^([^%s]+) a quitt\195\131\194\169 le groupe de raid$";
HB_HASLEFTPARTY = "^([^%s]+) has left the party$"; -- *************** needs French translation *************** HEALBOT_HASLEFTPARTY = "^([^%s]+) has left the party$"; -- *************** needs French translation ***************
HB_YOULEAVETHEGROUP = "You leave the group" -- *************** needs translation *************** HEALBOT_YOULEAVETHEGROUP = "You leave the group" -- *************** needs translation ***************
HB_YOULEAVETHERAID = "You have left the raid group" -- *************** needs translation *************** HEALBOT_YOULEAVETHERAID = "You have left the raid group" -- *************** needs translation ***************
----------------- -----------------
-- Translation -- -- Translation --
@@ -188,7 +191,7 @@ HEALBOT_OPTIONS_TAB_CDC = "Cure";
HEALBOT_OPTIONS_TAB_SKIN = "Skin" HEALBOT_OPTIONS_TAB_SKIN = "Skin"
HEALBOT_OPTIONS_PANEL_TEXT = "Panneau d'option de soin:" HEALBOT_OPTIONS_PANEL_TEXT = "Options de barre de mana:"
HEALBOT_OPTIONS_ACTIONLOCKED = "Bloquer la position"; HEALBOT_OPTIONS_ACTIONLOCKED = "Bloquer la position";
HEALBOT_OPTIONS_GROWUPWARDS = "Monter"; HEALBOT_OPTIONS_GROWUPWARDS = "Monter";
HEALBOT_OPTIONS_AUTOSHOW = "Ouvrir automatiquement"; HEALBOT_OPTIONS_AUTOSHOW = "Ouvrir automatiquement";
@@ -200,6 +203,7 @@ HEALBOT_OPTIONS_QUALITYRANGE = "Exact 27yard range check in instances";
HEALBOT_OPTIONS_INTEGRATECTRA = "Intregrer CTRA"; HEALBOT_OPTIONS_INTEGRATECTRA = "Intregrer CTRA";
HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key"; HEALBOT_OPTIONS_TOGGLEALTUSE = "Toggle Alt-key";
HEALBOT_OPTIONS_PROTECTPVP = "Avoid accidental PvP flagging"; HEALBOT_OPTIONS_PROTECTPVP = "Avoid accidental PvP flagging";
HEALBOT_OPTIONS_HIDEPARTY = "Masquer les cadres de groupe par défaut";
HEALBOT_OPTIONS_ITEMS = "Objets"; HEALBOT_OPTIONS_ITEMS = "Objets";
@@ -259,6 +263,14 @@ HEALBOT_CLASSES_RANGES = "Distances";
HEALBOT_CLASSES_HEALERS = "Soigneurs"; HEALBOT_CLASSES_HEALERS = "Soigneurs";
HEALBOT_CLASSES_CUSTOM = "Divers"; HEALBOT_CLASSES_CUSTOM = "Divers";
HEALBOT_OPTIONS_MONITORNO = "Aucun";
HEALBOT_OPTIONS_MONITORALL = "Tous";
HEALBOT_OPTIONS_MONITORMELEE = "M\195\169l\195\169e";
HEALBOT_OPTIONS_MONITORRANGE = "\195\128 distance";
HEALBOT_OPTIONS_MONITORHEALERS = "Soigneurs";
HEALBOT_OPTIONS_MONITORCUSTOM = "Personnalis\195\169";
HEALBOT_OPTIONS_PETS = "Familiers";
HEALBOT_OPTIONS_BARALPHAINHEAL= "Incoming heal opacity"; -- *************** needs French translation *************** HEALBOT_OPTIONS_BARALPHAINHEAL= "Incoming heal opacity"; -- *************** needs French translation ***************
HEALBOT_OPTIONS_CDCBUTTONS = "Curing buttons"; -- *************** needs French translation *************** HEALBOT_OPTIONS_CDCBUTTONS = "Curing buttons"; -- *************** needs French translation ***************
@@ -325,7 +337,6 @@ HEALBOT_WORDS_SEC = "sec"; -- *************** needs translati
HEALBOT_WORDS_TO = "to"; -- *************** needs translation *************** HEALBOT_WORDS_TO = "to"; -- *************** needs translation ***************
HEALBOT_WORDS_CAST = "Cast" -- *************** needs translation *************** HEALBOT_WORDS_CAST = "Cast" -- *************** needs translation ***************
HEALBOT_WORDS_FOR = "for"; -- *************** needs translation *************** HEALBOT_WORDS_FOR = "for"; -- *************** needs translation ***************
end end
+45 -34
View File
@@ -61,6 +61,9 @@ HEALBOT_PRAYER_OF_HEALING = "치유의 기원";
HEALBOT_CHAIN_HEAL = "연쇄 치유"; HEALBOT_CHAIN_HEAL = "연쇄 치유";
HEALBOT_POWER_WORD_FORTITUDE = "신의 권능: 인내"; HEALBOT_POWER_WORD_FORTITUDE = "신의 권능: 인내";
HEALBOT_INNER_FIRE = "내면의 열정";
HEALBOT_FEAR_WARD = "공포의 결계";
HEALBOT_ENLIGHTEN = "Enlighten";
HEALBOT_MARK_OF_THE_WILD = "야생의 징표"; HEALBOT_MARK_OF_THE_WILD = "야생의 징표";
HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복"; HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
@@ -97,20 +100,20 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
HEALBOT_LIBRARY_INCHEAL = "모든 주문 및 효과에 의한 치유량이 최대 (%d+)만큼 증가합니다%."; HEALBOT_LIBRARY_INCHEAL = "모든 주문 및 효과에 의한 치유량이 최대 (%d+)만큼 증가합니다%.";
HEALBOT_LIBRARY_INCDAMHEAL = "모든 주문 및 효과에 의한 피해와 치유량이 최대 (%d+)만큼 증가합니다%."; HEALBOT_LIBRARY_INCDAMHEAL = "모든 주문 및 효과에 의한 피해와 치유량이 최대 (%d+)만큼 증가합니다%.";
HB_BONUSSCANNER_NAMES = { HEALBOT_BONUSSCANNER_NAMES = {
HEAL = "치유량", HEAL = "치유량",
}; };
HB_BONUSSCANNER_PREFIX_EQUIP = "착용 효과: "; HEALBOT_BONUSSCANNER_PREFIX_EQUIP = "착용 효과: ";
HB_BONUSSCANNER_PREFIX_SET = "세트 효과: "; HEALBOT_BONUSSCANNER_PREFIX_SET = "세트 효과: ";
HB_BONUSSCANNER_PATTERNS_PASSIVE = { HEALBOT_BONUSSCANNER_PATTERNS_PASSIVE = {
{ pattern = "모든 주문 및 효과에 의한 치유량이 최대 (%d+)만큼 증가합니다%.", effect = "HEAL" }, { pattern = "모든 주문 및 효과에 의한 치유량이 최대 (%d+)만큼 증가합니다%.", effect = "HEAL" },
{ pattern = "주문과 효과에 의한 치유량이 최대 (%d+)만큼 증가합니다%.", effect = "HEAL" }, { pattern = "주문과 효과에 의한 치유량이 최대 (%d+)만큼 증가합니다%.", effect = "HEAL" },
{ pattern = "모든 주문 및 효과에 의한 피해와 치유량이 최대 (%d+)만큼 증가합니다%.", effect = {"HEAL", "DMG"} }, { pattern = "모든 주문 및 효과에 의한 피해와 치유량이 최대 (%d+)만큼 증가합니다%.", effect = {"HEAL", "DMG"} },
}; };
HB_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = { HEALBOT_BONUSSCANNER_PATTERNS_GENERIC_LOOKUP = {
["치유 주문"] = "HEAL", ["치유 주문"] = "HEAL",
["치유량 증가"] = "HEAL", ["치유량 증가"] = "HEAL",
["치유 효과 증가"] = "HEAL", ["치유 효과 증가"] = "HEAL",
@@ -120,7 +123,7 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
["치유 및 공격 주문 위력"] = {"HEAL", "DMG"}, ["치유 및 공격 주문 위력"] = {"HEAL", "DMG"},
}; };
HB_BONUSSCANNER_PATTERNS_OTHER = { HEALBOT_BONUSSCANNER_PATTERNS_OTHER = {
{ pattern = "잔달라 모조의 인장", effect = {"DMG", "HEAL"}, value = 18 }, { pattern = "잔달라 모조의 인장", effect = {"DMG", "HEAL"}, value = 18 },
{ pattern = "잔달라 평온의 인장", effect = "HEAL", value = 33 }, { pattern = "잔달라 평온의 인장", effect = "HEAL", value = 33 },
@@ -132,33 +135,33 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
{ pattern = "반짝이는 마나 오일", effect = { "MANAREG", "HEAL"}, value = {12, 25} }, { pattern = "반짝이는 마나 오일", effect = { "MANAREG", "HEAL"}, value = {12, 25} },
}; };
HB_SPELL_PATTERN_LESSER_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다"; HEALBOT_SPELL_PATTERN_LESSER_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다"; HEALBOT_SPELL_PATTERN_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_GREATER_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다"; HEALBOT_SPELL_PATTERN_GREATER_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_FLASH_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다"; HEALBOT_SPELL_PATTERN_FLASH_HEAL = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_RENEW = "(%d+)초에 걸쳐 대상의 생명력을 총 (%d+)~(%d+)만큼 회복시킵니다"; HEALBOT_SPELL_PATTERN_RENEW = "(%d+)초에 걸쳐 대상의 생명력을 총 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_RENEW1 = "(%d+)초에 걸쳐 대상의 생명력을 총 (%d+)만큼 회복시킵니다"; HEALBOT_SPELL_PATTERN_RENEW1 = "(%d+)초에 걸쳐 대상의 생명력을 총 (%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_SHIELD = "(%d+)의 피해를 흡수합니다. (%d+)초 동안 지속됩니다."; HEALBOT_SPELL_PATTERN_SHIELD = "(%d+)의 피해를 흡수합니다. (%d+)초 동안 지속됩니다.";
HB_SPELL_PATTERN_HEALING_TOUCH = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다"; HEALBOT_SPELL_PATTERN_HEALING_TOUCH = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_REGROWTH = "대상의 생명력을 (%d+)~(%d+)만큼 회복시키고 추가로 (%d+)초에 걸쳐 총 (%d+)의 생명력을 회복시킵니다"; HEALBOT_SPELL_PATTERN_REGROWTH = "대상의 생명력을 (%d+)~(%d+)만큼 회복시키고 추가로 (%d+)초에 걸쳐 총 (%d+)의 생명력을 회복시킵니다";
HB_SPELL_PATTERN_REGROWTH1 = "대상의 생명력을 (%d+)~(%d+)만큼 회복시키고 추가로 (%d+)초에 걸쳐 총 (%d+)~(%d+)의 생명력을 회복시킵니다"; HEALBOT_SPELL_PATTERN_REGROWTH1 = "대상의 생명력을 (%d+)~(%d+)만큼 회복시키고 추가로 (%d+)초에 걸쳐 총 (%d+)~(%d+)의 생명력을 회복시킵니다";
HB_SPELL_PATTERN_HOLY_LIGHT = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다"; HEALBOT_SPELL_PATTERN_HOLY_LIGHT = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_FLASH_OF_LIGHT = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다"; HEALBOT_SPELL_PATTERN_FLASH_OF_LIGHT = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_HEALING_WAVE = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다"; HEALBOT_SPELL_PATTERN_HEALING_WAVE = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_LESSER_HEALING_WAVE = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다"; HEALBOT_SPELL_PATTERN_LESSER_HEALING_WAVE = "대상의 생명력을 (%d+)~(%d+)만큼 회복시킵니다";
HB_SPELL_PATTERN_REJUVENATION = "(%d+)에 걸쳐 (%d+)의 생명력을 회복시킵니다"; HEALBOT_SPELL_PATTERN_REJUVENATION = "(%d+)에 걸쳐 (%d+)의 생명력을 회복시킵니다";
HB_SPELL_PATTERN_REJUVENATION1 = "(%d+)에 걸쳐 (%d+)~(%d+)의 생명력을 회복시킵니다"; HEALBOT_SPELL_PATTERN_REJUVENATION1 = "(%d+)에 걸쳐 (%d+)~(%d+)의 생명력을 회복시킵니다";
HB_SPELL_PATTERN_MEND_PET = "야수에 정신을 집중하는 동안 매초마다 (%d+)의 생명력을 치료합니다"; HEALBOT_SPELL_PATTERN_MEND_PET = "야수에 정신을 집중하는 동안 매초마다 (%d+)의 생명력을 치료합니다";
HB_TOOLTIP_MANA = "^마나 (%d+)$"; HEALBOT_TOOLTIP_MANA = "^마나 (%d+)$";
HB_TOOLTIP_RANGE = "(%d+)미터"; HEALBOT_TOOLTIP_RANGE = "(%d+)미터";
HB_TOOLTIP_INSTANT_CAST = "즉시 시전"; HEALBOT_TOOLTIP_INSTANT_CAST = "즉시 시전";
HB_TOOLTIP_CAST_TIME = "(%d+.?%d*)초"; HEALBOT_TOOLTIP_CAST_TIME = "(%d+.?%d*)초";
HB_TOOLTIP_CHANNELED = "채널링"; HEALBOT_TOOLTIP_CHANNELED = "채널링";
HB_HASLEFTRAID = "^([^%s]+)님이 공격대를 떠났습니다$"; HEALBOT_HASLEFTRAID = "^([^%s]+)님이 공격대를 떠났습니다$";
HB_HASLEFTPARTY = "^([^%s]+)님이 파티를 떠났습니다$"; HEALBOT_HASLEFTPARTY = "^([^%s]+)님이 파티를 떠났습니다$";
HB_YOULEAVETHEGROUP = "당신은 파티를 떠났습니다" HEALBOT_YOULEAVETHEGROUP = "당신은 파티를 떠났습니다"
HB_YOULEAVETHERAID = "공격대를 떠났습니다" HEALBOT_YOULEAVETHERAID = "공격대를 떠났습니다"
----------------- -----------------
-- Translation -- -- Translation --
@@ -184,7 +187,7 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
HEALBOT_OPTIONS_TAB_CDC = "치료"; HEALBOT_OPTIONS_TAB_CDC = "치료";
HEALBOT_OPTIONS_TAB_SKIN = "스킨" HEALBOT_OPTIONS_TAB_SKIN = "스킨"
HEALBOT_OPTIONS_PANEL_TEXT = "치유 패널 옵션:" HEALBOT_OPTIONS_PANEL_TEXT = "마나 바 옵션:"
HEALBOT_OPTIONS_BARALPHA = "바 불투명도"; HEALBOT_OPTIONS_BARALPHA = "바 불투명도";
HEALBOT_OPTIONS_BARALPHAINHEAL = "들어오는 치유 불투명도"; HEALBOT_OPTIONS_BARALPHAINHEAL = "들어오는 치유 불투명도";
HEALBOT_OPTIONS_ACTIONLOCKED = "위치 고정"; HEALBOT_OPTIONS_ACTIONLOCKED = "위치 고정";
@@ -197,6 +200,7 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
--HEALBOT_OPTIONS_INTEGRATECTRA = "CTRA 연동"; --HEALBOT_OPTIONS_INTEGRATECTRA = "CTRA 연동";
HEALBOT_OPTIONS_TOGGLEALTUSE = "Alt-key 토글"; HEALBOT_OPTIONS_TOGGLEALTUSE = "Alt-key 토글";
HEALBOT_OPTIONS_PROTECTPVP = "우발적 PvP 상태 피함"; HEALBOT_OPTIONS_PROTECTPVP = "우발적 PvP 상태 피함";
HEALBOT_OPTIONS_HIDEPARTY = "기본 파티 프레임 숨김";
HEALBOT_OPTIONS_HEAL_CHATOPT = "대화창 옵션"; HEALBOT_OPTIONS_HEAL_CHATOPT = "대화창 옵션";
HEALBOT_OPTIONS_SKINTEXT = "스킨 사용" HEALBOT_OPTIONS_SKINTEXT = "스킨 사용"
@@ -302,6 +306,14 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
HEALBOT_CLASSES_HEALERS = "힐러들"; HEALBOT_CLASSES_HEALERS = "힐러들";
HEALBOT_CLASSES_CUSTOM = "사용자"; HEALBOT_CLASSES_CUSTOM = "사용자";
HEALBOT_OPTIONS_MONITORNO = "없음";
HEALBOT_OPTIONS_MONITORALL = "모두";
HEALBOT_OPTIONS_MONITORMELEE = "근접";
HEALBOT_OPTIONS_MONITORRANGE = "원거리";
HEALBOT_OPTIONS_MONITORHEALERS = "힐러";
HEALBOT_OPTIONS_MONITORCUSTOM = "사용자 정의";
HEALBOT_OPTIONS_PETS = "소환수";
HEALBOT_OPTIONS_SHOWTOOLTIP = "툴팁 표시"; HEALBOT_OPTIONS_SHOWTOOLTIP = "툴팁 표시";
HEALBOT_OPTIONS_SHOWDETTOOLTIP = "주문 정보 표시"; HEALBOT_OPTIONS_SHOWDETTOOLTIP = "주문 정보 표시";
HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "대상 정보 표시"; HEALBOT_OPTIONS_SHOWUNITTOOLTIP = "대상 정보 표시";
@@ -321,7 +333,6 @@ HEALBOT_GREATER_BLESSING_OF_SALVATION = "상급 구원의 축복";
HEALBOT_WORDS_TO = "~"; HEALBOT_WORDS_TO = "~";
HEALBOT_WORDS_CAST = "시전" HEALBOT_WORDS_CAST = "시전"
HEALBOT_WORDS_FOR = "for"; HEALBOT_WORDS_FOR = "for";
end end
+28 -2
View File
@@ -1,6 +1,32 @@
-- HealBot_Model.lua -- HealBot_Model.lua
-- Centralized Data Store and Observer System for HealBotBlue -- Centralized Data Store and Observer System for HealBotBlue
-- 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)
local wasNil = false
if not UIDROPDOWNMENU_OPEN_MENU then
UIDROPDOWNMENU_OPEN_MENU = "DropDownList1"
wasNil = true
end
UIDropDownMenu_SetSelectedID(frame, id, useValue)
if wasNil then
UIDROPDOWNMENU_OPEN_MENU = nil
end
end
function HealBot_UIDropDownMenu_SetSelectedValue(frame, value, useValue)
local wasNil = false
if not UIDROPDOWNMENU_OPEN_MENU then
UIDROPDOWNMENU_OPEN_MENU = "DropDownList1"
wasNil = true
end
UIDropDownMenu_SetSelectedValue(frame, value, useValue)
if wasNil then
UIDROPDOWNMENU_OPEN_MENU = nil
end
end
HealBot_Model = { HealBot_Model = {
observers = {}, observers = {},
units = {}, units = {},
@@ -32,11 +58,11 @@ function HealBot_Model:RegisterObserver(event, callback)
table.insert(self.observers[event], callback) table.insert(self.observers[event], callback)
end end
function HealBot_Model:NotifyObservers(event, unitID, ...) function HealBot_Model:NotifyObservers(event, unitID, arg1, arg2)
if self.observers[event] then if self.observers[event] then
local len = table.getn(self.observers[event]) local len = table.getn(self.observers[event])
for i = 1, len do for i = 1, len do
self.observers[event][i](unitID, unpack(arg)) self.observers[event][i](unitID, arg1, arg2)
end end
end end
end end
+96 -1503
View File
File diff suppressed because it is too large Load Diff
+16 -2576
View File
File diff suppressed because it is too large Load Diff
+82
View File
@@ -0,0 +1,82 @@
function HealBot_Options_AutoSwap_OnClick(this)
if this:GetChecked() then
HealBot_Config.AutoSwap_Enabled = 1
else
HealBot_Config.AutoSwap_Enabled = 0
end
HealBot_Action_PartyChanged()
end
function HealBot_Options_Auto_Initialize()
local dropdownName = UIDROPDOWNMENU_OPEN_MENU
if not dropdownName then return end
local dropdownFrame = getglobal(dropdownName)
if not dropdownFrame then return end
local id = dropdownFrame:GetID()
if not id then return end
for i=1, getn(HealBot_Config.Skins), 1 do
local info = {}
info.text = HealBot_Config.Skins[i]
info.func = HealBot_Options_Auto_OnSelect
info.value = id
if not HealBot_Config.AutoSwap_Profiles then HealBot_Config.AutoSwap_Profiles = {} end
if HealBot_Config.AutoSwap_Profiles[id] == HealBot_Config.Skins[i] then
info.checked = 1
else
info.checked = nil
end
UIDropDownMenu_AddButton(info)
end
end
function HealBot_Options_Auto_OnSelect()
local skin = this:GetText()
local id = this.value
if not id or not skin then return end
if not HealBot_Config.AutoSwap_Profiles then HealBot_Config.AutoSwap_Profiles = {} end
HealBot_Config.AutoSwap_Profiles[id] = skin
local dropdowns = {
"HealBot_Options_Auto_Solo",
"HealBot_Options_Auto_Party",
"HealBot_Options_Auto_Raid15",
"HealBot_Options_Auto_Raid25",
"HealBot_Options_Auto_Raid40"
}
local dropdownName = dropdowns[id]
local dropdownFrame = getglobal(dropdownName)
HealBot_UIDropDownMenu_SetSelectedValue(dropdownFrame, skin)
UIDropDownMenu_SetText(skin, dropdownFrame)
HealBot_Action_PartyChanged()
end
function HealBot_Options_Auto_OnShow(this)
if HealBot_Config.AutoSwap_Enabled == 1 then
HealBot_Options_AutoSwap:SetChecked(1)
else
HealBot_Options_AutoSwap:SetChecked(nil)
end
local dropdowns = {
"HealBot_Options_Auto_Solo",
"HealBot_Options_Auto_Party",
"HealBot_Options_Auto_Raid15",
"HealBot_Options_Auto_Raid25",
"HealBot_Options_Auto_Raid40"
}
for id, name in ipairs(dropdowns) do
local dropdownFrame = getglobal(name)
if dropdownFrame then
UIDropDownMenu_SetWidth(150, dropdownFrame)
if not HealBot_Config.AutoSwap_Profiles then HealBot_Config.AutoSwap_Profiles = {} end
local skin = HealBot_Config.AutoSwap_Profiles[id]
if skin then
HealBot_UIDropDownMenu_SetSelectedValue(dropdownFrame, skin)
UIDropDownMenu_SetText(skin, dropdownFrame)
end
end
end
end
+152
View File
@@ -0,0 +1,152 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_Auto.lua" />
<Frame name="HealBot_Options_Panel8" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<CheckButton name="HealBot_Options_AutoSwap" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-30" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
getglobal(this:GetName().."Text"):SetText("Enable Auto-Swap");
</OnLoad>
<OnClick>
HealBot_Options_AutoSwap_OnClick(this);
</OnClick>
</Scripts>
</CheckButton>
<Frame name="HealBot_Options_Auto_Solo" inherits="UIDropDownMenuTemplate" id="1">
<Layers>
<Layer level="BACKGROUND">
<FontString name="$parentLabel" text="Solo Skin:" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="-10" y="15" /></Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="30" y="-80" /></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
UIDropDownMenu_Initialize(this, HealBot_Options_Auto_Initialize);
</OnLoad>
</Scripts>
</Frame>
<Frame name="HealBot_Options_Auto_Party" inherits="UIDropDownMenuTemplate" id="2">
<Layers>
<Layer level="BACKGROUND">
<FontString name="$parentLabel" text="Party Skin:" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="-10" y="15" /></Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="30" y="-130" /></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
UIDropDownMenu_Initialize(this, HealBot_Options_Auto_Initialize);
</OnLoad>
</Scripts>
</Frame>
<Frame name="HealBot_Options_Auto_Raid15" inherits="UIDropDownMenuTemplate" id="3">
<Layers>
<Layer level="BACKGROUND">
<FontString name="$parentLabel" text="Raid 15 Skin:" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="-10" y="15" /></Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="30" y="-180" /></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
UIDropDownMenu_Initialize(this, HealBot_Options_Auto_Initialize);
</OnLoad>
</Scripts>
</Frame>
<Frame name="HealBot_Options_Auto_Raid25" inherits="UIDropDownMenuTemplate" id="4">
<Layers>
<Layer level="BACKGROUND">
<FontString name="$parentLabel" text="Raid 25 Skin:" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="-10" y="15" /></Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="30" y="-230" /></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
UIDropDownMenu_Initialize(this, HealBot_Options_Auto_Initialize);
</OnLoad>
</Scripts>
</Frame>
<Frame name="HealBot_Options_Auto_Raid40" inherits="UIDropDownMenuTemplate" id="5">
<Layers>
<Layer level="BACKGROUND">
<FontString name="$parentLabel" text="Raid 40 Skin:" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="-10" y="15" /></Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT">
<Offset><AbsDimension x="30" y="-280" /></Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
UIDropDownMenu_Initialize(this, HealBot_Options_Auto_Initialize);
</OnLoad>
</Scripts>
</Frame>
</Frames>
<Scripts>
<OnShow>
HealBot_Options_Auto_OnShow(this);
</OnShow>
</Scripts>
</Frame>
</Ui>
+118
View File
@@ -0,0 +1,118 @@
-- HealBot Options panel file: HealBot_Options_Buffs.lua
-- Split from original HealBot_Options.lua
function HealBot_Options_BuffWatch_OnClick(self)
local frame = self or this
HealBot_Config.BuffWatch = frame:GetChecked() or 0;
if HealBot_Config.BuffWatch == 0 then
HealBot_Options_BuffWatchInCombat:Disable()
else
HealBot_Options_BuffWatchInCombat:Enable()
end
HealBot_RecalcParty();
end
function HealBot_Options_BuffWatchInCombat_OnClick(self)
local frame = self or this
HealBot_Config.BuffWatchInCombat = frame:GetChecked() or 0;
HealBot_RecalcParty();
end
function HealBot_Options_BuffSelf_OnLoad(self)
local frame = self or this
getglobal(this:GetName().."Text"):SetText("Self Only")
local id = this:GetID()
if HealBot_Config.BuffWatchSelf and HealBot_Config.BuffWatchSelf[id] then
local isSelf = (HealBot_Config.BuffWatchSelf[id] == 1)
this:SetChecked(isSelf and 1 or nil)
else
this:SetChecked(nil)
end
end
function HealBot_Options_BuffSelf_OnClick(self)
local frame = self or this
local id = this:GetID()
if not HealBot_Config.BuffWatchSelf then
HealBot_Config.BuffWatchSelf = {0,0,0,0,0,0,0,0}
end
if frame:GetChecked() then
HealBot_Config.BuffWatchSelf[id] = 1
else
HealBot_Config.BuffWatchSelf[id] = 0
end
HealBot_RecalcParty();
end
function HealBot_Options_Buff_OnLoad(self)
local frame = self or this
UIDropDownMenu_Initialize(frame, HealBot_Options_Buff_Initialize)
UIDropDownMenu_SetWidth(110, frame)
end
function HealBot_Options_Buff_Initialize()
local myClass = UnitClass("player")
local info
info = { text = "None", func = HealBot_Options_Buff_OnClick, value = 0 }
UIDropDownMenu_AddButton(info)
if HealBot_Buff_Spells[myClass] then
for i, spellName in ipairs(HealBot_Buff_Spells[myClass]) do
info = {
text = spellName,
func = HealBot_Options_Buff_OnClick,
value = i
}
UIDropDownMenu_AddButton(info)
end
end
end
function HealBot_Options_Buff_OnClick()
local frameName = UIDROPDOWNMENU_OPEN_MENU
local frame = getglobal(frameName)
local myClass = UnitClass("player")
local id = frame:GetID()
if not HealBot_Config.BuffDropDowns then HealBot_Config.BuffDropDowns = {} end
if not HealBot_Config.BuffDropDowns[myClass] then HealBot_Config.BuffDropDowns[myClass] = {} end
HealBot_Config.BuffDropDowns[myClass][id] = this.value
local text = "None"
if this.value > 0 then
text = HealBot_Buff_Spells[myClass][this.value]
end
HealBot_UIDropDownMenu_SetSelectedID(frame, this.value + 1)
UIDropDownMenu_SetText(text, frame)
HealBot_RecalcParty();
end
function HealBot_Options_SetBuffs()
local myClass = UnitClass("player")
if HealBot_Options_BuffWatch then
HealBot_Options_BuffWatch:SetChecked(HealBot_Config.BuffWatch)
HealBot_Options_BuffWatchInCombat:SetChecked(HealBot_Config.BuffWatchInCombat)
if HealBot_Config.BuffWatch == 0 then
HealBot_Options_BuffWatchInCombat:Disable()
else
HealBot_Options_BuffWatchInCombat:Enable()
end
end
if not HealBot_Config.BuffDropDowns then HealBot_Config.BuffDropDowns = {} end
if not HealBot_Config.BuffDropDowns[myClass] then HealBot_Config.BuffDropDowns[myClass] = {} end
for i = 1, 8 do
local dropDown = getglobal("HealBot_Options_Buff" .. i)
if dropDown then
local val = HealBot_Config.BuffDropDowns[myClass][i] or 0
UIDropDownMenu_Initialize(dropDown, HealBot_Options_Buff_Initialize)
HealBot_UIDropDownMenu_SetSelectedID(dropDown, val + 1)
end
local selfCheck = getglobal("HealBot_Options_BuffSelf" .. i)
if selfCheck then
if HealBot_Config.BuffWatchSelf and HealBot_Config.BuffWatchSelf[i] then
local isSelf = (HealBot_Config.BuffWatchSelf[i] == 1)
selfCheck:SetChecked(isSelf and 1 or nil)
else
selfCheck:SetChecked(nil)
end
end
end
end
+372
View File
@@ -0,0 +1,372 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
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>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Buff1" 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_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>
</Frame>
</Ui>
+289
View File
@@ -0,0 +1,289 @@
-- HealBot Options panel file: HealBot_Options_CDC.lua
-- Split from original HealBot_Options.lua
function HealBot_Options_ShowDebuffWarning_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_ShowDebuffWarning_OnClick(this)
HealBot_Config.ShowDebuffWarning = this:GetChecked() or 0;
end
function HealBot_Options_SoundDebuffWarning_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_SoundDebuffWarning_OnClick(this)
HealBot_Config.SoundDebuffWarning = this:GetChecked() or 0;
if HealBot_Config.SoundDebuffWarning==0 then
HealBot_WarningSound1:Disable();
HealBot_WarningSound2:Disable();
HealBot_WarningSound3:Disable();
else
HealBot_WarningSound1:Enable();
HealBot_WarningSound2:Enable();
HealBot_WarningSound3:Enable();
end
end
function HealBot_WarningSound_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_WarningSound_OnClick(this,id)
if HealBot_Config.SoundDebuffPlay>0 then
getglobal("HealBot_WarningSound"..HealBot_Config.SoundDebuffPlay):SetChecked(nil);
end
HealBot_Config.SoundDebuffPlay = id;
if HealBot_Config.SoundDebuffPlay>0 then
getglobal("HealBot_WarningSound"..HealBot_Config.SoundDebuffPlay):SetChecked(1);
if this then
HealBot_PlaySound(HealBot_Config.SoundDebuffPlay)
end
end
end
function HealBot_Options_CDCMonitor_DropDown()
for i=1, getn(HealBot_Options_EmergencyFilter_List), 1 do
local info = {};
info.text = HealBot_Options_EmergencyFilter_List[i];
info.func = HealBot_Options_CDCMonitor_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
function HealBot_Options_CDCMonitor_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_CDCMonitor,HealBot_Options_CDCMonitor_DropDown)
end
function HealBot_Options_CDCMonitor_Refresh(onselect)
if not HealBot_Config.CDCMonitor then return end
if not onselect then HealBot_Options_CDCMonitor_Initialize() end -- or wrong menu may be used !
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_CDCMonitor,HealBot_Config.CDCMonitor)
end
function HealBot_Options_CDCMonitor_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_CDCMonitor_DropDown)
UIDropDownMenu_SetWidth(100, this)
end
function HealBot_Options_CDCMonitor_OnSelect()
HealBot_Config.CDCMonitor = this:GetID()
HealBot_Options_CDCMonitor_Refresh(true)
HealBot_Options_CDCMonitor_Reset()
end
function HealBot_Options_CDCMonitor_Reset()
HealBot_CDCInc[HEALBOT_DRUID] = 0;
HealBot_CDCInc[HEALBOT_HUNTER] = 0;
HealBot_CDCInc[HEALBOT_MAGE] = 0;
HealBot_CDCInc[HEALBOT_PALADIN] = 0;
HealBot_CDCInc[HEALBOT_PRIEST] = 0;
HealBot_CDCInc[HEALBOT_ROGUE] = 0;
HealBot_CDCInc[HEALBOT_SHAMAN] = 0;
HealBot_CDCInc[HEALBOT_WARLOCK] = 0;
HealBot_CDCInc[HEALBOT_WARRIOR] = 0;
if HealBot_Config.CDCMonitor==2 then
HealBot_CDCInc[HEALBOT_DRUID] = 1;
HealBot_CDCInc[HEALBOT_HUNTER] = 1;
HealBot_CDCInc[HEALBOT_MAGE] = 1;
HealBot_CDCInc[HEALBOT_PALADIN] = 1;
HealBot_CDCInc[HEALBOT_PRIEST] = 1;
HealBot_CDCInc[HEALBOT_ROGUE] = 1;
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
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];
HealBot_CDCInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncMelee[HEALBOT_PALADIN];
HealBot_CDCInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncMelee[HEALBOT_PRIEST];
HealBot_CDCInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncMelee[HEALBOT_ROGUE];
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
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];
HealBot_CDCInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncRange[HEALBOT_PALADIN];
HealBot_CDCInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncRange[HEALBOT_PRIEST];
HealBot_CDCInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncRange[HEALBOT_ROGUE];
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
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];
HealBot_CDCInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncHealers[HEALBOT_PALADIN];
HealBot_CDCInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncHealers[HEALBOT_PRIEST];
HealBot_CDCInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncHealers[HEALBOT_ROGUE];
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
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];
HealBot_CDCInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncCustom[HEALBOT_PALADIN];
HealBot_CDCInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncCustom[HEALBOT_PRIEST];
HealBot_CDCInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncCustom[HEALBOT_ROGUE];
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncCustom[HEALBOT_SHAMAN];
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncCustom[HEALBOT_WARLOCK];
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncCustom[HEALBOT_WARRIOR];
end
HealBot_Action_PartyChanged()
end
function HealBot_Options_GetDebuffSpells_List(class)
local DebuffSpells = HealBot_Debuff_Spells[class];
return DebuffSpells;
end
function HealBot_Options_CDCButLeft_DropDown()
local classEN=HealBot_UnitClass("player")
if classEN=="PRIEST" or classEN=="DRUID" or classEN=="PALADIN" or classEN=="SHAMAN" then
local class=UnitClass("Player");
local DebuffSpells_List = HealBot_Options_GetDebuffSpells_List(class)
local info = {};
info.text = "None";
info.func = HealBot_Options_CDCButLeft_OnSelect;
UIDropDownMenu_AddButton(info);
for i=1, getn(DebuffSpells_List), 1 do
local spell=HealBot_GetSpellName(HealBot_GetSpellId(DebuffSpells_List[i]));
if spell then
local info = {};
info.text = spell;
info.func = HealBot_Options_CDCButLeft_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
end
end
function HealBot_Options_CDCButRight_DropDown()
local classEN=HealBot_UnitClass("player")
if classEN=="PRIEST" or classEN=="DRUID" or classEN=="PALADIN" or classEN=="SHAMAN" then
local class=UnitClass("Player");
local DebuffSpells_List = HealBot_Options_GetDebuffSpells_List(class)
local info = {};
info.text = "None";
info.func = HealBot_Options_CDCButRight_OnSelect;
UIDropDownMenu_AddButton(info);
for i=1, getn(DebuffSpells_List), 1 do
local spell=HealBot_GetSpellName(HealBot_GetSpellId(DebuffSpells_List[i]));
if spell then
local info = {};
info.text = spell;
info.func = HealBot_Options_CDCButRight_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
end
end
function HealBot_Options_CDCButLeft_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_CDCButLeft,HealBot_Options_CDCButLeft_DropDown)
end
function HealBot_Options_CDCButRight_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_CDCButRight,HealBot_Options_CDCButRight_DropDown)
end
function HealBot_Options_CDCButLeft_Refresh(onselect)
local set_id=1;
local class=UnitClass("Player");
if not onselect then HealBot_Options_CDCButLeft_Initialize() end
set_id = HealBot_Config.Debuff_Left[class];
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_CDCButLeft,set_id)
end
function HealBot_Options_CDCButRight_Refresh(onselect)
local set_id;
local class=UnitClass("Player");
if not onselect then HealBot_Options_CDCButRight_Initialize() end
set_id = HealBot_Config.Debuff_Right[class];
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_CDCButRight,set_id)
end
function HealBot_Options_CDCButLeft_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_CDCButLeft_DropDown)
UIDropDownMenu_SetWidth(140, this)
end
function HealBot_Options_CDCButRight_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_CDCButRight_DropDown)
UIDropDownMenu_SetWidth(140, this)
end
function HealBot_Options_CDCButLeft_OnSelect()
local class=UnitClass("Player");
HealBot_Config.Debuff_Left[class] = this:GetID();
HealBot_Options_CDCButLeft_Refresh(true)
HealBot_Config.CDCLeftText[class]=HealBot_Options_CDCButLeftText:GetText();
if this:GetID()>1 then
HealBot_Options_CDC_SetCombo(HealBot_Options_CDCButLeftText:GetText(), "Left", class)
end
HealBot_DebuffPriority = HealBot_Debuff_Types[HealBot_Options_CDCButLeftText:GetText()];
HealBot_Options_Debuff_Reset()
end
function HealBot_Options_CDCButRight_OnSelect()
local class=UnitClass("Player");
HealBot_Config.Debuff_Right[class] = this:GetID();
HealBot_Options_CDCButRight_Refresh(true)
HealBot_Config.CDCRightText[class]=HealBot_Options_CDCButRightText:GetText();
if this:GetID()>1 then
HealBot_Options_CDC_SetCombo(HealBot_Options_CDCButRightText:GetText(), "Right", class)
end
HealBot_Options_Debuff_Reset()
end
function HealBot_Options_CDC_SetCombo(spell, button, class)
local combo = HealBot_Config.KeyCombo[class]
combo["Alt"..button] = spell
HealBot_Options_KeyCombo_Change()
end
function HealBot_Options_Debuff_Reset()
local classEN=HealBot_UnitClass("player")
if classEN=="PRIEST" or classEN=="DRUID" or classEN=="PALADIN" or classEN=="SHAMAN" then
local spell = HealBot_Config.CDCLeftText[UnitClass("player")];
HealBot_DebuffWatch = {[HEALBOT_DISEASE_en]=false, [HEALBOT_MAGIC_en]=false, [HEALBOT_POISON_en]=false, [HEALBOT_CURSE_en]=false }
if spell ~= "None" then
table.foreach(HealBot_Debuff_Types[spell], function (index,debuff)
HealBot_DebuffWatch[debuff]=true;
end)
end
spell = HealBot_Config.CDCRightText[UnitClass("player")];
if spell ~= "None" then
table.foreach(HealBot_Debuff_Types[spell], function (index,debuff)
HealBot_DebuffWatch[debuff]=true;
end)
end
end
end
function HealBot_Colorpick_OnClick(CDCType)
HealBot_ColourObjWaiting=CDCType;
HealBot_UseColourPick(HealBot_Config.CDCBarColour[CDCType].R,HealBot_Config.CDCBarColour[CDCType].G,HealBot_Config.CDCBarColour[CDCType].B, nil)
end
function HealBot_SetCDCBarColours()
HealBot_DiseaseColorpick:SetStatusBarColor(HealBot_Config.CDCBarColour[HEALBOT_DISEASE_en].R,
HealBot_Config.CDCBarColour[HEALBOT_DISEASE_en].G,
HealBot_Config.CDCBarColour[HEALBOT_DISEASE_en].B,
HealBot_Config.Barcola[HealBot_Config.Current_Skin]);
HealBot_MagicColorpick:SetStatusBarColor(HealBot_Config.CDCBarColour[HEALBOT_MAGIC_en].R,
HealBot_Config.CDCBarColour[HEALBOT_MAGIC_en].G,
HealBot_Config.CDCBarColour[HEALBOT_MAGIC_en].B,
HealBot_Config.Barcola[HealBot_Config.Current_Skin]);
HealBot_PoisonColorpick:SetStatusBarColor(HealBot_Config.CDCBarColour[HEALBOT_POISON_en].R,
HealBot_Config.CDCBarColour[HEALBOT_POISON_en].G,
HealBot_Config.CDCBarColour[HEALBOT_POISON_en].B,
HealBot_Config.Barcola[HealBot_Config.Current_Skin]);
HealBot_CurseColorpick:SetStatusBarColor(HealBot_Config.CDCBarColour[HEALBOT_CURSE_en].R,
HealBot_Config.CDCBarColour[HEALBOT_CURSE_en].G,
HealBot_Config.CDCBarColour[HEALBOT_CURSE_en].B,
HealBot_Config.Barcola[HealBot_Config.Current_Skin]);
HealBot_DebTextColorpick:SetStatusBarColor(HealBot_Config.CDCBarColour[HEALBOT_DISEASE_en].R,
HealBot_Config.CDCBarColour[HEALBOT_DISEASE_en].G,
HealBot_Config.CDCBarColour[HEALBOT_DISEASE_en].B,
HealBot_Config.Barcola[HealBot_Config.Current_Skin])
end
+450
View File
@@ -0,0 +1,450 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_CDC.lua" />
<Frame name="HealBot_Options_Panel4" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<Frame name="HealBot_Options_CDCMonitor" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="170" y="-30" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_CDCCLASS">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-105" y="-7"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> HealBot_Options_CDCMonitor_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<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>
<Size>
<AbsDimension y="110"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-75"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="-75"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_CDCBut_Text" text="HEALBOT_OPTIONS_CDCBUTTONS" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="105" y="-12" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
</Frame>
<Frame name="HealBot_Options_CDCButLeft" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanse" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="100" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_CDCLEFT">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanse" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="40" y="-42"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad>
HealBot_Options_CDCButLeft_OnLoad(this)
</OnLoad>
</Scripts>
</Frame>
<Frame name="HealBot_Options_CDCButRight" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanse" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="100" y="-67" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_CDCRIGHT">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanse" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="40" y="-74"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad>
HealBot_Options_CDCButRight_OnLoad(this)
</OnLoad>
</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>
<Size>
<AbsDimension y="95"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-185"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="-190"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_CDCCol_Text" text="HEALBOT_OPTIONS_CDCBARS" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="98" y="-12" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
</Frame>
<Button name="HealBot_DiseaseColorpickb">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="BOTTOM" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="81" y="-55"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_Colorpick_OnClick(HEALBOT_DISEASE_en)</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_DiseaseColorpick" inherits="TextStatusBar">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="BOTTOM" relativeTo="HealBot_Options_CureDispelCleanseCol" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="81" y="-55"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_DISEASE">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_DiseaseColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_MagicColorpickb">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_DiseaseColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_Colorpick_OnClick(HEALBOT_MAGIC_en)</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_MagicColorpick" inherits="TextStatusBar">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_DiseaseColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_MAGIC">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_MagicColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_PoisonColorpickb">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="BOTTOM" relativeTo="HealBot_DiseaseColorpick" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="65" y="-45"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_Colorpick_OnClick(HEALBOT_POISON_en)</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_PoisonColorpick" inherits="HealBot_ColourButtonTemplate">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="BOTTOM" relativeTo="HealBot_DiseaseColorpick" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="65" y="-45"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_POISON">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_PoisonColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_CurseColorpickb">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_PoisonColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_Colorpick_OnClick(HEALBOT_CURSE_en)</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_CurseColorpick" inherits="HealBot_ColourButtonTemplate">
<Size>
<AbsDimension x="130" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_PoisonColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_CURSE">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_CurseColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<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>
<Size>
<AbsDimension y="120"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-285"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="-290"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_CDCWarn_Text" text="HEALBOT_OPTIONS_CDCWARNINGS" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="98" y="-12" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
</Frame>
<CheckButton name="HealBot_Options_ShowDebuffWarning" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_CureDispelCleanseWarn" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="25" y="90" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowDebuffWarning_OnLoad(this,HEALBOT_OPTIONS_SHOWDEBUFFWARNING)</OnLoad>
<OnClick>HealBot_Options_ShowDebuffWarning_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_SoundDebuffWarning" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowDebuffWarning" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="5" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_SoundDebuffWarning_OnLoad(this,HEALBOT_OPTIONS_SOUNDDEBUFFWARNING)</OnLoad>
<OnClick>HealBot_Options_SoundDebuffWarning_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_WarningSound1" inherits="SendMailRadioButtonTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_SoundDebuffWarning" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-30"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_SOUND1)</OnLoad>
<OnClick>HealBot_WarningSound_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_WarningSound2" inherits="SendMailRadioButtonTemplate" id="2">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_WarningSound1" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="55" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_SOUND2)</OnLoad>
<OnClick>HealBot_WarningSound_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_WarningSound3" inherits="SendMailRadioButtonTemplate" id="3">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_WarningSound2" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="65" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_WarningSound_OnLoad(this,HEALBOT_OPTIONS_SOUND3)</OnLoad>
<OnClick>HealBot_WarningSound_OnClick(this,this:GetID())</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
</Ui>
+79
View File
@@ -0,0 +1,79 @@
-- HealBot Options panel file: HealBot_Options_Chat.lua
-- Split from original HealBot_Options.lua
function HealBot_Options_ChatMsg_Channel_OnClick(id, buttonFrame)
if not HealBot_Config.ChatMessages then HealBot_Config.ChatMessages = {} end
if not HealBot_Config.ChatMessages[id] then
HealBot_Config.ChatMessages[id] = { Spell = "", Message = "Casting #Spell# on #Target#", Channel = "None" }
end
local current = HealBot_Config.ChatMessages[id].Channel
local nextChan = "None"
if current == "None" then
nextChan = "Say"
elseif current == "Say" then
nextChan = "Party"
elseif current == "Party" then
nextChan = "Raid"
elseif current == "Raid" then
nextChan = "Whisper"
elseif current == "Whisper" then
nextChan = "None"
end
HealBot_Config.ChatMessages[id].Channel = nextChan
buttonFrame:SetText(nextChan)
end
function HealBot_Options_SetChatMessages()
if not HealBot_Config.ChatMessages then
HealBot_Config.ChatMessages = {}
end
for i = 1, 5 do
if not HealBot_Config.ChatMessages[i] then
HealBot_Config.ChatMessages[i] = { Spell = "", Message = "Casting #Spell# on #Target#", Channel = "None" }
end
end
for i = 1, 5 do
local msgConfig = HealBot_Config.ChatMessages[i]
if msgConfig then
local spellEdit = getglobal("HealBot_Options_ChatMsg"..i.."_Spell")
local textEdit = getglobal("HealBot_Options_ChatMsg"..i.."_Text")
local chanButton = getglobal("HealBot_Options_ChatMsg"..i.."_Channel")
if spellEdit then
if msgConfig.Spell == "None" then
spellEdit:SetText("")
msgConfig.Spell = ""
else
spellEdit:SetText(msgConfig.Spell or "")
end
end
if textEdit then
textEdit:SetText(msgConfig.Message or "")
end
if chanButton then
chanButton:SetText(msgConfig.Channel or "None")
end
end
end
end
+289
View File
@@ -0,0 +1,289 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
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>
</Ui>
+292
View File
@@ -0,0 +1,292 @@
-- HealBot Options panel file: HealBot_Options_General.lua
-- Split from original HealBot_Options.lua
function HealBot_Options_ShowHeaders_OnLoad(this)
getglobal(this:GetName().."Text"):SetText(HEALBOT_OPTIONS_SHOWHEADERS);
end
function HealBot_Options_ShowHeaders_OnClick(this)
local isChecked = this:GetChecked()
HealBot_Config.ShowHeader[HealBot_Config.Current_Skin] = isChecked and 1 or 0;
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarTextureS_OnValueChanged(this)
HealBot_Config.btexture[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarHeightS_OnValueChanged(this)
HealBot_Config.bheight[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarWidthS_OnValueChanged(this)
HealBot_Config.bwidth[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarNumColsS_OnValueChanged(this)
HealBot_Config.numcols[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarBRSpaceS_OnValueChanged(this)
HealBot_Config.brspace[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarBCSpaceS_OnValueChanged(this)
HealBot_Config.bcspace[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_FontHeight_OnValueChanged(this)
HealBot_Config.btextheight[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_AbortBarSize_OnValueChanged(this)
HealBot_Config.abortsize[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_ActionAlpha_OnValueChanged(this)
HealBot_Config.backcola[HealBot_Config.Current_Skin] = HealBot_Options_Pct_OnValueChanged(this);
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarAlpha_OnValueChanged(this)
HealBot_Config.Barcola[HealBot_Config.Current_Skin] = HealBot_Options_Pct_OnValueChanged(this);
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarAlphaInHeal_OnValueChanged(this)
HealBot_Config.BarcolaInHeal[HealBot_Config.Current_Skin] = HealBot_Options_Pct_OnValueChanged(this);
HealBot_Action_ResetSkin()
end
function HealBot_Options_BarAlphaDis_OnValueChanged(this)
HealBot_Config.bardisa[HealBot_Config.Current_Skin] = HealBot_Options_Pct_OnValueChanged(this);
HealBot_Action_ResetSkin()
end
function HealBot_SkinColorpick_OnClick(SkinType)
HealBot_ColourObjWaiting=SkinType;
if SkinType=="En" then
HealBot_UseColourPick(HealBot_Config.btextenabledcolr[HealBot_Config.Current_Skin],
HealBot_Config.btextenabledcolg[HealBot_Config.Current_Skin],
HealBot_Config.btextenabledcolb[HealBot_Config.Current_Skin],
HealBot_Config.btextenabledcola[HealBot_Config.Current_Skin]);
elseif SkinType=="Dis" then
HealBot_UseColourPick(HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin],
HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin],
HealBot_Config.btextdisbledcolb[HealBot_Config.Current_Skin],
HealBot_Config.btextdisbledcola[HealBot_Config.Current_Skin])
elseif SkinType=="Debuff" then
HealBot_UseColourPick(HealBot_Config.btextcursecolr[HealBot_Config.Current_Skin],
HealBot_Config.btextcursecolg[HealBot_Config.Current_Skin],
HealBot_Config.btextcursecolb[HealBot_Config.Current_Skin],
HealBot_Config.btextcursecola[HealBot_Config.Current_Skin])
elseif SkinType=="Back" then
HealBot_UseColourPick(HealBot_Config.backcolr[HealBot_Config.Current_Skin],
HealBot_Config.backcolg[HealBot_Config.Current_Skin],
HealBot_Config.backcolb[HealBot_Config.Current_Skin],
HealBot_Config.backcola[HealBot_Config.Current_Skin])
elseif SkinType=="Bor" then
HealBot_UseColourPick(HealBot_Config.borcolr[HealBot_Config.Current_Skin],
HealBot_Config.borcolg[HealBot_Config.Current_Skin],
HealBot_Config.borcolb[HealBot_Config.Current_Skin],
HealBot_Config.borcola[HealBot_Config.Current_Skin])
elseif SkinType=="Abort" then
HealBot_UseColourPick(HealBot_Config.babortcolr[HealBot_Config.Current_Skin],
HealBot_Config.babortcolg[HealBot_Config.Current_Skin],
HealBot_Config.babortcolb[HealBot_Config.Current_Skin],
HealBot_Config.babortcola[HealBot_Config.Current_Skin])
end
end
function HealBot_SetSkinColours()
-- Cache the current skin configuration for performance and readability
local skin = HealBot_Config.Current_Skin
local btextheight = HealBot_Config.btextheight[skin] or 10
-- 1. Set Status Bar Colors (Green with variations based on configuration)
local alpha = HealBot_Config.Barcola[skin]
local inHealAlpha = alpha * (HealBot_Config.BarcolaInHeal[skin] or 1)
local disabledAlpha = HealBot_Config.bardisa[skin]
HealBot_EnTextColorpick:SetStatusBarColor(0, 1, 0, alpha)
HealBot_EnTextColorpickin:SetStatusBarColor(0, 1, 0, inHealAlpha)
HealBot_DisTextColorpick:SetStatusBarColor(0, 1, 0, disabledAlpha)
-- 2. Set Text Colors
HealBot_EnTextColorpickt:SetTextColor(
HealBot_Config.btextenabledcolr[skin], HealBot_Config.btextenabledcolg[skin],
HealBot_Config.btextenabledcolb[skin], HealBot_Config.btextenabledcola[skin]
)
HealBot_DisTextColorpickt:SetTextColor(
HealBot_Config.btextdisbledcolr[skin], HealBot_Config.btextdisbledcolg[skin],
HealBot_Config.btextdisbledcolb[skin], HealBot_Config.btextdisbledcola[skin]
)
HealBot_DebTextColorpickt:SetTextColor(
HealBot_Config.btextcursecolr[skin], HealBot_Config.btextcursecolg[skin],
HealBot_Config.btextcursecolb[skin], HealBot_Config.btextcursecola[skin]
)
-- 3. Set Preview Component Colors
local bgR, bgG, bgB, bgA = HealBot_Config.backcolr[skin], HealBot_Config.backcolg[skin], HealBot_Config.backcolb[skin], HealBot_Config.backcola[skin]
local borderR, borderG, borderB, borderA = HealBot_Config.borcolr[skin], HealBot_Config.borcolg[skin], HealBot_Config.borcolb[skin], HealBot_Config.borcola[skin]
HealBot_BackgroundColorpick:SetStatusBarColor(bgR, bgG, bgB, bgA)
HealBot_BorderColorpick:SetStatusBarColor(borderR, borderG, borderB, borderA)
HealBot_AbortColorpick:SetStatusBarColor(
HealBot_Config.babortcolr[skin], HealBot_Config.babortcolg[skin],
HealBot_Config.babortcolb[skin], HealBot_Config.babortcola[skin]
)
-- 4. Setup Main Panel Backdrop (Fixed scoping bugs)
local borderStyle = HealBot_Config.bborder[skin] or 2
local backdrop = {
bgFile = "Interface\\Tooltips\\UI-Tooltip-Background",
tile = true,
tileSize = 8,
}
if borderStyle == 0 then
-- No border
backdrop.edgeFile = "Interface\\Buttons\\WHITE8X8"
backdrop.edgeSize = 1
backdrop.insets = { left = 1, right = 1, top = 1, bottom = 1 }
HealBot_Action:SetBackdrop(backdrop)
HealBot_Action:SetBackdropBorderColor(0, 0, 0, 0)
HealBot_Action:SetBackdropColor(bgR, bgG, bgB, bgA)
elseif borderStyle == 1 then
-- Custom flat border
local bboffset = (HealBot_Config.bboffset and HealBot_Config.bboffset[skin]) or 1
local bpadding = (HealBot_Config.bpadding and HealBot_Config.bpadding[skin]) or 10
backdrop.edgeFile = "Interface\\Buttons\\WHITE8X8"
backdrop.edgeSize = bboffset
backdrop.insets = { left = bpadding, right = bpadding, top = bpadding, bottom = bpadding }
HealBot_Action:SetBackdrop(backdrop)
HealBot_Action:SetBackdropColor(bgR, bgG, bgB, bgA)
HealBot_Action:SetBackdropBorderColor(borderR, borderG, borderB, borderA)
else
-- Default Blizzard Tooltip Border
backdrop.edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border"
backdrop.edgeSize = 16
backdrop.insets = { left = 4, right = 4, top = 4, bottom = 4 }
HealBot_Action:SetBackdrop(backdrop)
HealBot_Action:SetBackdropColor(bgR, bgG, bgB, bgA)
HealBot_Action:SetBackdropBorderColor(borderR, borderG, borderB, borderA)
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)
-- 6. Force UI redraw (Kept the scale hack since it addresses a specific engine quirk)
local barScale = HealBot_EnTextColorpick:GetScale()
HealBot_EnTextColorpick:SetScale(barScale + 0.01); HealBot_EnTextColorpick:SetScale(barScale)
HealBot_DisTextColorpick:SetScale(barScale + 0.01); HealBot_DisTextColorpick:SetScale(barScale)
HealBot_DebTextColorpick:SetScale(barScale + 0.01); HealBot_DebTextColorpick:SetScale(barScale)
HealBot_Action_PartyChanged()
end
function HealBot_Options_AlertLevel_OnValueChanged(this)
HealBot_Config.AlertLevel = HealBot_Options_Pct_OnValueChanged(this);
HealBot_Action_Refresh();
end
function HealBot_Options_AutoShow_OnLoad(this)
getglobal(this:GetName().."Text"):SetText(HEALBOT_OPTIONS_AUTOSHOW);
end
function HealBot_Options_AutoShow_OnClick(this)
HealBot_Config.AutoClose = this:GetChecked() or 0;
HealBot_Action_Refresh();
end
function HealBot_Options_PanelSounds_OnLoad(this)
getglobal(this:GetName().."Text"):SetText(HEALBOT_OPTIONS_PANELSOUNDS);
end
function HealBot_Options_PanelSounds_OnClick(this)
HealBot_Config.PanelSounds = this:GetChecked() or 0;
end
function HealBot_Options_ActionMouseover_OnLoad(this, text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_ActionMouseover_OnClick(this)
HealBot_Config.ActionMouseover = this:GetChecked() or 0;
end
function HealBot_Options_ActionLocked_OnLoad(this)
getglobal(this:GetName().."Text"):SetText(HEALBOT_OPTIONS_ACTIONLOCKED);
end
function HealBot_Options_ActionLocked_OnClick(this)
HealBot_Config.ActionLocked = this:GetChecked() or 0;
end
function HealBot_Options_HideOptions_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_HideOptions_OnClick(this)
HealBot_Config.HideOptions = this:GetChecked() or 0;
HealBot_Action_PartyChanged();
end
function HealBot_Options_HideAbort_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_HideAbort_OnClick(this)
HealBot_Config.HideAbort = this:GetChecked() or 0;
HealBot_Action_PartyChanged();
end
function HealBot_Options_GrowUpwards_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_GrowUpwards_OnClick(this)
HealBot_Config.GrowUpwards = this:GetChecked() or 0;
HealBot_Action_PartyChanged();
end
function HealBot_Options_QualityRange_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_QualityRange_OnClick(this)
HealBot_Config.QualityRange = this:GetChecked() or 0;
HealBot_Action_PartyChanged();
end
function HealBot_Options_ProtectPvP_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_ProtectPvP_OnClick(this)
HealBot_Config.ProtectPvP = this:GetChecked() or 0;
HealBot_Action_Refresh();
end
function HealBot_Options_FramePaddingS_OnValueChanged(this)
if not HealBot_Config.bpadding then HealBot_Config.bpadding = {} end
HealBot_Config.bpadding[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_BorderThicknessS_OnValueChanged(this)
if not HealBot_Config.bboffset then HealBot_Config.bboffset = {} end
HealBot_Config.bboffset[HealBot_Config.Current_Skin] = this:GetValue();
getglobal(this:GetName().."Text"):SetText(this.text .. ": " .. this:GetValue());
HealBot_Action_ResetSkin()
end
function HealBot_Options_HideParty_OnLoad(this, text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_HideParty_OnClick(this)
HealBot_Config.HideParty = this:GetChecked() or 0;
HealBot_Options_TogglePartyFrames();
end
function HealBot_Options_TogglePartyFrames()
if HealBot_Config.HideParty == 1 then
if HidePartyFrame then HidePartyFrame(); end
else
if ShowPartyFrame then ShowPartyFrame(); end
end
end
+303
View File
@@ -0,0 +1,303 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_General.lua" />
<Frame name="HealBot_Options_Panel1" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<CheckButton name="HealBot_Options_ActionLocked" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="31" y="-40" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ActionLocked_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_ActionLocked_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_GrowUpwards" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ActionLocked" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="5" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_GrowUpwards_OnLoad(this,HEALBOT_OPTIONS_GROWUPWARDS)</OnLoad>
<OnClick>HealBot_Options_GrowUpwards_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ActionMouseover" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GrowUpwards" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="5" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ActionMouseover_OnLoad(this,"Hovercasting")</OnLoad>
<OnClick>HealBot_Options_ActionMouseover_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_AutoShow" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ActionLocked" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="200" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_AutoShow_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_AutoShow_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_PanelSounds" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GrowUpwards" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="200" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_PanelSounds_OnLoad(this)</OnLoad>
<OnClick>HealBot_Options_PanelSounds_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_HideSolo" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ActionMouseover" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="200" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
getglobal(this:GetName().."Text"):SetText("Hide when Solo");
</OnLoad>
<OnClick>
if (this:GetChecked()) then
HealBot_Config.HideSolo = 1;
else
HealBot_Config.HideSolo = 0;
end
HealBot_Action_ShowFrame();
</OnClick>
</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>
<Size>
<AbsDimension y="95"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-135"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="-135"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_GeneralPanel_Text" text="HEALBOT_OPTIONS_PANEL_TEXT" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="130" y="-12" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<CheckButton name="HealBot_Options_ShowManaBars" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="10" y="-30" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
getglobal(this:GetName().."Text"):SetText("Show Mana Bars");
</OnLoad>
<OnClick>
if (this:GetChecked()) then
HealBot_Config.ShowManaBars = 1;
else
HealBot_Config.ShowManaBars = 0;
end
HealBot_Action_Refresh();
</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ManaBarsHealersOnly" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowManaBars" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="180" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
getglobal(this:GetName().."Text"):SetText("For Healers Only");
</OnLoad>
<OnClick>
if (this:GetChecked()) then
HealBot_Config.ManaBarsHealersOnly = 1;
else
HealBot_Config.ManaBarsHealersOnly = 0;
end
HealBot_Action_Refresh();
</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ShowNonManaBars" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ShowManaBars" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
getglobal(this:GetName().."Text"):SetText("Track Non-Mana Resources");
</OnLoad>
<OnClick>
if (this:GetChecked()) then
HealBot_Config.ShowNonManaBars = 1;
else
HealBot_Config.ShowNonManaBars = 0;
end
HealBot_Action_Refresh();
</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
<CheckButton name="HealBot_Options_HideOptions" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GenFrame" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="10" y="-10" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_HideOptions_OnLoad(this,HEALBOT_OPTIONS_HIDEOPTIONS)</OnLoad>
<OnClick>HealBot_Options_HideOptions_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_HideAbort" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_HideOptions" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_HideAbort_OnLoad(this,HEALBOT_OPTIONS_HIDEABORT)</OnLoad>
<OnClick>HealBot_Options_HideAbort_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_QualityRange" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_HideAbort" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_QualityRange_OnLoad(this,HEALBOT_OPTIONS_QUALITYRANGE)</OnLoad>
<OnClick>HealBot_Options_QualityRange_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_ProtectPvP" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_QualityRange" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ProtectPvP_OnLoad(this,HEALBOT_OPTIONS_PROTECTPVP)</OnLoad>
<OnClick>HealBot_Options_ProtectPvP_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_HideParty" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_ProtectPvP" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-2" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_HideParty_OnLoad(this,HEALBOT_OPTIONS_HIDEPARTY)</OnLoad>
<OnClick>HealBot_Options_HideParty_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<Button name="HealBot_Options_Defaults" inherits="UIPanelButtonTemplate" text="HEALBOT_OPTIONS_DEFAULTS">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="BOTTOM" relativePoint="BOTTOM">
<Offset>
<AbsDimension x="-50" y="15"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_Options_Defaults_OnClick(this)</OnClick>
</Scripts>
</Button>
<Button name="HealBot_Options_CloseButton" inherits="UIPanelButtonTemplate" text="HEALBOT_OPTIONS_CLOSE">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="BOTTOM" relativePoint="BOTTOM">
<Offset>
<AbsDimension x="50" y="15"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>
HideUIPanel(this:GetParent():GetParent());
</OnClick>
</Scripts>
</Button>
</Frames>
</Frame>
</Ui>
+367
View File
@@ -0,0 +1,367 @@
-- HealBot Options panel file: HealBot_Options_Healing.lua
-- Split from original HealBot_Options.lua
function HealBot_Options_GroupHeals_OnLoad(this,text)
this.text = text
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_GroupHeals_OnClick(this)
HealBot_Config.GroupHeals = this:GetChecked() or 0;
HealBot_RecalcParty();
end
function HealBot_Options_TankHeals_OnLoad(this,text)
this.text = text
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_TankHeals_OnClick(this)
HealBot_Config.TankHeals = this:GetChecked() or 0;
HealBot_RecalcParty();
end
function HealBot_Options_TargetHeals_OnLoad(this,text)
this.text = text
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_TargetHeals_OnClick(this)
HealBot_Config.TargetHeals = this:GetChecked() or 0;
HealBot_RecalcParty();
end
function HealBot_Options_EmergencyHeals_OnLoad(this,text)
this.text = text
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_EmergencyHeals_OnClick(this)
HealBot_Config.EmergencyHeals = this:GetChecked() or 0;
HealBot_RecalcParty();
end
function HealBot_Options_OverHeal_OnValueChanged(this)
HealBot_Config.OverHeal = HealBot_Options_Pct_OnValueChanged(this);
end
function HealBot_Options_EFClass_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_EFClass_OnClick(this)
if HealBot_Config.EmergencyFClass==1 then
HealBot_Config.EmergIncMelee[HEALBOT_DRUID] = HealBot_Options_EFClassDruid:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_HUNTER] = HealBot_Options_EFClassHunter:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_MAGE] = HealBot_Options_EFClassMage:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_PALADIN] = HealBot_Options_EFClassPaladin:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_PRIEST] = HealBot_Options_EFClassPriest:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_ROGUE] = HealBot_Options_EFClassRogue:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_SHAMAN] = HealBot_Options_EFClassShaman:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_WARLOCK] = HealBot_Options_EFClassWarlock:GetChecked() or 0;
HealBot_Config.EmergIncMelee[HEALBOT_WARRIOR] = HealBot_Options_EFClassWarrior:GetChecked() or 0;
elseif HealBot_Config.EmergencyFClass==2 then
HealBot_Config.EmergIncRange[HEALBOT_DRUID] = HealBot_Options_EFClassDruid:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_HUNTER] = HealBot_Options_EFClassHunter:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_MAGE] = HealBot_Options_EFClassMage:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_PALADIN] = HealBot_Options_EFClassPaladin:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_PRIEST] = HealBot_Options_EFClassPriest:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_ROGUE] = HealBot_Options_EFClassRogue:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_SHAMAN] = HealBot_Options_EFClassShaman:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_WARLOCK] = HealBot_Options_EFClassWarlock:GetChecked() or 0;
HealBot_Config.EmergIncRange[HEALBOT_WARRIOR] = HealBot_Options_EFClassWarrior:GetChecked() or 0;
elseif HealBot_Config.EmergencyFClass==3 then
HealBot_Config.EmergIncHealers[HEALBOT_DRUID] = HealBot_Options_EFClassDruid:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_HUNTER] = HealBot_Options_EFClassHunter:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_MAGE] = HealBot_Options_EFClassMage:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_PALADIN] = HealBot_Options_EFClassPaladin:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_PRIEST] = HealBot_Options_EFClassPriest:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_ROGUE] = HealBot_Options_EFClassRogue:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_SHAMAN] = HealBot_Options_EFClassShaman:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_WARLOCK] = HealBot_Options_EFClassWarlock:GetChecked() or 0;
HealBot_Config.EmergIncHealers[HEALBOT_WARRIOR] = HealBot_Options_EFClassWarrior:GetChecked() or 0;
elseif HealBot_Config.EmergencyFClass==4 then
HealBot_Config.EmergIncCustom[HEALBOT_DRUID] = HealBot_Options_EFClassDruid:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_HUNTER] = HealBot_Options_EFClassHunter:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_MAGE] = HealBot_Options_EFClassMage:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_PALADIN] = HealBot_Options_EFClassPaladin:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_PRIEST] = HealBot_Options_EFClassPriest:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_ROGUE] = HealBot_Options_EFClassRogue:GetChecked() or 0;
HealBot_Config.EmergIncCustom[HEALBOT_SHAMAN] = HealBot_Options_EFClassShaman:GetChecked() or 0;
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
HealBot_Action_PartyChanged();
end
end
HealBot_Options_HealthText_List = {
"Name Only",
"Health Percentage",
"Real Health",
"Health Deficit",
}
function HealBot_Options_HealthText_DropDown()
for i=1, getn(HealBot_Options_HealthText_List), 1 do
local info = {};
info.text = HealBot_Options_HealthText_List[i];
info.func = HealBot_Options_HealthText_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
function HealBot_Options_HealthText_OnLoad(this)
UIDropDownMenu_Initialize(this, HealBot_Options_HealthText_DropDown);
UIDropDownMenu_SetWidth(110, this);
end
function HealBot_Options_HealthText_OnSelect()
HealBot_Config.ShowHealthText = this:GetID() - 1;
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_HealthText, this:GetID())
HealBot_Action_RefreshButtons();
end
local HealBot_Options_EmergencyFClass_List = {
HEALBOT_CLASSES_MELEE,
HEALBOT_CLASSES_RANGES,
HEALBOT_CLASSES_HEALERS,
HEALBOT_CLASSES_CUSTOM,
}
function HealBot_Options_EmergencyFClass_DropDown()
for i=1, getn(HealBot_Options_EmergencyFClass_List), 1 do
local info = {};
info.text = HealBot_Options_EmergencyFClass_List[i];
info.func = HealBot_Options_EmergencyFClass_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
function HealBot_Options_EmergencyFClass_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_EmergencyFClass,HealBot_Options_EmergencyFClass_DropDown)
end
function HealBot_Options_EmergencyFClass_Refresh(onselect)
if not HealBot_Config.EmergencyFClass then return end
if not onselect then HealBot_Options_EmergencyFClass_Initialize() end -- or wrong menu may be used !
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_EmergencyFClass,HealBot_Config.EmergencyFClass)
end
function HealBot_Options_EmergencyFClass_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_EmergencyFClass_DropDown)
UIDropDownMenu_SetWidth(100, this)
end
function HealBot_Options_EmergencyFClass_OnSelect()
HealBot_Config.EmergencyFClass = this:GetID()
HealBot_Options_EmergencyFClass_Refresh(true)
HealBot_Options_EFClass_Reset()
end
function HealBot_Options_EFClass_Reset()
if HealBot_Config.EmergencyFClass==1 then
HealBot_Options_EFClassDruid:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_DRUID]);
HealBot_Options_EFClassHunter:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_HUNTER]);
HealBot_Options_EFClassMage:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_MAGE]);
HealBot_Options_EFClassPaladin:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_PALADIN]);
HealBot_Options_EFClassPriest:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_PRIEST]);
HealBot_Options_EFClassRogue:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_ROGUE]);
HealBot_Options_EFClassShaman:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_SHAMAN]);
HealBot_Options_EFClassWarlock:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_WARLOCK]);
HealBot_Options_EFClassWarrior:SetChecked(HealBot_Config.EmergIncMelee[HEALBOT_WARRIOR]);
elseif HealBot_Config.EmergencyFClass==2 then
HealBot_Options_EFClassDruid:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_DRUID]);
HealBot_Options_EFClassHunter:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_HUNTER]);
HealBot_Options_EFClassMage:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_MAGE]);
HealBot_Options_EFClassPaladin:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_PALADIN]);
HealBot_Options_EFClassPriest:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_PRIEST]);
HealBot_Options_EFClassRogue:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_ROGUE]);
HealBot_Options_EFClassShaman:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_SHAMAN]);
HealBot_Options_EFClassWarlock:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_WARLOCK]);
HealBot_Options_EFClassWarrior:SetChecked(HealBot_Config.EmergIncRange[HEALBOT_WARRIOR]);
elseif HealBot_Config.EmergencyFClass==3 then
HealBot_Options_EFClassDruid:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_DRUID]);
HealBot_Options_EFClassHunter:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_HUNTER]);
HealBot_Options_EFClassMage:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_MAGE]);
HealBot_Options_EFClassPaladin:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_PALADIN]);
HealBot_Options_EFClassPriest:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_PRIEST]);
HealBot_Options_EFClassRogue:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_ROGUE]);
HealBot_Options_EFClassShaman:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_SHAMAN]);
HealBot_Options_EFClassWarlock:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_WARLOCK]);
HealBot_Options_EFClassWarrior:SetChecked(HealBot_Config.EmergIncHealers[HEALBOT_WARRIOR]);
elseif HealBot_Config.EmergencyFClass==4 then
HealBot_Options_EFClassDruid:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_DRUID]);
HealBot_Options_EFClassHunter:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_HUNTER]);
HealBot_Options_EFClassMage:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_MAGE]);
HealBot_Options_EFClassPaladin:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_PALADIN]);
HealBot_Options_EFClassPriest:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_PRIEST]);
HealBot_Options_EFClassRogue:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_ROGUE]);
HealBot_Options_EFClassShaman:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_SHAMAN]);
HealBot_Options_EFClassWarlock:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_WARLOCK]);
HealBot_Options_EFClassWarrior:SetChecked(HealBot_Config.EmergIncCustom[HEALBOT_WARRIOR]);
end
end
--------------------------------------------------------------------------------
local HealBot_Options_ExtraSort_List = {
HEALBOT_SORTBY_NAME,
HEALBOT_SORTBY_CLASS,
HEALBOT_SORTBY_GROUP,
HEALBOT_SORTBY_MAXHEALTH,
}
function HealBot_Options_ExtraSort_DropDown()
for i=1, getn(HealBot_Options_ExtraSort_List), 1 do
local info = {};
info.text = HealBot_Options_ExtraSort_List[i];
info.func = HealBot_Options_ExtraSort_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
function HealBot_Options_ExtraSort_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_ExtraSort,HealBot_Options_ExtraSort_DropDown)
end
function HealBot_Options_ExtraSort_Refresh(onselect)
if not HealBot_Config.ExtraOrder then return end
if not onselect then HealBot_Options_ExtraSort_Initialize() end -- or wrong menu may be used !
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_ExtraSort,HealBot_Config.ExtraOrder)
end
function HealBot_Options_ExtraSort_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_ExtraSort_DropDown)
UIDropDownMenu_SetWidth(100, this)
end
function HealBot_Options_ExtraSort_OnSelect()
HealBot_Config.ExtraOrder = this:GetID()
HealBot_Options_ExtraSort_Refresh(true)
HealBot_Action_PartyChanged()
end
--------------------------------------------------------------------------------
function HealBot_Options_EmergencyFilter_DropDown()
for i=1, getn(HealBot_Options_EmergencyFilter_List), 1 do
local info = {};
info.text = HealBot_Options_EmergencyFilter_List[i];
info.func = HealBot_Options_EmergencyFilter_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
function HealBot_Options_EmergencyFilter_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_EmergencyFilter,HealBot_Options_EmergencyFilter_DropDown)
end
function HealBot_Options_EmergencyFilter_Refresh(onselect)
if not HealBot_Config.EmergIncMonitor then return end
if not onselect then HealBot_Options_EmergencyFilter_Initialize() end -- or wrong menu may be used !
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_EmergencyFilter,HealBot_Config.EmergIncMonitor)
end
function HealBot_Options_EmergencyFilter_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_EmergencyFilter_DropDown)
UIDropDownMenu_SetWidth(100, this)
end
function HealBot_Options_EmergencyFilter_OnSelect()
HealBot_Config.EmergIncMonitor = this:GetID()
HealBot_Options_EmergencyFilter_Refresh(true)
HealBot_Options_EmergencyFilter_Reset()
end
function HealBot_Options_EmergencyFilter_Reset()
HealBot_EmergInc[HEALBOT_DRUID] = 0;
HealBot_EmergInc[HEALBOT_HUNTER] = 0;
HealBot_EmergInc[HEALBOT_MAGE] = 0;
HealBot_EmergInc[HEALBOT_PALADIN] = 0;
HealBot_EmergInc[HEALBOT_PRIEST] = 0;
HealBot_EmergInc[HEALBOT_ROGUE] = 0;
HealBot_EmergInc[HEALBOT_SHAMAN] = 0;
HealBot_EmergInc[HEALBOT_WARLOCK] = 0;
HealBot_EmergInc[HEALBOT_WARRIOR] = 0;
if HealBot_Config.EmergIncMonitor==2 then
HealBot_EmergInc[HEALBOT_DRUID] = 1;
HealBot_EmergInc[HEALBOT_HUNTER] = 1;
HealBot_EmergInc[HEALBOT_MAGE] = 1;
HealBot_EmergInc[HEALBOT_PALADIN] = 1;
HealBot_EmergInc[HEALBOT_PRIEST] = 1;
HealBot_EmergInc[HEALBOT_ROGUE] = 1;
HealBot_EmergInc[HEALBOT_SHAMAN] = 1;
HealBot_EmergInc[HEALBOT_WARLOCK] = 1;
HealBot_EmergInc[HEALBOT_WARRIOR] = 1;
elseif HealBot_Config.EmergIncMonitor==3 then
HealBot_EmergInc[HEALBOT_DRUID] = 1;
elseif HealBot_Config.EmergIncMonitor==4 then
HealBot_EmergInc[HEALBOT_HUNTER] = 1;
elseif HealBot_Config.EmergIncMonitor==5 then
HealBot_EmergInc[HEALBOT_MAGE] = 1;
elseif HealBot_Config.EmergIncMonitor==6 then
HealBot_EmergInc[HEALBOT_PALADIN] = 1;
elseif HealBot_Config.EmergIncMonitor==7 then
HealBot_EmergInc[HEALBOT_PRIEST] = 1;
elseif HealBot_Config.EmergIncMonitor==8 then
HealBot_EmergInc[HEALBOT_ROGUE] = 1;
elseif HealBot_Config.EmergIncMonitor==9 then
HealBot_EmergInc[HEALBOT_SHAMAN] = 1;
elseif HealBot_Config.EmergIncMonitor==10 then
HealBot_EmergInc[HEALBOT_WARLOCK] = 1;
elseif HealBot_Config.EmergIncMonitor==11 then
HealBot_EmergInc[HEALBOT_WARRIOR] = 1;
elseif HealBot_Config.EmergIncMonitor==12 then
-- Pets: no player classes enabled (handled separately in layout)
elseif HealBot_Config.EmergIncMonitor==13 then
HealBot_EmergInc[HEALBOT_DRUID] = HealBot_Config.EmergIncMelee[HEALBOT_DRUID];
HealBot_EmergInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncMelee[HEALBOT_HUNTER];
HealBot_EmergInc[HEALBOT_MAGE] = HealBot_Config.EmergIncMelee[HEALBOT_MAGE];
HealBot_EmergInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncMelee[HEALBOT_PALADIN];
HealBot_EmergInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncMelee[HEALBOT_PRIEST];
HealBot_EmergInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncMelee[HEALBOT_ROGUE];
HealBot_EmergInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncMelee[HEALBOT_SHAMAN];
HealBot_EmergInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncMelee[HEALBOT_WARLOCK];
HealBot_EmergInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncMelee[HEALBOT_WARRIOR];
elseif HealBot_Config.EmergIncMonitor==14 then
HealBot_EmergInc[HEALBOT_DRUID] = HealBot_Config.EmergIncRange[HEALBOT_DRUID];
HealBot_EmergInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncRange[HEALBOT_HUNTER];
HealBot_EmergInc[HEALBOT_MAGE] = HealBot_Config.EmergIncRange[HEALBOT_MAGE];
HealBot_EmergInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncRange[HEALBOT_PALADIN];
HealBot_EmergInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncRange[HEALBOT_PRIEST];
HealBot_EmergInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncRange[HEALBOT_ROGUE];
HealBot_EmergInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncRange[HEALBOT_SHAMAN];
HealBot_EmergInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncRange[HEALBOT_WARLOCK];
HealBot_EmergInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncRange[HEALBOT_WARRIOR];
elseif HealBot_Config.EmergIncMonitor==15 then
HealBot_EmergInc[HEALBOT_DRUID] = HealBot_Config.EmergIncHealers[HEALBOT_DRUID];
HealBot_EmergInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncHealers[HEALBOT_HUNTER];
HealBot_EmergInc[HEALBOT_MAGE] = HealBot_Config.EmergIncHealers[HEALBOT_MAGE];
HealBot_EmergInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncHealers[HEALBOT_PALADIN];
HealBot_EmergInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncHealers[HEALBOT_PRIEST];
HealBot_EmergInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncHealers[HEALBOT_ROGUE];
HealBot_EmergInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncHealers[HEALBOT_SHAMAN];
HealBot_EmergInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncHealers[HEALBOT_WARLOCK];
HealBot_EmergInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncHealers[HEALBOT_WARRIOR];
elseif HealBot_Config.EmergIncMonitor==16 then
HealBot_EmergInc[HEALBOT_DRUID] = HealBot_Config.EmergIncCustom[HEALBOT_DRUID];
HealBot_EmergInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncCustom[HEALBOT_HUNTER];
HealBot_EmergInc[HEALBOT_MAGE] = HealBot_Config.EmergIncCustom[HEALBOT_MAGE];
HealBot_EmergInc[HEALBOT_PALADIN] = HealBot_Config.EmergIncCustom[HEALBOT_PALADIN];
HealBot_EmergInc[HEALBOT_PRIEST] = HealBot_Config.EmergIncCustom[HEALBOT_PRIEST];
HealBot_EmergInc[HEALBOT_ROGUE] = HealBot_Config.EmergIncCustom[HEALBOT_ROGUE];
HealBot_EmergInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncCustom[HEALBOT_SHAMAN];
HealBot_EmergInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncCustom[HEALBOT_WARLOCK];
HealBot_EmergInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncCustom[HEALBOT_WARRIOR];
end
HealBot_Action_PartyChanged()
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
+387
View File
@@ -0,0 +1,387 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_Healing.lua" />
<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>
<Size>
<AbsDimension y="88"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-30"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_HealButtons_Text" text="HEALBOT_OPTIONS_HEAL_BUTTONS" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="100" y="-8" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<CheckButton name="HealBot_Options_GroupHeals" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="25" y="-21" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_GroupHeals_OnLoad(this,HEALBOT_OPTIONS_GROUPHEALS_LABEL)</OnLoad>
<OnClick>HealBot_Options_GroupHeals_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_TankHeals" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GroupHeals" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="5" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_TankHeals_OnLoad(this,HEALBOT_OPTIONS_TANKHEALS)</OnLoad>
<OnClick>HealBot_Options_TankHeals_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_TargetHeals" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GroupHeals" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="122" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_TargetHeals_OnLoad(this,HEALBOT_OPTIONS_TARGETHEALS)</OnLoad>
<OnClick>HealBot_Options_TargetHeals_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EmergencyHeals" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_GroupHeals" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="122" y="5" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EmergencyHeals_OnLoad(this,HEALBOT_OPTIONS_EMERGENCYHEALS)</OnLoad>
<OnClick>HealBot_Options_EmergencyHeals_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
<Slider name="HealBot_Options_AlertLevel" inherits="HealBot_Options_SliderTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="45" y="-132" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Pct_OnLoad(this,HEALBOT_OPTIONS_ALERTLEVEL)</OnLoad>
<OnValueChanged>HealBot_Options_AlertLevel_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_OverHeal" inherits="HealBot_Options_SliderTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_AlertLevel" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-27" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Pct_OnLoad(this,HEALBOT_OPTIONS_OVERHEAL)</OnLoad>
<OnValueChanged>HealBot_Options_OverHeal_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Frame name="HealBot_Options_EmergencyFilter" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="155" y="-205" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_EMERGFILTER">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-110" y="-7"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad>
HealBot_Options_EmergencyFilter_OnLoad(this)
</OnLoad>
</Scripts>
</Frame>
<Frame name="HealBot_Options_ExtraSort" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="155" y="-238" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_EXTRASORT">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-110" y="-7"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad>
HealBot_Options_ExtraSort_OnLoad(this)
</OnLoad>
</Scripts>
</Frame>
<Frame name="HealBot_Options_HealthText" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="155" y="-271" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="Health Text">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-110" y="-7"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad>
HealBot_Options_HealthText_OnLoad(this)
</OnLoad>
</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>
<Size>
<AbsDimension y="125"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-308"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Frames>
<Frame name="HealBot_Options_EmergencyFClass" inherits="UIDropDownMenuTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="128" y="-10" />
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_OPTIONS_EMERGFCLASS">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-105" y="-7"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> HealBot_Options_EmergencyFClass_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<CheckButton name="HealBot_Options_EFClassDruid" inherits="SendMailRadioButtonTemplate" id="1">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EmergencyFClass" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="-90" y="-8"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_DRUID)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassHunter" inherits="SendMailRadioButtonTemplate" id="2">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassDruid" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="62" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_HUNTER)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassMage" inherits="SendMailRadioButtonTemplate" id="3">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassHunter" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="62" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_MAGE)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassPaladin" inherits="SendMailRadioButtonTemplate" id="4">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassDruid" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-8"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_PALADIN)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassPriest" inherits="SendMailRadioButtonTemplate" id="5">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassPaladin" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="62" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_PRIEST)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassRogue" inherits="SendMailRadioButtonTemplate" id="6">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassPriest" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="62" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_ROGUE)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassShaman" inherits="SendMailRadioButtonTemplate" id="7">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassPaladin" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-8"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_SHAMAN)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassWarlock" inherits="SendMailRadioButtonTemplate" id="8">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassShaman" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="62" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_WARLOCK)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_EFClassWarrior" inherits="SendMailRadioButtonTemplate" id="9">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_EFClassWarlock" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="62" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_EFClass_OnLoad(this,HEALBOT_WARRIOR)</OnLoad>
<OnClick>HealBot_Options_EFClass_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
</Frames>
</Frame>
</Frames>
</Frame>
</Ui>
+150
View File
@@ -0,0 +1,150 @@
-- HealBot Options panel file: HealBot_Options_Skins.lua
-- Split from original HealBot_Options.lua
function HealBot_Options_BarMaxRowsS_OnValueChanged(this)
if not HealBot_Config.bmaxrows then HealBot_Config.bmaxrows = {} end
HealBot_Config.bmaxrows[HealBot_Config.Current_Skin] = this:GetValue()
HealBot_Action_PartyChanged()
end
function HealBot_Options_GridOrientation_OnClick(this)
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_Action_PartyChanged()
end
function HealBot_Options_NewSkin_OnTextChanged(this)
local text= this:GetText()
if string.len(text)>0 then
HealBot_Options_NewSkinb:Enable();
else
HealBot_Options_NewSkinb:Disable();
end
end
function HealBot_Options_NewSkinb_OnClick(this)
HealBot_Config.numcols[HealBot_Options_NewSkin:GetText()] = HealBot_Config.numcols[HealBot_Config.Current_Skin]
if not HealBot_Config.bmaxrows then HealBot_Config.bmaxrows = {} end
if not HealBot_Config.GridOrientation then HealBot_Config.GridOrientation = {} end
HealBot_Config.bmaxrows[HealBot_Options_NewSkin:GetText()] = HealBot_Config.bmaxrows[HealBot_Config.Current_Skin] or 0
HealBot_Config.GridOrientation[HealBot_Options_NewSkin:GetText()] = HealBot_Config.GridOrientation[HealBot_Config.Current_Skin] or 1
HealBot_Config.btexture[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btexture[HealBot_Config.Current_Skin]
HealBot_Config.bcspace[HealBot_Options_NewSkin:GetText()] = HealBot_Config.bcspace[HealBot_Config.Current_Skin]
HealBot_Config.brspace[HealBot_Options_NewSkin:GetText()] = HealBot_Config.brspace[HealBot_Config.Current_Skin]
HealBot_Config.bwidth[HealBot_Options_NewSkin:GetText()] = HealBot_Config.bwidth[HealBot_Config.Current_Skin]
HealBot_Config.bheight[HealBot_Options_NewSkin:GetText()] = HealBot_Config.bheight[HealBot_Config.Current_Skin]
HealBot_Config.btextenabledcolr[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextenabledcolr[HealBot_Config.Current_Skin]
HealBot_Config.btextenabledcolg[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextenabledcolg[HealBot_Config.Current_Skin]
HealBot_Config.btextenabledcolb[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextenabledcolb[HealBot_Config.Current_Skin]
HealBot_Config.btextenabledcola[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextenabledcola[HealBot_Config.Current_Skin]
HealBot_Config.btextdisbledcolr[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextdisbledcolr[HealBot_Config.Current_Skin]
HealBot_Config.btextdisbledcolg[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextdisbledcolg[HealBot_Config.Current_Skin]
HealBot_Config.btextdisbledcolb[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextdisbledcolb[HealBot_Config.Current_Skin]
HealBot_Config.btextdisbledcola[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextdisbledcola[HealBot_Config.Current_Skin]
HealBot_Config.btextcursecolr[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextcursecolr[HealBot_Config.Current_Skin]
HealBot_Config.btextcursecolg[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextcursecolg[HealBot_Config.Current_Skin]
HealBot_Config.btextcursecolb[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextcursecolb[HealBot_Config.Current_Skin]
HealBot_Config.btextcursecola[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextcursecola[HealBot_Config.Current_Skin]
HealBot_Config.backcola[HealBot_Options_NewSkin:GetText()] = HealBot_Config.backcola[HealBot_Config.Current_Skin]
HealBot_Config.Barcola[HealBot_Options_NewSkin:GetText()] = HealBot_Config.Barcola[HealBot_Config.Current_Skin]
HealBot_Config.BarcolaInHeal[HealBot_Options_NewSkin:GetText()] = HealBot_Config.BarcolaInHeal[HealBot_Config.Current_Skin]
HealBot_Config.backcolr[HealBot_Options_NewSkin:GetText()] = HealBot_Config.backcolr[HealBot_Config.Current_Skin]
HealBot_Config.backcolg[HealBot_Options_NewSkin:GetText()] = HealBot_Config.backcolg[HealBot_Config.Current_Skin]
HealBot_Config.backcolb[HealBot_Options_NewSkin:GetText()] = HealBot_Config.backcolb[HealBot_Config.Current_Skin]
HealBot_Config.borcolr[HealBot_Options_NewSkin:GetText()] = HealBot_Config.borcolr[HealBot_Config.Current_Skin]
HealBot_Config.borcolg[HealBot_Options_NewSkin:GetText()] = HealBot_Config.borcolg[HealBot_Config.Current_Skin]
HealBot_Config.borcolb[HealBot_Options_NewSkin:GetText()] = HealBot_Config.borcolb[HealBot_Config.Current_Skin]
HealBot_Config.borcola[HealBot_Options_NewSkin:GetText()] = HealBot_Config.borcola[HealBot_Config.Current_Skin]
HealBot_Config.btextheight[HealBot_Options_NewSkin:GetText()] = HealBot_Config.btextheight[HealBot_Config.Current_Skin]
HealBot_Config.bardisa[HealBot_Options_NewSkin:GetText()] = HealBot_Config.bardisa[HealBot_Config.Current_Skin]
HealBot_Config.abortsize[HealBot_Options_NewSkin:GetText()] = HealBot_Config.abortsize[HealBot_Config.Current_Skin]
HealBot_Config.babortcolr[HealBot_Options_NewSkin:GetText()] = HealBot_Config.babortcolr[HealBot_Config.Current_Skin]
HealBot_Config.babortcolg[HealBot_Options_NewSkin:GetText()] = HealBot_Config.babortcolg[HealBot_Config.Current_Skin]
HealBot_Config.babortcolb[HealBot_Options_NewSkin:GetText()] = HealBot_Config.babortcolb[HealBot_Config.Current_Skin]
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]
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();
HealBot_Options_SetSkins()
HealBot_Options_NewSkin:SetText("")
end
function HealBot_Options_DeleteSkin_OnClick(this)
if HealBot_Config.Current_Skin~=HEALBOT_SKINS_STD then
HealBot_Config.numcols[HealBot_Options_SkinsText:GetText()] = nil
if HealBot_Config.bmaxrows then HealBot_Config.bmaxrows[HealBot_Options_SkinsText:GetText()] = nil end
if HealBot_Config.GridOrientation then HealBot_Config.GridOrientation[HealBot_Options_SkinsText:GetText()] = nil end
HealBot_Config.btexture[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.bcspace[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.brspace[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.bwidth[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.bheight[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextenabledcolr[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextenabledcolg[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextenabledcolb[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextenabledcola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextdisbledcolr[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextdisbledcolg[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextdisbledcolb[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextdisbledcola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextcursecolr[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextcursecolg[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextcursecolb[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextcursecola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.backcola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.Barcola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.BarcolaInHeal[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.backcolr[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.backcolg[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.backcolb[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.borcolr[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.borcolg[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.borcolb[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.borcola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.btextheight[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.bardisa[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.abortsize[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.babortcolr[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.babortcolg[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.babortcolb[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.babortcola[HealBot_Options_SkinsText:GetText()] = nil
HealBot_Config.ShowHeader[HealBot_Options_SkinsText:GetText()] = nil
table.remove(HealBot_Skins,HealBot_Config.Skin_ID)
HealBot_Config.Skin_ID = 1;
HealBot_Config.Skins = HealBot_Skins;
HealBot_Config.Current_Skin = HEALBOT_SKINS_STD;
HealBot_Options_SetSkins()
end
end
function HealBot_Options_Skins_DropDown()
for i=1, getn(HealBot_Skins), 1 do
local info = {};
info.text = HealBot_Skins[i];
info.func = HealBot_Options_Skins_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
function HealBot_Options_Skins_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_Skins,HealBot_Options_Skins_DropDown)
end
function HealBot_Options_Skins_Refresh(onselect)
if not HealBot_Config.Skin_ID then return end
if not onselect then HealBot_Options_Skins_Initialize() end -- or wrong menu may be used !
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_Skins,HealBot_Config.Skin_ID)
end
function HealBot_Options_Skins_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_Skins_DropDown)
UIDropDownMenu_SetWidth(100, this)
end
function HealBot_Options_Skins_OnSelect()
HealBot_Config.Skin_ID = this:GetID()
HealBot_Options_Skins_Refresh(true)
if this:GetID()>=1 then
HealBot_Config.Current_Skin = this:GetText()
HealBot_Options_SetSkins()
end
end
+712
View File
@@ -0,0 +1,712 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/ ..\FrameXML\UI.xsd">
<Script file="HealBot_Options_Skins.lua" />
<Frame name="HealBot_Options_Panel5" parent="HealBot_Options" hidden="true" setAllPoints="true">
<Frames>
<Frame name="HealBot_Options_Skins" inherits="UIDropDownMenuTemplate" id="1">
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_ScaleFrameText" text="HEALBOT_OPTIONS_SKINTEXT" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-45" y="-5" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="70" y="-28" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> HealBot_Options_Skins_OnLoad(this) </OnLoad>
</Scripts>
</Frame>
<Button name="HealBot_Options_DeleteSkin" inherits="UIPanelButtonTemplate" text="HEALBOT_OPTIONS_DELSKIN">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Skins" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="7" y="-1"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_Options_DeleteSkin_OnClick(this)</OnClick>
</Scripts>
</Button>
<EditBox name="HealBot_Options_NewSkin" inherits="HealBot_Options_EditBoxTemplate">
<Size>
<AbsDimension x="100" y="20"/>
</Size>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_ScaleFrameText2" text="HEALBOT_OPTIONS_NEWSKINTEXT" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="-70" y="-2" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_Skins" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="25" y="-2"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnTextChanged>
HealBot_Options_NewSkin_OnTextChanged(this)
</OnTextChanged>
</Scripts>
</EditBox>
<Button name="HealBot_Options_NewSkinb" inherits="UIPanelButtonTemplate" text="HEALBOT_OPTIONS_SAVESKIN">
<Size>
<AbsDimension x="80" y="22"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_NewSkin" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="32" y="2"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_Options_NewSkinb_OnClick(this)</OnClick>
</Scripts>
</Button>
<Frame name="HealBot_Options_Scale" inherits="OptionFrameBoxTemplate">
<Scripts>
<OnLoad>
this:SetBackdropBorderColor(0.4, 0.4, 0.4);
this:SetBackdropColor(0, 0, 0, 0);
</OnLoad>
</Scripts>
<Size>
<AbsDimension y="325"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="20" y="-88"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-20" y="-180"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="BACKGROUND">
<FontString name="HealBot_Options_ScaleFrameText3" text="HEALBOT_OPTIONS_SKINBARS" inherits="GameFontNormalSmall">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="50" y="-12" />
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Frames>
<CheckButton name="HealBot_Options_ShowHeaders" inherits="SendMailRadioButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="155" y="-8" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_ShowHeaders_OnLoad(this,HEALBOT_OPTIONS_SHOWHEADERS)</OnLoad>
<OnClick>HealBot_Options_ShowHeaders_OnClick(this)</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_BarColorMode" inherits="SendMailRadioButtonTemplate">
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="290" y="-8" /></Offset></Anchor></Anchors>
<Scripts>
<OnLoad>getglobal(this:GetName().."Text"):SetText("Class Colors")</OnLoad>
<OnClick>HealBot_Config.bcolormode[HealBot_Config.Current_Skin] = (this:GetChecked() and 2 or 1); HealBot_Action_ResetSkin()</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_FontOutline" inherits="SendMailRadioButtonTemplate">
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="290" y="-33" /></Offset></Anchor></Anchors>
<Scripts>
<OnLoad>getglobal(this:GetName().."Text"):SetText("Font Outline")</OnLoad>
<OnClick>HealBot_Config.bfontoutline[HealBot_Config.Current_Skin] = (this:GetChecked() and 1 or 0); HealBot_Action_ResetSkin()</OnClick>
</Scripts>
</CheckButton>
<CheckButton name="HealBot_Options_1pxBorders" inherits="SendMailRadioButtonTemplate">
<Anchors><Anchor point="TOPLEFT"><Offset><AbsDimension x="290" y="-58" /></Offset></Anchor></Anchors>
<Scripts>
<OnLoad>getglobal(this:GetName().."Text"):SetText("1px Borders")</OnLoad>
<OnClick>HealBot_Config.bborder[HealBot_Config.Current_Skin] = (this:GetChecked() and 1 or 2); HealBot_Action_ResetSkin()</OnClick>
</Scripts>
</CheckButton>
<Slider name="HealBot_Options_BarTextureS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="20" y="-40" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINTEXTURE,1,14)</OnLoad>
<OnValueChanged>HealBot_Options_BarTextureS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarNumColsS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="18" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarTextureS" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="10" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINNUMCOLS,1,8)</OnLoad>
<OnValueChanged>HealBot_Options_BarNumColsS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarHeightS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="18" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarTextureS" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-32" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINHEIGHT,10,100)</OnLoad>
<OnValueChanged>HealBot_Options_BarHeightS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarWidthS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarHeightS" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="10" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINWIDTH,50,225)</OnLoad>
<OnValueChanged>HealBot_Options_BarWidthS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarBRSpaceS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarHeightS" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-32" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINBRSPACE,0,10)</OnLoad>
<OnValueChanged>HealBot_Options_BarBRSpaceS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarBCSpaceS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarBRSpaceS" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="10" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINBCSPACE,0,25)</OnLoad>
<OnValueChanged>HealBot_Options_BarBCSpaceS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_FramePaddingS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarBCSpaceS" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="10" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,"Frame Padding",0,50)</OnLoad>
<OnValueChanged>HealBot_Options_FramePaddingS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarAlpha" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarBRSpaceS" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Pct_OnLoad_MinMax(this,HEALBOT_OPTIONS_BARALPHA,0.25,1)</OnLoad>
<OnValueChanged>HealBot_Options_BarAlpha_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarAlphaInHeal" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarAlpha" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="10" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Pct_OnLoad_MinMax(this,HEALBOT_OPTIONS_BARALPHAINHEAL,0.05,0.75)</OnLoad>
<OnValueChanged>HealBot_Options_BarAlphaInHeal_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarAlphaDis" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarAlpha" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_Pct_OnLoad(this,HEALBOT_OPTIONS_BARALPHADIS)</OnLoad>
<OnValueChanged>HealBot_Options_BarAlphaDis_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_AbortBarSize" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarAlphaDis" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="10" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,"Abort size",0,15)</OnLoad>
<OnValueChanged>HealBot_Options_AbortBarSize_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_FontHeight" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarAlphaDis" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-35" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,HEALBOT_OPTIONS_SKINFHEIGHT,7,18)</OnLoad>
<OnValueChanged>HealBot_Options_FontHeight_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BorderThicknessS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarAlphaInHeal" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="10" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,"Solid Border",1,10)</OnLoad>
<OnValueChanged>HealBot_Options_BorderThicknessS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<Slider name="HealBot_Options_BarMaxRowsS" inherits="HealBot_Options_SliderTemplate">
<Size>
<AbsDimension x="123" y="17" />
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_AbortBarSize" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="10" y="0" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>HealBot_Options_val_OnLoad(this,"Max Rows",0,40)</OnLoad>
<OnValueChanged>HealBot_Options_BarMaxRowsS_OnValueChanged(this)</OnValueChanged>
</Scripts>
</Slider>
<CheckButton name="HealBot_Options_GridOrientation" inherits="OptionsCheckButtonTemplate">
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_BarMaxRowsS" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="-5" y="-10" />
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad>
getglobal(this:GetName().."Text"):SetText("Horizontal Grid");
</OnLoad>
<OnClick>
HealBot_Options_GridOrientation_OnClick(this);
</OnClick>
</Scripts>
</CheckButton>
<Button name="HealBot_EnTextColorpickb">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_FontHeight" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-15"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_SkinColorpick_OnClick("En")</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_EnTextColorpick" inherits="TextStatusBar">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_FontHeight" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-15"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString name="HealBot_EnTextColorpickt" inherits="GameFontNormalSmall" text="HEALBOT_SKIN_ENTEXT">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_EnTextColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(70); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<StatusBar name="HealBot_EnTextColorpickin" inherits="TextStatusBar">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_Options_FontHeight" relativePoint="BOTTOMLEFT">
<Offset>
<AbsDimension x="0" y="-15"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_DisTextColorpickb">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_EnTextColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_SkinColorpick_OnClick("Dis")</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_DisTextColorpick" inherits="TextStatusBar">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_EnTextColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString name="HealBot_DisTextColorpickt" inherits="GameFontNormalSmall" text="HEALBOT_SKIN_DISTEXT">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_DisTextColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_DebTextColorpickb">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_DisTextColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_SkinColorpick_OnClick("Debuff")</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_DebTextColorpick" inherits="HealBot_ColourButtonTemplate">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_DisTextColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString name="HealBot_DebTextColorpickt" inherits="GameFontNormalSmall" text="HEALBOT_SKIN_DEBTEXT">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_DebTextColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_BackgroundColorpickb">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_EnTextColorpick" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-25"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_SkinColorpick_OnClick("Back")</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_BackgroundColorpick" inherits="HealBot_ColourButtonTemplate">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_EnTextColorpick" relativePoint="TOPLEFT">
<Offset>
<AbsDimension x="0" y="-25"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_SKIN_BACKTEXT">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_BackgroundColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_BorderColorpickb">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_BackgroundColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_SkinColorpick_OnClick("Bor")</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_BorderColorpick" inherits="HealBot_ColourButtonTemplate">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_BackgroundColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_SKIN_BORDERTEXT">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_BorderColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
<Button name="HealBot_AbortColorpickb">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_BorderColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Scripts>
<OnClick>HealBot_SkinColorpick_OnClick("Abort")</OnClick>
</Scripts>
</Button>
<StatusBar name="HealBot_AbortColorpick" inherits="HealBot_ColourButtonTemplate">
<Size>
<AbsDimension x="87" y="20"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT" relativeTo="HealBot_BorderColorpick" relativePoint="TOPRIGHT">
<Offset>
<AbsDimension x="5" y="0"/>
</Offset>
</Anchor>
</Anchors>
<Layers>
<Layer level="OVERLAY">
<FontString inherits="GameFontNormalSmall" text="HEALBOT_ACTION_ABORT">
<Anchors>
<Anchor point="CENTER" relativeTo="HealBot_AbortColorpick" relativePoint="CENTER">
<Offset>
<AbsDimension x="0" y="1"/>
</Offset>
</Anchor>
</Anchors>
</FontString>
</Layer>
</Layers>
<Scripts>
<OnLoad> this:SetMinMaxValues(0,100); this:SetValue(100); </OnLoad>
</Scripts>
<BarTexture file="Interface\TargetingFrame\UI-StatusBar"/>
<BarColor r="0" g="1" b="0"/>
</StatusBar>
</Frames>
</Frame>
</Frames>
</Frame>
</Ui>
+199
View File
@@ -0,0 +1,199 @@
-- HealBot Options panel file: HealBot_Options_Spells.lua
-- Split from original HealBot_Options.lua
function HealBot_ComboButtons_Button_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_ComboButtons_Button_OnClick(this,id)
if HealBot_Options_ComboButtons_Button>0 then
getglobal("HealBot_ComboButtons_Button"..HealBot_Options_ComboButtons_Button):SetChecked(nil);
end
HealBot_Options_ComboButtons_Button = id;
if HealBot_Options_ComboButtons_Button>0 then
getglobal("HealBot_ComboButtons_Button"..HealBot_Options_ComboButtons_Button):SetChecked(1);
end
HealBot_Options_ComboClass_Text()
end
function HealBot_Options_ShowTooltip_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_ShowTooltip_OnClick(this)
HealBot_Config.ShowTooltip = this:GetChecked() or 0;
end
function HealBot_Options_ShowTooltipTarget_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_ShowTooltipTarget_OnClick(this)
HealBot_Config.Tooltip_ShowTarget = this:GetChecked() or 0;
end
function HealBot_Options_ShowTooltipSpellDetail_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_ShowTooltipSpellDetail_OnClick(this)
HealBot_Config.Tooltip_ShowSpellDetail = this:GetChecked() or 0;
end
function HealBot_Options_ShowTooltipInstant_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_ShowTooltipInstant_OnClick(this)
HealBot_Config.Tooltip_Recommend = this:GetChecked() or 0;
end
local HealBot_Options_TooltipPos_List = {
HEALBOT_TOOLTIP_POSDEFAULT,
HEALBOT_TOOLTIP_POSLEFT,
HEALBOT_TOOLTIP_POSRIGHT,
HEALBOT_TOOLTIP_POSABOVE,
HEALBOT_TOOLTIP_POSBELOW,
}
function HealBot_Options_TooltipPos_DropDown()
for i=1, getn(HealBot_Options_TooltipPos_List), 1 do
local info = {};
info.text = HealBot_Options_TooltipPos_List[i];
info.func = HealBot_Options_TooltipPos_OnSelect;
UIDropDownMenu_AddButton(info);
end
end
function HealBot_Options_TooltipPos_Initialize()
UIDropDownMenu_Initialize(HealBot_Options_TooltipPos,HealBot_Options_TooltipPos_DropDown)
end
function HealBot_Options_TooltipPos_Refresh(onselect)
if not HealBot_Config.TooltipPos then return end
if not onselect then HealBot_Options_TooltipPos_Initialize() end -- or wrong menu may be used !
HealBot_UIDropDownMenu_SetSelectedID(HealBot_Options_TooltipPos,HealBot_Config.TooltipPos)
end
function HealBot_Options_TooltipPos_OnLoad()
UIDropDownMenu_Initialize(this, HealBot_Options_TooltipPos_DropDown)
UIDropDownMenu_SetWidth(128, this)
end
function HealBot_Options_TooltipPos_OnSelect()
HealBot_Config.TooltipPos = this:GetID()
HealBot_Options_TooltipPos_Refresh(true)
end
--------------------------------------------------------------------------------
local HealBot_Options_ComboClass_List = {
HEALBOT_DRUID,
HEALBOT_PALADIN,
HEALBOT_PRIEST,
HEALBOT_SHAMAN,
}
function HealBot_Options_ComboClass_Text()
local class=UnitClass("Player");
local combo = HealBot_Config.KeyCombo[class]
local button = HealBot_Options_ComboClass_Button()
if combo then
HealBot_Options_Click:SetText(combo[button] or "")
HealBot_Options_Shift:SetText(combo["Shift"..button] or "")
HealBot_Options_Ctrl:SetText(combo["Ctrl"..button] or "")
HealBot_Options_ShiftCtrl:SetText(combo["ShiftCtrl"..button] or "")
end
end
function HealBot_Options_ComboClass_Button()
local button = "Left"
if HealBot_Options_ComboButtons_Button==2 then button = "Middle"; end
if HealBot_Options_ComboButtons_Button==3 then button = "Right"; end
if HealBot_Options_ComboButtons_Button==4 then button = "Button4"; end
if HealBot_Options_ComboButtons_Button==5 then button = "Button5"; end
return button;
end
ColorPickerFrame.func = HealBot_Returned_Colours
--------------------------------------------------------------------------------
function HealBot_Options_EditBox_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_Click_OnTextChanged(this)
local class=UnitClass("Player");
if not HealBot_Config.KeyCombo[class] then HealBot_Config.KeyCombo[class] = {} end
local combo = HealBot_Config.KeyCombo[class]
local button = HealBot_Options_ComboClass_Button()
combo[button] = this:GetText()
HealBot_Options_KeyCombo_Change()
end
function HealBot_Options_Shift_OnTextChanged(this)
local class=UnitClass("Player");
if not HealBot_Config.KeyCombo[class] then HealBot_Config.KeyCombo[class] = {} end
local combo = HealBot_Config.KeyCombo[class]
local button = HealBot_Options_ComboClass_Button()
combo["Shift"..button] = this:GetText()
HealBot_Options_KeyCombo_Change()
end
function HealBot_Options_Ctrl_OnTextChanged(this)
local class=UnitClass("Player");
if not HealBot_Config.KeyCombo[class] then HealBot_Config.KeyCombo[class] = {} end
local combo = HealBot_Config.KeyCombo[class]
local button = HealBot_Options_ComboClass_Button()
combo["Ctrl"..button] = this:GetText()
HealBot_Options_KeyCombo_Change()
end
function HealBot_Options_ShiftCtrl_OnTextChanged(this)
local class=UnitClass("Player");
if not HealBot_Config.KeyCombo[class] then HealBot_Config.KeyCombo[class] = {} end
local combo = HealBot_Config.KeyCombo[class]
local button = HealBot_Options_ComboClass_Button()
combo["ShiftCtrl"..button] = this:GetText()
HealBot_Options_KeyCombo_Change()
end
function HealBot_Options_KeyCombo_Change()
local class=UnitClass("Player");
HealBot_Config.KeyCombo[class]=HealBot_Config.KeyCombo[class];
end
function HealBot_Options_EnableHealthy_OnLoad(this,text)
getglobal(this:GetName().."Text"):SetText(text);
end
function HealBot_Options_EnableHealthy_OnClick(this)
HealBot_Config.EnableHealthy = this:GetChecked() or 0;
HealBot_Action_EnableButtons();
end
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Chat Custom Messages UI Logic
--------------------------------------------------------------------------------
+308
View File
@@ -0,0 +1,308 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/"
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">
<Size>
<AbsDimension y="268"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="21" y="-30"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-21" y="0"/>
</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>
<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>
<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>
</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>
<Size>
<AbsDimension y="118"/>
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset>
<AbsDimension x="20" y="-300"/>
</Offset>
</Anchor>
<Anchor point="TOPRIGHT">
<Offset>
<AbsDimension x="-20" y="-180"/>
</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>
</Frame>
</Frames>
</Frame>
</Ui>
File diff suppressed because it is too large Load Diff
+270
View File
@@ -0,0 +1,270 @@
-- HealBot_View_Tooltip.lua
-- Handles rendering of unit and spell tooltips in the HealBot UI
HealBot_Action_TooltipUnit = nil
function HealBot_Tooltip_GetSpellColor(spell)
local r, g, b = 1, 1, 0 -- default yellow
if spell and HealBot_Spells and HealBot_Spells[spell] and HealBot_Spells[spell].Mana then
if UnitMana("player") < HealBot_Spells[spell].Mana then
r, g, b = 1, 0, 0 -- red if not enough mana
end
end
return r, g, b
end
function HealBot_Action_RefreshTooltip(unit)
if HealBot_Config.ShowTooltip==0 then return end
if not unit then unit = HealBot_Action_TooltipUnit end
if not unit then return end;
local hlth=UnitHealth(unit);
local maxhlth=UnitHealthMax(unit);
local spellLeft = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Left"));
local spellMiddle = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Middle"));
local spellRight = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Right"));
local spellButton4 = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Button4"));
local spellButton5 = HealBot_GetHealSpell(unit,HealBot_Action_SpellPattern("Button5"));
local linenum = 1
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)
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)
end
end
end
if HealBot_Config.Tooltip_ShowSpellDetail==1 then
if spellLeft then
linenum=linenum+2
local sr, sg, sb = HealBot_Tooltip_GetSpellColor(spellLeft)
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONLEFT.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellLeft,sr,sg,sb,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellLeft,linenum);
end
if spellMiddle then
linenum=linenum+2
local sr, sg, sb = HealBot_Tooltip_GetSpellColor(spellMiddle)
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONMIDDLE.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellMiddle,sr,sg,sb,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellMiddle,linenum);
end
if spellRight then
linenum=linenum+2
local sr, sg, sb = HealBot_Tooltip_GetSpellColor(spellRight)
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONRIGHT.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellRight,sr,sg,sb,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellRight,linenum);
end
if spellButton4 then
linenum=linenum+2
local sr, sg, sb = HealBot_Tooltip_GetSpellColor(spellButton4)
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON4.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellButton4,sr,sg,sb,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellButton4,linenum);
end
if spellButton5 then
linenum=linenum+2
local sr, sg, sb = HealBot_Tooltip_GetSpellColor(spellButton5)
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON5.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellButton5,sr,sg,sb,linenum)
linenum=HealBot_Action_Tooltip_SpellInfo(spellButton5,linenum);
end
else
if spellLeft then
linenum=linenum+1
local sr, sg, sb = HealBot_Tooltip_GetSpellColor(spellLeft)
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONLEFT..":",sr,sg,sb,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellLeft),1,1,1,linenum)
end
if spellMiddle then
linenum=linenum+1
local sr, sg, sb = HealBot_Tooltip_GetSpellColor(spellMiddle)
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONMIDDLE..":",sr,sg,sb,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellMiddle),1,1,1,linenum)
end
if spellRight then
linenum=linenum+1
local sr, sg, sb = HealBot_Tooltip_GetSpellColor(spellRight)
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONRIGHT..":",sr,sg,sb,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellRight),1,1,1,linenum)
end
if spellButton4 then
linenum=linenum+1
local sr, sg, sb = HealBot_Tooltip_GetSpellColor(spellButton4)
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON4..":",sr,sg,sb,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellButton4),1,1,1,linenum)
end
if spellButton5 then
linenum=linenum+1
local sr, sg, sb = HealBot_Tooltip_GetSpellColor(spellButton5)
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON5..":",sr,sg,sb,linenum)
HealBot_Action_Tooltip_SetLineRight(HealBot_Action_Tooltip_SpellSummary(spellButton5),1,1,1,linenum)
end
end
if HealBot_Config.Tooltip_Recommend==1 then
local Instant_check=0;
if HealBot_Config.Tooltip_ShowSpellDetail==1 then linenum=linenum+1; end
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_TOOLTIP_RECOMMENDTEXT,0.8,0.8,0,linenum)
Instant_check=0;
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellLeft,"upd",linenum,Instant_check);
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellMiddle,"upd",linenum,Instant_check);
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellRight,"upd",linenum,Instant_check);
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellButton4,"upd",linenum,Instant_check);
Instant_check,linenum=HealBot_Action_Tooltip_CheckForInstant(unit,spellButton5,"upd",linenum,Instant_check);
if Instant_check==0 then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(" None",0.4,0.4,0.4,linenum)
end
end
local height = 20
local width = 0
for i = 1, linenum do
local txtL = getglobal("HealBot_TooltipTextL" .. i)
local txtR = getglobal("HealBot_TooltipTextR" .. i)
height = height + txtL:GetHeight() + 2
if (txtL:GetWidth() + txtR:GetWidth() + 25 > width) then
width = txtL:GetWidth() + txtR:GetWidth() + 25
end
end
HealBot_Tooltip:SetWidth(width)
HealBot_Tooltip:SetHeight(height)
HealBot_Tooltip:ClearAllPoints();
if HealBot_Config.TooltipPos>1 then
if HealBot_Config.TooltipPos==2 then
HealBot_Tooltip:SetPoint("TOPRIGHT","HealBot_Action","TOPLEFT",0,0);
elseif HealBot_Config.TooltipPos==3 then
HealBot_Tooltip:SetPoint("TOPLEFT","HealBot_Action","RIGHT",0,0);
elseif HealBot_Config.TooltipPos==4 then
HealBot_Tooltip:SetPoint("BOTTOM","HealBot_Action","TOP",0,0);
else
HealBot_Tooltip:SetPoint("TOP","HealBot_Action","BOTTOM",0,0);
end
else
HealBot_Tooltip:SetPoint("BOTTOMRIGHT","WorldFrame","BOTTOMRIGHT",-105,105);
end
HealBot_Tooltip:Show();
end
function HealBot_Action_Tooltip_SpellInfo(spell,linenum)
local text
if HealBot_Spells[spell] then
if HealBot_Spells[spell].HealsDur>0 then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(HEALBOT_WORDS_CAST..": "..HealBot_Spells[spell].CastTime.." "..HEALBOT_WORDS_SEC..".",0.8,0.8,0.8,linenum)
HealBot_Action_Tooltip_SetLineRight("Mana: "..HealBot_Spells[spell].Mana,0.5,0.5,1,linenum)
if HealBot_Spells[spell].HealsMax>0 then
local Heals = HEALBOT_HEAL.." "
if HealBot_Spells[spell].Shield then
Heals = HEALBOT_TOOLTIP_SHIELD.." "
end
if HealBot_Spells[spell].HealsMin<HealBot_Spells[spell].HealsMax then
text=Heals..format("%d", HealBot_Spells[spell].HealsMin + HealBot_Spells[spell].RealHealing) .." "..HEALBOT_WORDS_TO.." "..format("%d",HealBot_Spells[spell].HealsMax + HealBot_Spells[spell].RealHealing)
else
text=Heals..format("%d", HealBot_Spells[spell].HealsMax + HealBot_Spells[spell].RealHealing)
end
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(text,1,1,1,linenum)
end
if HealBot_Spells[spell].HealsExt>0 then
text=HEALBOT_HEAL.." "..HealBot_Spells[spell].HealsDur.." "..HEALBOT_WORDS_OVER.." "..HealBot_Spells[spell].Duration-HealBot_Spells[spell].CastTime.." sec."
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(text,1,1,1,linenum)
end
if not HealBot_Spells[spell].Shield then
text=HEALBOT_TOOLTIP_ITEMBONUS.." +"..HealBot_GetBonus().." | "..HEALBOT_TOOLTIP_ACTUALBONUS.." +"..HealBot_Spells[spell].RealHealing.." "
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(text,0.8,0.8,0.8,linenum)
end
end
end
return linenum
end
function HealBot_Action_Tooltip_SpellSummary(spell)
local ret_val = " ";
if HealBot_Spells[spell] then
if HealBot_Spells[spell].HealsDur and HealBot_Spells[spell].HealsDur>0 then
if HealBot_Spells[spell].HealsMax and HealBot_Spells[spell].HealsMax>0 then
local Heals = " "..HEALBOT_HEAL.." ";
if HealBot_Spells[spell].Shield then
Heals = " "..HEALBOT_TOOLTIP_SHIELD.." ";
end
if (HealBot_Spells[spell].HealsMin or 0)<(HealBot_Spells[spell].HealsMax or 0) then
ret_val=ret_val..Heals..format("%d", (((HealBot_Spells[spell].HealsMin or 0)+(HealBot_Spells[spell].HealsMax or 0))/2) + (HealBot_Spells[spell].RealHealing or 0));
else
ret_val=ret_val..Heals..format("%d", (HealBot_Spells[spell].HealsMax or 0) + (HealBot_Spells[spell].RealHealing or 0));
end
end
if HealBot_Spells[spell].HealsExt and HealBot_Spells[spell].HealsExt>0 then
ret_val=ret_val.." HoT "..HealBot_Spells[spell].HealsDur;
end
if HealBot_Spells[spell].Mana then
ret_val=ret_val.." "..HEALBOT_WORDS_FOR.." "..HealBot_Spells[spell].Mana.." Mana";
end
end
end
if string.len(ret_val)<5 then ret_val = " - "..spell; end
return ret_val
end
function HealBot_Action_Tooltip_CheckForInstant(unit,spell,upd,linenum,check)
if HealBot_Spells[spell] then
if HealBot_Spells[spell].CastTime == 0 then
if HealBot_UnitAffected(unit,HealBot_Spells[spell].Buff) then return check,linenum end;
if HealBot_UnitAffected(unit,HealBot_Spells[spell].Debuff) then return check,linenum end;
if upd=="upd" then
linenum=linenum+1
HealBot_Action_Tooltip_SetLineLeft(" "..spell,1,1,1,linenum)
end
else
return check,linenum;
end
else
return check,linenum
end
return check+1,linenum;
end
function HealBot_Action_Tooltip_SetLineLeft(Text,R,G,B,linenum)
local txtL = getglobal("HealBot_TooltipTextL" .. linenum)
txtL:SetTextColor(R,G,B)
txtL:SetText(Text)
txtL:Show()
end
function HealBot_Action_Tooltip_SetLineRight(Text,R,G,B,linenum)
local txtR = getglobal("HealBot_TooltipTextR" .. linenum)
txtR:SetTextColor(R,G,B)
txtR:SetText(Text)
txtR:Show()
end
function HealBot_Action_Tooltip_ClearLines()
for j=1,30 do
local txtL = getglobal("HealBot_TooltipTextL" .. j)
local txtR = getglobal("HealBot_TooltipTextR" .. j)
txtL:SetText(" ")
txtR:SetText(" ")
txtL:Hide()
txtR:Hide()
end
end
function HealBot_Action_ShowTooltip(this)
if HealBot_Config.ShowTooltip==0 then return end
if not this.unit then return end;
if not this:IsEnabled() then return end;
HealBot_Action_TooltipUnit = this.unit;
HealBot_Action_RefreshTooltip(this.unit);
end
function HealBot_Action_HideTooltip(this)
if HealBot_Config.ShowTooltip==0 then return end
HealBot_Tooltip:Hide();
HealBot_Action_TooltipUnit = nil;
end
+107 -6
View File
@@ -3,6 +3,10 @@ By Bluewhale.
> **NOTE:** For HealBot to work correctly, the **Selfcast** feature in WoW options needs to be disabled. > **NOTE:** For HealBot to work correctly, the **Selfcast** feature in WoW options needs to be disabled.
Original HealBot, while being a staple healing addon in Wrath and later expansions, was in its infancy during Vanilla WoW. It was a memory and CPU hog that ate up resources, featured a clunky UI, and offered limited functions. To fix all of the above while still using it as a base framework, I refactored the entire codebase. The monolithic code structure was split to follow a more modern approach (MVC design pattern), making it more stable and easily editable. Additionally, the inefficient AURA scanning was replaced with lightweight (Observer Pattern) reactive programming. It now updates only what is necessary when a trigger fires, rather than performing clumsy, continuous scans of a 40-man raid. By doing so, I managed to throttle down CPU and memory usage significantly, placing it on par with modern addons. Additional functionalities are being added over time to provide a holistic, healer-centered raid frame.
> **Performance First:** The raidframe is not library reliant - unlike popular raidframe replacement addons it doesn't rely at all on external frameworks. While this makes my work a bit harder this allows complete control over garbage collection and CPU use which makes it multiple times more stable and lightweight.
### Reporting Errors ### Reporting Errors
Major errors will pop up a frame with error information. Take a screenshot and post comments. Major errors will pop up a frame with error information. Take a screenshot and post comments.
@@ -15,9 +19,105 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
* `/hb options` - Toggles the HealBot options 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 reset` - Resets the contents of the main HealBot panel
### Option Changes from the original HealBot Continues ### 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.
* **Native Hovercasting (Mouseover):** Cast configured spells on hovered unit frames using keybinds directly from your action bars, without losing your current target. (Toggleable in Options -> General).
* **Macro, Item, & Script Bindings:** Bind named macros, inventory items, and scripts directly to mouse clicks. Supports implicit `@mouseover` targeting natively.
* **Zero-Latency Self-Heals:** Incoming heals for the local player process instantly with zero latency, independent of network lag.
* **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 - currently only TurtleWoW patch 1.18 supported.
* **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).
* **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.
* **Customizable Health Text:** Dynamic unit health display (Name Only, Percentage, Real Health, or Health Deficit).
* **Non-Mana Resource Tracking:** Track Rage, Energy, and Focus for non-mana classes.
* **Highly Customizable Skins:** Fully configure dimensions (width, height), row spacing, column layouts, custom textures, opacity, class-colored frames, and outline of fonts.
### To be implemented
- **GUID-based frame mapping:** Migrate internal state to use lightweight GUID tracking to resolve bugs when targets switch or duplicate names appear (e.g., enemy mobs, warlock pets).
- **Mod Integration Optimization:** Add conditional SuperWoW/UnitXP SP3 integration to reduce GC spikes and improve frame rendering accuracy.
### Known issues
* **New spell rank bug** you may experience lua error spaming your chat frame after learning new healing spells. /reload will clear the issue.
### Change Log ### Change Log
**v1.6.1**
* **Hotfix - pet frames** - With class colours toggled extra frames for player pets were given some classy mint colour.
* **Hotfi - raidframes in combat** - Modfied how frames behave when player leaves during combat.
**v1.6**
* **Event Loop Decoupling:** Ripped out redundant synchronous UI redraws that were bypassed by the new MVC architecture. High-frequency events (mana regen, health ticks) now fully rely on the `HealBot_OnUpdate` dirty queue, severely reducing CPU bottlenecks.
* **Combat UI Optimizations:** Removed unnecessary full spell recalculations when dropping combat, preventing client stutter after every mob kill.
* **Memory Optimization:** Fixed severe Lua garbage collection spikes during UI reloads by preventing full party layout rebuilds on `PLAYER_TARGET_CHANGED`, and cached dynamic string concatenations directly to unit frames to eliminate memory leakage on high frequency UI refreshes.
* **Mana Validation Fix:** Removed artificial spell mana gating, fixing an issue where low-mana spells disappeared from tooltips and couldn't be cast. WoW's native mana validation now correctly processes 0-cost buffs (e.g. Clearcasting, Inner Focus) while turning low-mana tooltip spells red.
* **Self-Buff Tracking:** Fixed a bug where "Self Only" buff tracking incorrectly excluded the player when represented by party or raid frames instead of the standard "player" unit ID.
* **Settings Persistence Fix:** Changed `SavedVariables` to `SavedVariablesPerCharacter` in TOC so configurations correctly load unique per character instead of account-wide.
* **CPU Optimization:** Added early exit logic to resource tracking events (Mana, Rage, Energy) to stop background polling on party/raid members when "Show Mana Bars" is toggled off. Also removed excessive triggers (`BAG_UPDATE`, `PET_BAR_SHOWGRID`) and filtered `UNIT_INVENTORY_CHANGED` to only process the player, eliminating massive CPU spikes and unnecessary UI layout rebuilds during looting, item cooldowns, or when other players change gear.
* **OnUpdate GC Spike Fix:** Rewrote the modifier polling logic inside `HealBot_OnUpdate` to use boolean state tracking instead of dynamic string concatenation, eliminating a major source of garbage collection bloat while hovering over unit frames.
* **Aura Scanning Optimization:** Refactored Debuff tracking (`HealBot_DebuffWatch`) to use native boolean values (`true`/`false`) instead of string comparisons (`"YES"`/`"NO"`). This improves performance inside the continuous aura scanning loops.
**v1.5**
* **Macro, Item, and Script Bindings:** Support for binding named macros, inventory items, and inline scripts (e.g. `/target`) directly to mouse clicks in the Spells tab. All of these now natively support implicit `@mouseover` targeting on the unit frame you click, without losing your current target.
* **Modifier-Aware Tooltips & Resource Costs:** The tooltip dynamically updates to show exactly what action is bound when holding down Shift, Ctrl, or Alt over a frame. Spells also show their required mana cost, turning red if you do not have enough mana to cast them.
* **Memory Recycling Pool:** Added a local table recycling pool in the data layer to greatly reduce Lua garbage collection (GC) spikes, improving overall client frame rates during intense combat.
**v1.4.2**
* **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**
* **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.
* **Hovercast Incoming Heals:** Added full support for processing and displaying incoming heals when using action bar hovercasting.
* **Zero-latency Self-Heals:** Incoming heals for the local player now process instantly with zero latency and no network reliance, ensuring they function even when playing solo.
**v1.4**
* **Extra Frame support for pets and familiars added:** Togglable from healing tab - Extra frames option selected & pets selected from dropdown.
* **Customizable Health Text:** Added a new dropdown in the Healing Options tab that allows users to choose how health text is displayed on unit frames (`Name Only`, `Health Percentage`, `Real Health`, or `Health Deficit`). Includes a smart truncation algorithm to preserve critical health numbers even if the unit name is too long.
* **Non-Mana Resource Tracking:** Added a new toggle in the General Options tab to track secondary resources (Energy, Rage, Focus) for non-mana classes. Bars are dynamically color-coded based on the resource type.
* **Dropdown UI Initialization Fix:** Resolved a Vanilla API bug where dropdown menus sharing an ID (like the new Health Text dropdown) would temporarily inherit text from previously loaded dropdowns (e.g., "Modern Flat").
* **Dynamic Modifier Tooltips:** Fixed a bug where the spell tooltip would not dynamically update its spells when pressing modifier keys (Shift/Ctrl/Alt) while hovering over a unit frame. Registered the `MODIFIER_STATE_CHANGED` event to instantly refresh the tooltip.
* **Global Variable Namespace Refactoring:** Executed a codebase-wide refactoring to encapsulate all floating global variables inside the `HealBot_` or `HEALBOT_` namespace. This prevents HealBot from silently shadowing other addons or the native WoW API, ensuring strict adherence to Vanilla Lua best practices. (Also resolved a namespace collision with `InitSpells`).
* **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.
* **UI Persistence Bug Fixes:** Fixed a Vanilla WoW API quirk where unchecking the "Show Headers" or "Self Only" (Buffs) checkboxes caused the UI to either visually re-check itself or overwrite the setting with defaults upon a `/reload`.
**1.3.2**
* **UIDropDownMenu Fixes:** Resolved native client crash (`UIDROPDOWNMENU_OPEN_MENU` nil concatenation) when setting values on closed dropdowns.
**1.3.1**
* **Hotfix: missing helper function restored** Fixed issue with lua error for druids.
**v1.3**
* **General Options Layout & Renaming:** Relabeled "Healing panel options" to "Mana bar options:", moved the "For Healers Only" checkbox side-by-side with "Show Mana Bars", and renamed "Enable mouse over action bar" to "Hovercasting".
* **OnShow Empty Panel Bug Fix:** Solved the rendering issue where the options panel would load empty initially until another tab was clicked.
* **Backdrop Alpha Reset Bug Fix:** Resolved a WoW API client quirk where showing the HealBot frame would reset the background color and alpha channel back to default white/transparent by calling `SetBackdropColor` after `SetBackdrop`.
* **Default Party Frame Toggle:** Added a "Hide Default Party Frames" toggle option (fully localized in English, German, French, and Korean) to hide Blizzard's default party frames. Integrated immediate toggling on joining/leaving groups.
* **Safety Guards & Crash Prevention:** Added safety guards to `HidePartyFrame` and `ShowPartyFrame` calls to prevent nil-value crashes when solo.
* **Checkbox State Initialization Fixes:** Fixed options menu bugs where "Hide when Solo", "Show Mana Bars", and "For Healers Only" checkboxes failed to reflect their saved configuration value when opening the menu.
* **CurrentPanel Nil Comparison Fix:** Fixed a startup Lua comparison crash by initializing `HealBot_Options_CurrentPanel` at the top of the main options file.
* **Monolithic Code Modularization (Options):** Split the massive, single-file options system (`HealBot_Options.xml`/`HealBot_Options.lua`) into 7 dedicated, content-named panel subfiles (`General`, `Spells`, `Healing`, `CDC`, `Skins`, `Buffs`, and `Chat`) to improve codebase modularity and stability.
* **Core Code Decoupling (MVC & Observer Pattern):** Modularized `HealBot.lua` and `HealBot_Action.lua` by decoupling them into dedicated service files: `Range`, `Comms`, `Aura`, `Spells`, `Events` controllers, and `Layout`, `Tooltip` views.
* **Scope Resolution Fix:** Promoted `HealBot_Options_ComboButtons_Button` to global scope in the base options file to resolve a `nil` comparison error when loading spell settings.
* **Global Scoping & Variable Promotion:** Promoted `CalcEquipBonus`, `HealBot_EquipChangeTimer`, `HealValue`, `InitSpells`, and `Delay_RecalcParty` to global scope in `HealBot.lua` to ensure cross-module visibility.
* **CTRA Resurrection Cancel Bug Fix:** Fixed a nil table indexing crash in the CTRA `RESNO` message handler in `HealBot_Controller_Comms.lua`.
* **Core Options Layout Correction:** Relocated the "Defaults" and "Close" buttons back into the parent options frame's container, ensuring they display consistently at the bottom of all configuration tabs.
* **UI Layout & Skins Alignment:** Reorganized all 13 opacity sliders on the Skins panel into a clean, uniform 2-column grid with explicit width/height sizes (`123 x 17`) to resolve layout overlaps. Realigned Chat tab buttons to stay within window bounds and corrected Color Picker anchors.
* **Startup Refresh Optimization:** Resolved initial loading lag where action bars would be missing by forcing an immediate UI refresh (`HealBot_RecalcSpells()`) once spell data loads.
* **Menu Cleanup:** Fixed Options panel checkboxes overlapping due to incorrect vertical spacing offsets.
* **Target Restoration Fix:** Fixed spell interruptions and "You don't have a target" errors when healing by implementing a 0.1-second delayed target restoration using `TargetLastEnemy` and `TargetLastTarget`.
* **Buff Watch Initialization & Options Fix:** Fixed a bug where buff watch failed to display missing buffs on login/UI reload when the player had no active buffs. Enabled immediate buff/aura rescanning when modifying options in the Buff watch configuration tab.
**v1.2.2** **v1.2.2**
* **White background fix** Fixed issue where white background would persist while alpha channel got changes. * **White background fix** Fixed issue where white background would persist while alpha channel got changes.
* **Alpha slider** Fixed bug where alpha slider wouldn't apply changes instantly. * **Alpha slider** Fixed bug where alpha slider wouldn't apply changes instantly.
@@ -39,11 +139,12 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
* **Bug Fix:** Fixed division-by-zero math errors during UI scaling that caused the addon to crash. * **Bug Fix:** Fixed division-by-zero math errors during UI scaling that caused the addon to crash.
**v1.0** **v1.0**
* **Buff tracking** - Added submenu for tracking buffs on element * **Buff tracking:** Added a submenu for tracking buffs on elements.
* ***Hot tracking with icons** - Hots and DoTs display on player bars * **HoT tracking with icons:** HoTs and DoTs display on player bars.
* **Incoming heals use newer protocol** * **Incoming heals:** Now using a newer protocol.
* **Chat functionalities** - modified chat functionalities for spellcast announcements * **Chat functionalities:** Modified chat functionalities for spellcast announcements.
* **Mana Bars** - Mana bars for healers in the grid added togglable from options menu. * **Mana Bars:** Mana bars for healers in the grid added, toggleable from the options menu.
+40
View File
@@ -0,0 +1,40 @@
Druid:
Name - Rank - Effect
Genesis - 1 - increase damage and healing of periodic spells by 5%
Genesis - 2 - increase damage and healing of periodic spells by 10%
Genesis - 3 -increase damage and healing of periodic spells by 15%
Gift of Nature - 1- Increases effectivenes of all healing spells by 2%
Gift of Nature - 2- Increases effectivenes of all healing spells by 4%
Gift of Nature - 3- Increases effectivenes of all healing spells by 6%
Gift of Nature - 4- Increases effectivenes of all healing spells by 8%
Gift of Nature - 5- Increases effectivenes of all healing spells by 10%
Preservation - 1 - Increases the periodic healing of Regrowth by 10% if target is affected by Rejuvenation
Preservation - 2 - Increases the periodic healing of Regrowth by 20% if target is affected by Rejuvenation
Preservation - 3 - Increases the periodic healing of Regrowth by 30% if target is affected by Rejuvenation
Paladin:
Healing Light - 1 - Increases the amount of healed by Holy Light, Flash of Light and Holy Shock by 4%
Healing Light - 2 - Increases the amount of healed by Holy Light, Flash of Light and Holy Shock by 8%
Healing Light - 3 - Increases the amount of healed by Holy Light, Flash of Light and Holy Shock by 12%
Ironclad - 1 - Improves healing done by 1% of current armour from items
Ironclad - 2 - Improves healing done by 2% of current armour from items
Priest:
Improved Renew - 1 - Improves amount healed by renew by 5%
Improved Renew - 2 - Improves amount healed by renew by 10%
Improved Renew - 3 - Improves amount healed by renew by 15%
Spiritual Healing - 1 - Improves amount healed by all healing spells by 6%
Spiritual Healing - 2 - Improves amount healed by all healing spells by 12%
Spiritual Healing - 3 - Improves amount healed by all healing spells by 18%
Spiritual Healing - 4 - Improves amount healed by all healing spells by 24%
Spiritual Healing - 5 - Improves amount healed by all healing spells by 30%
Shaman:
none