mirror of
https://github.com/Bluewhale1337/HealBotBlue.git
synced 2026-09-11 09:50:21 +00:00
Compare commits
30 Commits
6760e4e43d
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 2958bc8e94 | |||
| 4486682568 | |||
| 27231aaf99 | |||
| 56b55f34ad | |||
| 135a8f6bcd | |||
| 7f5b1afe23 | |||
| 00a1ddf789 | |||
| 74e940f41c | |||
| 98b34f24b8 | |||
| 604a26dbb3 | |||
| 03114d4802 | |||
| a0b6e2f72d | |||
| 7d910eadd2 | |||
| 1ef79cfcd1 | |||
| 1f9d3af81e | |||
| e9cfd2fcc7 | |||
| 7c45d85030 | |||
| 92a4cb070a | |||
| 2af99cbc2b | |||
| ebb42f936a | |||
| 04519b9631 | |||
| 3ebcecb8e6 | |||
| b0195b30b9 | |||
| 2aaa53a9e6 | |||
| b64e7070ba | |||
| 5aab23314a | |||
| 60ef3bc41f | |||
| 6a6a9e3283 | |||
| d021441b32 | |||
| 99997b711a |
+2
-2
@@ -1,8 +1,8 @@
|
|||||||
## Interface: 11200
|
## Interface: 11200
|
||||||
## Title: HealBotBlue
|
## Title: HealBotBlue
|
||||||
## Version: 1.7.0
|
## Version: 1.7.1
|
||||||
## Author: Bluewhale
|
## Author: Bluewhale
|
||||||
## Notes: Adds panel with skinable bars for healing and decursive
|
## Notes: Raidframe replacement for healing, decursing, resource tracking and buffing with optional support for SuperWow, ClassicAPI, UnitXP_SP3 and Nampower.
|
||||||
## SavedVariablesPerCharacter: HealBot_Config
|
## SavedVariablesPerCharacter: HealBot_Config
|
||||||
..\..\FrameXML\Fonts.xml
|
..\..\FrameXML\Fonts.xml
|
||||||
..\..\FrameXML\OptionsFrameTemplates.xml
|
..\..\FrameXML\OptionsFrameTemplates.xml
|
||||||
|
|||||||
@@ -47,6 +47,14 @@
|
|||||||
</Anchors>
|
</Anchors>
|
||||||
<Layers>
|
<Layers>
|
||||||
<Layer level="OVERLAY">
|
<Layer level="OVERLAY">
|
||||||
|
<Texture name="$parentRaidIcon" file="Interface\TargetingFrame\UI-RaidTargetingIcons" hidden="true">
|
||||||
|
<Size><AbsDimension x="14" y="14"/></Size>
|
||||||
|
<Anchors>
|
||||||
|
<Anchor point="TOP">
|
||||||
|
<Offset><AbsDimension x="0" y="0"/></Offset>
|
||||||
|
</Anchor>
|
||||||
|
</Anchors>
|
||||||
|
</Texture>
|
||||||
<Texture name="$parentIcon1" hidden="true">
|
<Texture name="$parentIcon1" hidden="true">
|
||||||
<Size><AbsDimension x="12" y="12"/></Size>
|
<Size><AbsDimension x="12" y="12"/></Size>
|
||||||
<Anchors>
|
<Anchors>
|
||||||
|
|||||||
+17
-11
@@ -159,6 +159,7 @@ local HealBot_TrackedHoTs = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
local HealBot_DebuffTypeMap = nil
|
local HealBot_DebuffTypeMap = nil
|
||||||
|
local HealBot_AuraWarningPlayed = {}
|
||||||
|
|
||||||
-- HealBot_OnEvent_UnitAura: Updates debuff lists and icon textures on aura change.
|
-- HealBot_OnEvent_UnitAura: Updates debuff lists and icon textures on aura change.
|
||||||
function HealBot_OnEvent_UnitAura(this, unit)
|
function HealBot_OnEvent_UnitAura(this, unit)
|
||||||
@@ -186,7 +187,7 @@ function HealBot_OnEvent_UnitAura(this, unit)
|
|||||||
local trackedTextures = {}
|
local trackedTextures = {}
|
||||||
|
|
||||||
while true do
|
while true do
|
||||||
local debuff, tmp, debuff_type = UnitDebuff(unit, i)
|
local debuff, tmp, debuff_type = UnitDebuff(unit, i, 1)
|
||||||
if debuff then
|
if debuff then
|
||||||
local mapped_type = nil
|
local mapped_type = nil
|
||||||
if debuff_type then
|
if debuff_type then
|
||||||
@@ -276,19 +277,24 @@ function HealBot_OnEvent_UnitAura(this, unit)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if HealBot_UnitDebuff[unit] then
|
if HealBot_UnitDebuff[unit] then
|
||||||
if DebuffType and HealBot_Range_Check(unit, 27) == 1 then
|
if DebuffType and HealBot_Range_Check(unit, 40) == 1 then
|
||||||
if HealBot_Config.ShowDebuffWarning == 1 then
|
if HealBot_AuraWarningPlayed[unit] ~= DebuffType then
|
||||||
local color = HealBot_Config.CDCBarColour[DebuffType]
|
HealBot_AuraWarningPlayed[unit] = DebuffType
|
||||||
local r, g, b = 1, 0, 0
|
if HealBot_Config.ShowDebuffWarning == 1 then
|
||||||
if color then
|
local color = HealBot_Config.CDCBarColour[DebuffType]
|
||||||
r, g, b = color.R, color.G, color.B
|
local r, g, b = 1, 0, 0
|
||||||
|
if color then
|
||||||
|
r, g, b = color.R, color.G, color.B
|
||||||
|
end
|
||||||
|
UIErrorsFrame:AddMessage(UnitName(unit) .. " suffers from " .. DebuffType,
|
||||||
|
r, g, b,
|
||||||
|
1, UIERRORS_HOLD_TIME);
|
||||||
end
|
end
|
||||||
UIErrorsFrame:AddMessage(UnitName(unit) .. " suffers from " .. DebuffType,
|
if HealBot_Config.SoundDebuffWarning == 1 then HealBot_PlaySound(HealBot_Config.SoundDebuffPlay); end
|
||||||
r, g, b,
|
|
||||||
1, UIERRORS_HOLD_TIME);
|
|
||||||
end
|
end
|
||||||
if HealBot_Config.SoundDebuffWarning == 1 then HealBot_PlaySound(HealBot_Config.SoundDebuffPlay); end
|
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
HealBot_AuraWarningPlayed[unit] = nil
|
||||||
end
|
end
|
||||||
-- Check buffs synchronously because tooltip scanning fails in OnUpdate
|
-- Check buffs synchronously because tooltip scanning fails in OnUpdate
|
||||||
HealBot_CheckBuffs(unit)
|
HealBot_CheckBuffs(unit)
|
||||||
|
|||||||
+102
-16
@@ -71,33 +71,119 @@ function HealBot_SendAddonMessage(prefix, text)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- HealBot_OnEvent_AddonMsg: Parses incoming heal data from other clients.
|
if not HealBot_IncomingHealers then HealBot_IncomingHealers = {} end
|
||||||
function HealBot_OnEvent_AddonMsg(this, addon_id, inc_msg, dist_target, sender_id)
|
|
||||||
if addon_id == HEALBOT_ADDON_ID then
|
-- Reusable global array for gfind string splitting
|
||||||
local tmpTest, unitname, heal_val
|
if not HealBot_Comms_Args then HealBot_Comms_Args = {} end
|
||||||
tmpTest, tmpTest, unitname, heal_val = string.find(inc_msg, ">> (%a+) <<=>> (.%d+) <<" );
|
|
||||||
if heal_val then
|
local function ClearIncomingHeal(sender)
|
||||||
if sender_id == UnitName("player") then return end
|
local data = HealBot_IncomingHealers[sender]
|
||||||
if not HealBot_HealsIn[unitname] then
|
if not data then return end
|
||||||
HealBot_HealsIn[unitname] = 0;
|
local oldAmount = data.amount
|
||||||
|
for i=1, 5 do
|
||||||
|
local oldTarget = data.targets[i]
|
||||||
|
if oldTarget then
|
||||||
|
if HealBot_HealsIn[oldTarget] then
|
||||||
|
HealBot_HealsIn[oldTarget] = HealBot_HealsIn[oldTarget] - oldAmount
|
||||||
|
if HealBot_HealsIn[oldTarget] < 0 then HealBot_HealsIn[oldTarget] = 0 end
|
||||||
|
HealBot_RecalcHeals(HealBot_FindUnitID(oldTarget))
|
||||||
end
|
end
|
||||||
HealBot_Healers[sender_id] = ">> " .. unitname .. " <<=>> " .. heal_val .. " <<";
|
data.targets[i] = nil
|
||||||
HealBot_HealsIn[unitname] = HealBot_HealsIn[unitname] + tonumber(heal_val);
|
end
|
||||||
if tonumber(heal_val) > 0 then
|
end
|
||||||
HealBot_RecalcHeals(HealBot_FindUnitID(unitname))
|
data.amount = 0
|
||||||
elseif HealBot_HealsIn[unitname] < 0 then
|
end
|
||||||
HealBot_HealsIn[unitname] = 0;
|
|
||||||
|
local function SetIncomingHeal(sender, amount, protocol, t1, t2, t3, t4, t5)
|
||||||
|
-- prioritize HealComm over HealBot protocol to avoid double-counting
|
||||||
|
if HealBot_IncomingHealers[sender] and HealBot_IncomingHealers[sender].protocol == "HealComm" and protocol == "HealBot" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if not HealBot_IncomingHealers[sender] then
|
||||||
|
HealBot_IncomingHealers[sender] = { targets = {}, amount = 0, protocol = protocol }
|
||||||
|
end
|
||||||
|
|
||||||
|
ClearIncomingHeal(sender)
|
||||||
|
|
||||||
|
local data = HealBot_IncomingHealers[sender]
|
||||||
|
data.protocol = protocol
|
||||||
|
|
||||||
|
if amount > 0 and t1 then
|
||||||
|
data.amount = amount
|
||||||
|
data.targets[1] = t1
|
||||||
|
data.targets[2] = t2
|
||||||
|
data.targets[3] = t3
|
||||||
|
data.targets[4] = t4
|
||||||
|
data.targets[5] = t5
|
||||||
|
|
||||||
|
for i=1, 5 do
|
||||||
|
local target = data.targets[i]
|
||||||
|
if target then
|
||||||
|
if not HealBot_HealsIn[target] then HealBot_HealsIn[target] = 0 end
|
||||||
|
HealBot_HealsIn[target] = HealBot_HealsIn[target] + amount
|
||||||
|
HealBot_RecalcHeals(HealBot_FindUnitID(target))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- HealBot_OnEvent_AddonMsg: Parses incoming heal data from other clients.
|
||||||
|
function HealBot_OnEvent_AddonMsg(this, addon_id, inc_msg, dist_target, sender_id)
|
||||||
|
if sender_id == UnitName("player") then return end
|
||||||
|
|
||||||
|
if addon_id == "HealComm" then
|
||||||
|
-- Clear reusable args array
|
||||||
|
for i=1, 10 do HealBot_Comms_Args[i] = nil end
|
||||||
|
local argCount = 0
|
||||||
|
for word in string.gfind(inc_msg, "[^/]+") do
|
||||||
|
argCount = argCount + 1
|
||||||
|
HealBot_Comms_Args[argCount] = word
|
||||||
|
end
|
||||||
|
local cmd = HealBot_Comms_Args[1]
|
||||||
|
|
||||||
|
if cmd == "Heal" and HealBot_Comms_Args[2] and HealBot_Comms_Args[3] then
|
||||||
|
SetIncomingHeal(sender_id, tonumber(HealBot_Comms_Args[3]) or 0, "HealComm", HealBot_Comms_Args[2])
|
||||||
|
elseif cmd == "Healstop" then
|
||||||
|
SetIncomingHeal(sender_id, 0, "HealComm")
|
||||||
|
elseif cmd == "GrpHeal" and HealBot_Comms_Args[2] then
|
||||||
|
SetIncomingHeal(sender_id, tonumber(HealBot_Comms_Args[2]) or 0, "HealComm", HealBot_Comms_Args[4], HealBot_Comms_Args[5], HealBot_Comms_Args[6], HealBot_Comms_Args[7], HealBot_Comms_Args[8])
|
||||||
|
elseif cmd == "GrpHealstop" then
|
||||||
|
SetIncomingHeal(sender_id, 0, "HealComm")
|
||||||
|
elseif cmd == "Resurrection" then
|
||||||
|
if HealBot_Comms_Args[2] == "stop" then
|
||||||
|
HealBot_AddDebug(sender_id .. " Stopped ressing");
|
||||||
|
for unit, resser in pairs(HealBot_Ressing) do
|
||||||
|
if resser == sender_id then
|
||||||
|
HealBot_Ressing[unit] = nil;
|
||||||
|
HealBot_RecalcHeals(HealBot_FindUnitID(unit));
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif HealBot_Comms_Args[2] and HealBot_Comms_Args[3] == "start" then
|
||||||
|
HealBot_AddDebug(sender_id .. " is ressing " .. HealBot_Comms_Args[2]);
|
||||||
|
HealBot_Ressing[HealBot_Comms_Args[2]] = sender_id;
|
||||||
|
HealBot_RecalcHeals(HealBot_FindUnitID(HealBot_Comms_Args[2]));
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
elseif addon_id == HEALBOT_ADDON_ID then
|
||||||
|
local tmpTest, tmpTest, unitname, heal_val = string.find(inc_msg, ">> (.-) <<=>> (.-) <<" );
|
||||||
|
if heal_val and unitname then
|
||||||
|
local amount = tonumber(heal_val) or 0
|
||||||
|
if amount < 0 then amount = 0 end -- HealBot sends negative to cancel
|
||||||
|
SetIncomingHeal(sender_id, amount, "HealBot", unitname)
|
||||||
|
end
|
||||||
|
|
||||||
elseif addon_id == "HealBot" then
|
elseif addon_id == "HealBot" then
|
||||||
local tmpTest, datatype, datamsg, sender
|
local tmpTest, datatype, datamsg, sender
|
||||||
local PName = UnitName("player");
|
local PName = UnitName("player");
|
||||||
tmpTest, tmpTest, datatype, sender, datamsg = string.find(inc_msg, ">> (%a+) <<=>> (%a+) <<=>> (.+)");
|
tmpTest, tmpTest, datatype, sender, datamsg = string.find(inc_msg, ">> (.-) <<=>> (.-) <<=>> (.+)");
|
||||||
if datatype == "RequestVersion" then
|
if datatype == "RequestVersion" then
|
||||||
HealBot_SendAddonMessage("HealBot", ">> SendVersion <<=>> " .. sender .. " <<=>> Version=" .. HEALBOT_VERSION);
|
HealBot_SendAddonMessage("HealBot", ">> SendVersion <<=>> " .. sender .. " <<=>> Version=" .. HEALBOT_VERSION);
|
||||||
elseif datatype == "SendVersion" and PName == sender then
|
elseif datatype == "SendVersion" and PName == sender then
|
||||||
HealBot_AddChat(sender_id .. ": " .. datamsg);
|
HealBot_AddChat(sender_id .. ": " .. datamsg);
|
||||||
end
|
end
|
||||||
|
|
||||||
elseif addon_id == "CTRA" then
|
elseif addon_id == "CTRA" then
|
||||||
if ( string.sub(inc_msg, 1, 3) == "RES" ) then
|
if ( string.sub(inc_msg, 1, 3) == "RES" ) then
|
||||||
if ( inc_msg == "RESNO" ) then
|
if ( inc_msg == "RESNO" ) then
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
HealBot_View_DirtyUnits = {}
|
HealBot_View_DirtyUnits = {}
|
||||||
HealBot_View_DirtyPower = {}
|
HealBot_View_DirtyPower = {}
|
||||||
|
local unitsToRefresh = {}
|
||||||
|
local powerToRefresh = {}
|
||||||
local HealBot_Timer1, HealsIn_Timer = 0, 0;
|
local HealBot_Timer1, HealsIn_Timer = 0, 0;
|
||||||
HealBot_LastModState = ""
|
HealBot_LastModState = ""
|
||||||
|
|
||||||
@@ -152,7 +154,7 @@ function HealBot_OnUpdate(this, arg1)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Process Dirty Queue for MVC View
|
-- Process Dirty Queue for MVC View
|
||||||
local unitsToRefresh = {}
|
for k in pairs(unitsToRefresh) do unitsToRefresh[k] = nil end
|
||||||
for unitID in pairs(HealBot_View_DirtyUnits) do
|
for unitID in pairs(HealBot_View_DirtyUnits) do
|
||||||
unitsToRefresh[unitID] = true
|
unitsToRefresh[unitID] = true
|
||||||
HealBot_View_DirtyUnits[unitID] = nil
|
HealBot_View_DirtyUnits[unitID] = nil
|
||||||
@@ -162,7 +164,7 @@ function HealBot_OnUpdate(this, arg1)
|
|||||||
HealBot_Action_Refresh(unitID)
|
HealBot_Action_Refresh(unitID)
|
||||||
end
|
end
|
||||||
|
|
||||||
local powerToRefresh = {}
|
for k in pairs(powerToRefresh) do powerToRefresh[k] = nil end
|
||||||
for unitID in pairs(HealBot_View_DirtyPower) do
|
for unitID in pairs(HealBot_View_DirtyPower) do
|
||||||
powerToRefresh[unitID] = true
|
powerToRefresh[unitID] = true
|
||||||
HealBot_View_DirtyPower[unitID] = nil
|
HealBot_View_DirtyPower[unitID] = nil
|
||||||
@@ -171,6 +173,13 @@ function HealBot_OnUpdate(this, arg1)
|
|||||||
HealBot_Action_RefreshPower(unitID)
|
HealBot_Action_RefreshPower(unitID)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local powerID, _ = next(HealBot_View_DirtyPower)
|
||||||
|
while powerID do
|
||||||
|
HealBot_Action_RefreshPower(powerID)
|
||||||
|
HealBot_View_DirtyPower[powerID] = nil
|
||||||
|
powerID, _ = next(HealBot_View_DirtyPower)
|
||||||
|
end
|
||||||
|
|
||||||
if HealBot_EquipChangeTimer > 0 then
|
if HealBot_EquipChangeTimer > 0 then
|
||||||
HealBot_EquipChangeTimer = HealBot_EquipChangeTimer - arg1
|
HealBot_EquipChangeTimer = HealBot_EquipChangeTimer - arg1
|
||||||
if HealBot_EquipChangeTimer <= 0 then
|
if HealBot_EquipChangeTimer <= 0 then
|
||||||
@@ -281,12 +290,16 @@ local HealBot_EventHandlers = {
|
|||||||
HealBot_Model:NotifyObservers("ROSTER_CHANGED")
|
HealBot_Model:NotifyObservers("ROSTER_CHANGED")
|
||||||
HealBot_OnEvent_PartyMembersChanged(this)
|
HealBot_OnEvent_PartyMembersChanged(this)
|
||||||
end,
|
end,
|
||||||
|
["RAID_TARGET_UPDATE"] = function(this)
|
||||||
|
if HealBot_Action_UnitButtons then
|
||||||
|
for unit, _ in pairs(HealBot_Action_UnitButtons) do
|
||||||
|
HealBot_View_DirtyUnits[unit] = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
["PLAYER_ENTERING_WORLD"] = function(this)
|
["PLAYER_ENTERING_WORLD"] = function(this)
|
||||||
HealBot_Model:RefreshUnit("player")
|
HealBot_Model:RefreshUnit("player")
|
||||||
HealBot_Model:RefreshUnit("pet")
|
HealBot_Model:RefreshUnit("pet")
|
||||||
if HealBot_UnitClass("player") == "DRUID" then
|
|
||||||
HealBot_UpdateShapeshiftForm()
|
|
||||||
end
|
|
||||||
HealBot_OnEvent_PlayerEnteringWorld(this)
|
HealBot_OnEvent_PlayerEnteringWorld(this)
|
||||||
end,
|
end,
|
||||||
["VARIABLES_LOADED"] = function(this)
|
["VARIABLES_LOADED"] = function(this)
|
||||||
@@ -315,9 +328,7 @@ local HealBot_EventHandlers = {
|
|||||||
HealBot_OnEvent_PlayerEquipmentChanged2(this, arg1)
|
HealBot_OnEvent_PlayerEquipmentChanged2(this, arg1)
|
||||||
end,
|
end,
|
||||||
["UNIT_PET"] = function(this, arg1) HealBot_OnEvent_PartyMembersChanged(this) end,
|
["UNIT_PET"] = function(this, arg1) HealBot_OnEvent_PartyMembersChanged(this) end,
|
||||||
["SPELLS_CHANGED"] = function(this, arg1) HealBot_OnEvent_SpellsChanged(this, arg1) 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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
-- HealBot_OnEvent: Event dispatcher for WoW UI events.
|
-- HealBot_OnEvent: Event dispatcher for WoW UI events.
|
||||||
@@ -334,18 +345,19 @@ end
|
|||||||
function HealBot_OnEvent_VariablesLoaded(this)
|
function HealBot_OnEvent_VariablesLoaded(this)
|
||||||
local class = HealBot_UnitClass("player")
|
local class = HealBot_UnitClass("player")
|
||||||
|
|
||||||
table.foreach(HealBot_ConfigDefaults, function (key, val)
|
local function DeepCopyMissing(src, dest)
|
||||||
if not HealBot_Config[key] then
|
for k, v in pairs(src) do
|
||||||
HealBot_Config[key] = val;
|
if type(v) == "table" then
|
||||||
end
|
if type(dest[k]) ~= "table" then dest[k] = {} end
|
||||||
if type(val) == "table" and type(HealBot_Config[key]) == "table" then
|
DeepCopyMissing(v, dest[k])
|
||||||
for k, v in pairs(val) do
|
else
|
||||||
if HealBot_Config[key][k] == nil then
|
if dest[k] == nil then
|
||||||
HealBot_Config[key][k] = v
|
dest[k] = v
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end);
|
end
|
||||||
|
DeepCopyMissing(HealBot_ConfigDefaults, HealBot_Config)
|
||||||
|
|
||||||
local foundModern = false
|
local foundModern = false
|
||||||
if HealBot_Config.Skins then
|
if HealBot_Config.Skins then
|
||||||
@@ -386,6 +398,7 @@ function HealBot_OnEvent_VariablesLoaded(this)
|
|||||||
this:RegisterEvent("PLAYER_TARGET_CHANGED");
|
this:RegisterEvent("PLAYER_TARGET_CHANGED");
|
||||||
this:RegisterEvent("PARTY_MEMBERS_CHANGED");
|
this:RegisterEvent("PARTY_MEMBERS_CHANGED");
|
||||||
this:RegisterEvent("RAID_ROSTER_UPDATE");
|
this:RegisterEvent("RAID_ROSTER_UPDATE");
|
||||||
|
this:RegisterEvent("RAID_TARGET_UPDATE");
|
||||||
this:RegisterEvent("PARTY_MEMBER_DISABLE");
|
this:RegisterEvent("PARTY_MEMBER_DISABLE");
|
||||||
this:RegisterEvent("PARTY_MEMBER_ENABLE");
|
this:RegisterEvent("PARTY_MEMBER_ENABLE");
|
||||||
this:RegisterEvent("UNIT_PET");
|
this:RegisterEvent("UNIT_PET");
|
||||||
@@ -405,11 +418,6 @@ function HealBot_OnEvent_VariablesLoaded(this)
|
|||||||
this:RegisterEvent("CHAT_MSG_ADDON");
|
this:RegisterEvent("CHAT_MSG_ADDON");
|
||||||
this:RegisterEvent("CHAT_MSG_SYSTEM");
|
this:RegisterEvent("CHAT_MSG_SYSTEM");
|
||||||
this:RegisterEvent("PLAYER_ENTERING_WORLD");
|
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;
|
HealBot_SpellsInitFlag = 2;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -475,6 +483,14 @@ end
|
|||||||
function HealBot_OnEvent_PlayerRegenEnabled(this)
|
function HealBot_OnEvent_PlayerRegenEnabled(this)
|
||||||
HealBot_IsFighting = false;
|
HealBot_IsFighting = false;
|
||||||
HealBot_Delay_RecalcParty = 1;
|
HealBot_Delay_RecalcParty = 1;
|
||||||
|
|
||||||
|
if HealBot_IncomingHealers then
|
||||||
|
for sender, data in pairs(HealBot_IncomingHealers) do
|
||||||
|
if not HealBot_FindUnitID(sender) then
|
||||||
|
HealBot_IncomingHealers[sender] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- HealBot_OnEvent_PlayerTargetChanged: Internal utility: HealBot_OnEvent_PlayerTargetChanged
|
-- HealBot_OnEvent_PlayerTargetChanged: Internal utility: HealBot_OnEvent_PlayerTargetChanged
|
||||||
|
|||||||
@@ -159,6 +159,7 @@ function HealBot_Process_HealValue(spell, target)
|
|||||||
local uname = UnitName(target)
|
local uname = UnitName(target)
|
||||||
if uname then
|
if uname then
|
||||||
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. uname .. " <<=>> " .. HealBot_HealValue .. " << ");
|
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. uname .. " <<=>> " .. HealBot_HealValue .. " << ");
|
||||||
|
HealBot_SendAddonMessage("HealComm", "Heal/" .. uname .. "/" .. HealBot_HealValue .. "/1500/");
|
||||||
if not HealBot_HealsIn[uname] then
|
if not HealBot_HealsIn[uname] then
|
||||||
HealBot_HealsIn[uname] = 0;
|
HealBot_HealsIn[uname] = 0;
|
||||||
end
|
end
|
||||||
@@ -217,6 +218,7 @@ function HealBot_StopCasting()
|
|||||||
local uname = UnitName(HealBot_CastingTarget)
|
local uname = UnitName(HealBot_CastingTarget)
|
||||||
if uname then
|
if uname then
|
||||||
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. uname .. " <<=>> " .. 0 - HealBot_HealValue .. " << ");
|
HealBot_SendAddonMessage(HEALBOT_ADDON_ID, ">> " .. uname .. " <<=>> " .. 0 - HealBot_HealValue .. " << ");
|
||||||
|
HealBot_SendAddonMessage("HealComm", "Healstop");
|
||||||
if HealBot_HealsIn[uname] then
|
if HealBot_HealsIn[uname] then
|
||||||
HealBot_HealsIn[uname] = HealBot_HealsIn[uname] - HealBot_HealValue;
|
HealBot_HealsIn[uname] = HealBot_HealsIn[uname] - HealBot_HealValue;
|
||||||
if HealBot_HealsIn[uname] < 0 then
|
if HealBot_HealsIn[uname] < 0 then
|
||||||
@@ -857,10 +859,7 @@ function HealBot_Generic_Patten(matchStr, matchPattern)
|
|||||||
return tmpTest, _HealsMin, _HealsMax;
|
return tmpTest, _HealsMin, _HealsMax;
|
||||||
end
|
end
|
||||||
|
|
||||||
-- HealBot_UpdateShapeshiftForm: Called on UPDATE_SHAPESHIFT_FORM
|
|
||||||
function HealBot_UpdateShapeshiftForm()
|
|
||||||
-- Deprecated
|
|
||||||
end
|
|
||||||
|
|
||||||
-- HealBot_GetShapeshiftForm: Detects active druid form to prevent invalid casts.
|
-- HealBot_GetShapeshiftForm: Detects active druid form to prevent invalid casts.
|
||||||
function HealBot_GetShapeshiftForm()
|
function HealBot_GetShapeshiftForm()
|
||||||
@@ -870,9 +869,18 @@ function HealBot_GetShapeshiftForm()
|
|||||||
for i=1,forms do
|
for i=1,forms do
|
||||||
local icon,name,active = GetShapeshiftFormInfo(i);
|
local icon,name,active = GetShapeshiftFormInfo(i);
|
||||||
if active then
|
if active then
|
||||||
return i;
|
if icon then
|
||||||
|
local icon_lower = string.lower(icon)
|
||||||
|
-- Exclude non-standard/custom forms like Tree of Life from unshifting
|
||||||
|
if not string.find(icon_lower, "humanoidform") and not string.find(icon_lower, "treeoflife") and not string.find(icon_lower, "healingway") and not string.find(icon_lower, "stoneclawtotem") then
|
||||||
|
return i;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
return i;
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return nil;
|
return nil;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
+4
-9
@@ -54,10 +54,10 @@ HealBot_ConfigDefaults = {
|
|||||||
PanelAnchorX = -1,
|
PanelAnchorX = -1,
|
||||||
PanelAnchorY = -1,
|
PanelAnchorY = -1,
|
||||||
CDCBarColour = {
|
CDCBarColour = {
|
||||||
[HEALBOT_DISEASE_en] = { R = 0.1, G = 0.05, B = 0.2, },
|
[HEALBOT_DISEASE_en] = { R = 0.55, G = 0.19, B = 0.70, }, -- Bright Purple
|
||||||
[HEALBOT_MAGIC_en] = { R = 0.05, G = 0.05, B = 0.1, },
|
[HEALBOT_MAGIC_en] = { R = 0.01, G = 0.30, B = 0.90, }, -- Bright Blue
|
||||||
[HEALBOT_POISON_en] = { R = 0.05, G = 0.2, B = 0.1, },
|
[HEALBOT_POISON_en] = { R = 0.12, G = 0.46, B = 0.24, }, -- Bright Green
|
||||||
[HEALBOT_CURSE_en] = { R = 0.2, G = 0.05, B = 0.05, },
|
[HEALBOT_CURSE_en] = { R = 0.83, G = 0.01, B = 0.01, }, -- Bright Red
|
||||||
},
|
},
|
||||||
|
|
||||||
Debuff_Left = {
|
Debuff_Left = {
|
||||||
@@ -264,11 +264,6 @@ HealBot_ConfigDefaults = {
|
|||||||
|
|
||||||
HealBot_Config = {};
|
HealBot_Config = {};
|
||||||
|
|
||||||
--HealBot_EmergIncMelee = {};
|
|
||||||
--HealBot_EmergIncRange = {};
|
|
||||||
--HealBot_EmergIncHealers = {};
|
|
||||||
--HealBot_EmergIncCustom = {};
|
|
||||||
--HealBot_KeyCombo = {};
|
|
||||||
HealBot_HealsIn = {};
|
HealBot_HealsIn = {};
|
||||||
HealBot_Healers = {};
|
HealBot_Healers = {};
|
||||||
HealBot_UnitDebuff = {};
|
HealBot_UnitDebuff = {};
|
||||||
|
|||||||
+14
-12
@@ -36,22 +36,24 @@ function HealBot_Integrations_Toggle()
|
|||||||
HealBot_NampowerFrame:RegisterEvent("AURA_CAST_ON_OTHER")
|
HealBot_NampowerFrame:RegisterEvent("AURA_CAST_ON_OTHER")
|
||||||
HealBot_NampowerFrame:SetScript("OnEvent", function()
|
HealBot_NampowerFrame:SetScript("OnEvent", function()
|
||||||
if not HealBot_Integrations_Nampower_Active then return end
|
if not HealBot_Integrations_Nampower_Active then return end
|
||||||
local spellID, caster, target, _, _, _, _, duration = arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8
|
if event == "AURA_CAST_ON_SELF" or event == "AURA_CAST_ON_OTHER" then
|
||||||
if not caster or not target or duration <= 0 then return end
|
local spellID, caster, target, _, _, _, _, duration = arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8
|
||||||
|
if not caster or not target or duration <= 0 then return end
|
||||||
|
|
||||||
local spellName = GetSpellRecField(spellID, "name")
|
local spellName = GetSpellRecField(spellID, "name")
|
||||||
if not spellName then return end
|
if not spellName then return end
|
||||||
|
|
||||||
if not HealBot_Nampower_Auras[target] then
|
if not HealBot_Nampower_Auras[target] then
|
||||||
HealBot_Nampower_Auras[target] = {}
|
HealBot_Nampower_Auras[target] = {}
|
||||||
end
|
end
|
||||||
|
|
||||||
local expirationTime = GetTime() + (duration / 1000)
|
local expirationTime = GetTime() + (duration / 1000)
|
||||||
HealBot_Nampower_Auras[target][spellName] = expirationTime
|
HealBot_Nampower_Auras[target][spellName] = expirationTime
|
||||||
|
|
||||||
local unitID = HealBot_Model:GetUnitIDByName(target)
|
local unitID = HealBot_Model:GetUnitIDByName(target)
|
||||||
if unitID then
|
if unitID then
|
||||||
HealBot_OnEvent_UnitAura(nil, unitID)
|
HealBot_OnEvent_UnitAura(nil, unitID)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|||||||
+34
-10
@@ -1,6 +1,13 @@
|
|||||||
-- HealBot_Model.lua
|
-- HealBot_Model.lua
|
||||||
-- Centralized Data Store and Observer System for HealBotBlue
|
-- Centralized Data Store and Observer System for HealBotBlue
|
||||||
|
|
||||||
|
local pool_oldGUIDs = {}
|
||||||
|
local pool_newUnitForGUID = {}
|
||||||
|
local pool_stateSwaps = {}
|
||||||
|
local pool_iconSwaps = {}
|
||||||
|
local pool_missingBuffSwaps = {}
|
||||||
|
local pool_debuffSwaps = {}
|
||||||
|
|
||||||
-- Safe local wrappers to prevent native UIDropDownMenu concatenation crashes
|
-- Safe local wrappers to prevent native UIDropDownMenu concatenation crashes
|
||||||
-- when setting selected values on closed dropdowns during initialization.
|
-- when setting selected values on closed dropdowns during initialization.
|
||||||
function HealBot_UIDropDownMenu_SetSelectedID(frame, id, useValue)
|
function HealBot_UIDropDownMenu_SetSelectedID(frame, id, useValue)
|
||||||
@@ -180,14 +187,16 @@ end
|
|||||||
function HealBot_Model:PreserveStateByGUID()
|
function HealBot_Model:PreserveStateByGUID()
|
||||||
if not (HealBot_Integrations_SuperWoW_Active or HealBot_Integrations_ClassicAPI_Active) or not HealBot_GetUnitGUID then return end
|
if not (HealBot_Integrations_SuperWoW_Active or HealBot_Integrations_ClassicAPI_Active) or not HealBot_GetUnitGUID then return end
|
||||||
|
|
||||||
local oldGUIDs = {}
|
for k in pairs(pool_oldGUIDs) do pool_oldGUIDs[k] = nil end
|
||||||
|
local oldGUIDs = pool_oldGUIDs
|
||||||
for unit, guid in pairs(self.unitGUIDs) do
|
for unit, guid in pairs(self.unitGUIDs) do
|
||||||
if string.find(unit, "^party") or string.find(unit, "^raid") or unit == "player" or unit == "pet" then
|
if string.find(unit, "^party") or string.find(unit, "^raid") or unit == "player" or unit == "pet" then
|
||||||
oldGUIDs[unit] = guid
|
oldGUIDs[unit] = guid
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local newUnitForGUID = {}
|
for k in pairs(pool_newUnitForGUID) do pool_newUnitForGUID[k] = nil end
|
||||||
|
local newUnitForGUID = pool_newUnitForGUID
|
||||||
-- Scan the new roster
|
-- Scan the new roster
|
||||||
for _, unit in ipairs(self.partyMembers) do
|
for _, unit in ipairs(self.partyMembers) do
|
||||||
local guid = HealBot_GetUnitGUID(unit)
|
local guid = HealBot_GetUnitGUID(unit)
|
||||||
@@ -206,10 +215,14 @@ function HealBot_Model:PreserveStateByGUID()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local stateSwaps = {}
|
for k in pairs(pool_stateSwaps) do pool_stateSwaps[k] = nil end
|
||||||
local iconSwaps = {}
|
local stateSwaps = pool_stateSwaps
|
||||||
local missingBuffSwaps = {}
|
for k in pairs(pool_iconSwaps) do pool_iconSwaps[k] = nil end
|
||||||
local debuffSwaps = {}
|
local iconSwaps = pool_iconSwaps
|
||||||
|
for k in pairs(pool_missingBuffSwaps) do pool_missingBuffSwaps[k] = nil end
|
||||||
|
local missingBuffSwaps = pool_missingBuffSwaps
|
||||||
|
for k in pairs(pool_debuffSwaps) do pool_debuffSwaps[k] = nil end
|
||||||
|
local debuffSwaps = pool_debuffSwaps
|
||||||
|
|
||||||
for oldUnit, guid in pairs(oldGUIDs) do
|
for oldUnit, guid in pairs(oldGUIDs) do
|
||||||
local newUnit = newUnitForGUID[guid]
|
local newUnit = newUnitForGUID[guid]
|
||||||
@@ -231,11 +244,22 @@ function HealBot_Model:PreserveStateByGUID()
|
|||||||
|
|
||||||
for targetUnit, stateData in pairs(stateSwaps) do
|
for targetUnit, stateData in pairs(stateSwaps) do
|
||||||
-- Deep copy to prevent memory aliasing
|
-- Deep copy to prevent memory aliasing
|
||||||
self.units[targetUnit] = {}
|
if not self.units[targetUnit] then
|
||||||
for k, v in pairs(stateData) do
|
self.units[targetUnit] = { icons = {} }
|
||||||
self.units[targetUnit][k] = v
|
|
||||||
end
|
end
|
||||||
self.units[targetUnit].icons = {}
|
|
||||||
|
local targetIcons = self.units[targetUnit].icons
|
||||||
|
if not targetIcons then targetIcons = {} end
|
||||||
|
for k in pairs(targetIcons) do targetIcons[k] = nil end
|
||||||
|
|
||||||
|
for k in pairs(self.units[targetUnit]) do self.units[targetUnit][k] = nil end
|
||||||
|
|
||||||
|
for k, v in pairs(stateData) do
|
||||||
|
if k ~= "icons" then
|
||||||
|
self.units[targetUnit][k] = v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
self.units[targetUnit].icons = targetIcons
|
||||||
|
|
||||||
if HealBot_UnitIcons and iconSwaps[targetUnit] then
|
if HealBot_UnitIcons and iconSwaps[targetUnit] then
|
||||||
if not HealBot_UnitIcons[targetUnit] then HealBot_UnitIcons[targetUnit] = {} end
|
if not HealBot_UnitIcons[targetUnit] then HealBot_UnitIcons[targetUnit] = {} end
|
||||||
|
|||||||
+26
-4
@@ -14,6 +14,20 @@ HealBot_Options_EmergencyFilter_List = {
|
|||||||
HEALBOT_OPTIONS_MONITORCUSTOM,
|
HEALBOT_OPTIONS_MONITORCUSTOM,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HealBot_Options_CDCMonitor_List = {
|
||||||
|
HEALBOT_OPTIONS_MONITORNO,
|
||||||
|
HEALBOT_OPTIONS_MONITORALL,
|
||||||
|
HEALBOT_DRUID,
|
||||||
|
HEALBOT_HUNTER,
|
||||||
|
HEALBOT_MAGE,
|
||||||
|
HEALBOT_PALADIN,
|
||||||
|
HEALBOT_PRIEST,
|
||||||
|
HEALBOT_ROGUE,
|
||||||
|
HEALBOT_SHAMAN,
|
||||||
|
HEALBOT_WARLOCK,
|
||||||
|
HEALBOT_WARRIOR,
|
||||||
|
}
|
||||||
|
|
||||||
-- HealBot_Options_AddDebug: UI handler for AddDebug options panel.
|
-- HealBot_Options_AddDebug: UI handler for AddDebug options panel.
|
||||||
function HealBot_Options_AddDebug(msg)
|
function HealBot_Options_AddDebug(msg)
|
||||||
HealBot_AddDebug("Options: " .. msg);
|
HealBot_AddDebug("Options: " .. msg);
|
||||||
@@ -220,10 +234,18 @@ end
|
|||||||
-- HealBot_Options_Defaults_OnClick: UI handler for OnClick options panel.
|
-- HealBot_Options_Defaults_OnClick: UI handler for OnClick options panel.
|
||||||
function HealBot_Options_Defaults_OnClick(this)
|
function HealBot_Options_Defaults_OnClick(this)
|
||||||
HealBot_Options_CastNotify_OnClick(nil,0);
|
HealBot_Options_CastNotify_OnClick(nil,0);
|
||||||
-- HealBot_Config = HealBot_ConfigDefaults;
|
HealBot_Config = {}
|
||||||
table.foreach(HealBot_ConfigDefaults, function (key,val)
|
local function DeepCopy(src, dest)
|
||||||
HealBot_Config[key] = val;
|
for k, v in pairs(src) do
|
||||||
end);
|
if type(v) == "table" then
|
||||||
|
dest[k] = {}
|
||||||
|
DeepCopy(v, dest[k])
|
||||||
|
else
|
||||||
|
dest[k] = v
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
DeepCopy(HealBot_ConfigDefaults, HealBot_Config)
|
||||||
HealBot_Options_OnShow(HealBot_Options);
|
HealBot_Options_OnShow(HealBot_Options);
|
||||||
HealBot_RecalcSpells();
|
HealBot_RecalcSpells();
|
||||||
HealBot_Action_Reset();
|
HealBot_Action_Reset();
|
||||||
|
|||||||
+5
-23
@@ -85,7 +85,7 @@ function HealBot_Options_CDCMonitor_Reset()
|
|||||||
HealBot_CDCInc[HEALBOT_SHAMAN] = 0;
|
HealBot_CDCInc[HEALBOT_SHAMAN] = 0;
|
||||||
HealBot_CDCInc[HEALBOT_WARLOCK] = 0;
|
HealBot_CDCInc[HEALBOT_WARLOCK] = 0;
|
||||||
HealBot_CDCInc[HEALBOT_WARRIOR] = 0;
|
HealBot_CDCInc[HEALBOT_WARRIOR] = 0;
|
||||||
if HealBot_Config.CDCMonitor==2 then
|
if HealBot_Config.CDCMonitor==1 then
|
||||||
HealBot_CDCInc[HEALBOT_DRUID] = 1;
|
HealBot_CDCInc[HEALBOT_DRUID] = 1;
|
||||||
HealBot_CDCInc[HEALBOT_HUNTER] = 1;
|
HealBot_CDCInc[HEALBOT_HUNTER] = 1;
|
||||||
HealBot_CDCInc[HEALBOT_MAGE] = 1;
|
HealBot_CDCInc[HEALBOT_MAGE] = 1;
|
||||||
@@ -95,25 +95,7 @@ function HealBot_Options_CDCMonitor_Reset()
|
|||||||
HealBot_CDCInc[HEALBOT_SHAMAN] = 1;
|
HealBot_CDCInc[HEALBOT_SHAMAN] = 1;
|
||||||
HealBot_CDCInc[HEALBOT_WARLOCK] = 1;
|
HealBot_CDCInc[HEALBOT_WARLOCK] = 1;
|
||||||
HealBot_CDCInc[HEALBOT_WARRIOR] = 1;
|
HealBot_CDCInc[HEALBOT_WARRIOR] = 1;
|
||||||
elseif HealBot_Config.CDCMonitor==3 then
|
elseif HealBot_Config.CDCMonitor==2 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_DRUID] = HealBot_Config.EmergIncMelee[HEALBOT_DRUID];
|
||||||
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncMelee[HEALBOT_HUNTER];
|
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncMelee[HEALBOT_HUNTER];
|
||||||
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncMelee[HEALBOT_MAGE];
|
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncMelee[HEALBOT_MAGE];
|
||||||
@@ -123,7 +105,7 @@ function HealBot_Options_CDCMonitor_Reset()
|
|||||||
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncMelee[HEALBOT_SHAMAN];
|
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncMelee[HEALBOT_SHAMAN];
|
||||||
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncMelee[HEALBOT_WARLOCK];
|
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncMelee[HEALBOT_WARLOCK];
|
||||||
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncMelee[HEALBOT_WARRIOR];
|
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncMelee[HEALBOT_WARRIOR];
|
||||||
elseif HealBot_Config.CDCMonitor==13 then
|
elseif HealBot_Config.CDCMonitor==3 then
|
||||||
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncRange[HEALBOT_DRUID];
|
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncRange[HEALBOT_DRUID];
|
||||||
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncRange[HEALBOT_HUNTER];
|
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncRange[HEALBOT_HUNTER];
|
||||||
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncRange[HEALBOT_MAGE];
|
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncRange[HEALBOT_MAGE];
|
||||||
@@ -133,7 +115,7 @@ function HealBot_Options_CDCMonitor_Reset()
|
|||||||
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncRange[HEALBOT_SHAMAN];
|
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncRange[HEALBOT_SHAMAN];
|
||||||
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncRange[HEALBOT_WARLOCK];
|
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncRange[HEALBOT_WARLOCK];
|
||||||
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncRange[HEALBOT_WARRIOR];
|
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncRange[HEALBOT_WARRIOR];
|
||||||
elseif HealBot_Config.CDCMonitor==14 then
|
elseif HealBot_Config.CDCMonitor==4 then
|
||||||
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncHealers[HEALBOT_DRUID];
|
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncHealers[HEALBOT_DRUID];
|
||||||
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncHealers[HEALBOT_HUNTER];
|
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncHealers[HEALBOT_HUNTER];
|
||||||
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncHealers[HEALBOT_MAGE];
|
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncHealers[HEALBOT_MAGE];
|
||||||
@@ -143,7 +125,7 @@ function HealBot_Options_CDCMonitor_Reset()
|
|||||||
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncHealers[HEALBOT_SHAMAN];
|
HealBot_CDCInc[HEALBOT_SHAMAN] = HealBot_Config.EmergIncHealers[HEALBOT_SHAMAN];
|
||||||
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncHealers[HEALBOT_WARLOCK];
|
HealBot_CDCInc[HEALBOT_WARLOCK] = HealBot_Config.EmergIncHealers[HEALBOT_WARLOCK];
|
||||||
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncHealers[HEALBOT_WARRIOR];
|
HealBot_CDCInc[HEALBOT_WARRIOR] = HealBot_Config.EmergIncHealers[HEALBOT_WARRIOR];
|
||||||
elseif HealBot_Config.CDCMonitor==15 then
|
elseif HealBot_Config.CDCMonitor==5 then
|
||||||
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncCustom[HEALBOT_DRUID];
|
HealBot_CDCInc[HEALBOT_DRUID] = HealBot_Config.EmergIncCustom[HEALBOT_DRUID];
|
||||||
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncCustom[HEALBOT_HUNTER];
|
HealBot_CDCInc[HEALBOT_HUNTER] = HealBot_Config.EmergIncCustom[HEALBOT_HUNTER];
|
||||||
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncCustom[HEALBOT_MAGE];
|
HealBot_CDCInc[HEALBOT_MAGE] = HealBot_Config.EmergIncCustom[HEALBOT_MAGE];
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ function HealBot_Options_EFClass_OnClick(this)
|
|||||||
HealBot_Config.EmergIncCustom[HEALBOT_WARLOCK] = HealBot_Options_EFClassWarlock:GetChecked() or 0;
|
HealBot_Config.EmergIncCustom[HEALBOT_WARLOCK] = HealBot_Options_EFClassWarlock:GetChecked() or 0;
|
||||||
HealBot_Config.EmergIncCustom[HEALBOT_WARRIOR] = HealBot_Options_EFClassWarrior:GetChecked() or 0;
|
HealBot_Config.EmergIncCustom[HEALBOT_WARRIOR] = HealBot_Options_EFClassWarrior:GetChecked() or 0;
|
||||||
end
|
end
|
||||||
if HealBot_Config.EmergIncMonitor>10 then
|
if HealBot_Config.EmergIncMonitor > 1 then
|
||||||
HealBot_Action_PartyChanged();
|
HealBot_Action_PartyChanged();
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
+15
-11
@@ -29,23 +29,16 @@ end
|
|||||||
|
|
||||||
-- HealBot_HealthColor: Computes health bar RGBA based on debuffs and class.
|
-- HealBot_HealthColor: Computes health bar RGBA based on debuffs and class.
|
||||||
function HealBot_HealthColor(unit, hlth, maxhlth)
|
function HealBot_HealthColor(unit, hlth, maxhlth)
|
||||||
if HealBot_UnitDebuff[unit] then
|
local cached_debuff = HealBot_UnitDebuff[unit]
|
||||||
local debuff_type = HealBot_UnitDebuff[unit]
|
if cached_debuff then
|
||||||
local color = HealBot_Config.CDCBarColour[debuff_type]
|
local color = HealBot_Config.CDCBarColour[cached_debuff]
|
||||||
if color then
|
if color then
|
||||||
local dr = color.R
|
local dr = color.R
|
||||||
local dg = color.G
|
local dg = color.G
|
||||||
local db = color.B
|
local db = color.B
|
||||||
if HealBot_Config.btexture[HealBot_Config.Current_Skin] == 10 then
|
|
||||||
dr = dr * 4
|
|
||||||
dg = dg * 4
|
|
||||||
db = db * 4
|
|
||||||
if dr > 1 then dr = 1 end
|
|
||||||
if dg > 1 then dg = 1 end
|
|
||||||
if db > 1 then db = 1 end
|
|
||||||
end
|
|
||||||
return dr, dg, db, HealBot_Config.Barcola[HealBot_Config.Current_Skin];
|
return dr, dg, db, HealBot_Config.Barcola[HealBot_Config.Current_Skin];
|
||||||
end
|
end
|
||||||
|
return dr, dg, db, HealBot_Config.Barcola[HealBot_Config.Current_Skin];
|
||||||
end
|
end
|
||||||
|
|
||||||
local text = UnitName(unit);
|
local text = UnitName(unit);
|
||||||
@@ -273,6 +266,17 @@ function HealBot_Action_EnableButton(button)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local raidIcon = getglobal(button:GetName() .. "BarRaidIcon")
|
||||||
|
if raidIcon then
|
||||||
|
local index = GetRaidTargetIndex(unit)
|
||||||
|
if index then
|
||||||
|
SetRaidTargetIconTexture(raidIcon, index)
|
||||||
|
raidIcon:Show()
|
||||||
|
else
|
||||||
|
raidIcon:Hide()
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- HealBot_Action_EnableButtons: Internal utility: HealBot_Action_EnableButtons
|
-- HealBot_Action_EnableButtons: Internal utility: HealBot_Action_EnableButtons
|
||||||
|
|||||||
@@ -49,7 +49,13 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
|
|||||||
|
|
||||||
### Change Log
|
### Change Log
|
||||||
|
|
||||||
|
* **v1.7.1**
|
||||||
|
* **Bug Fix - Shapeshift Auto-Unshift** - Fixed an issue where the shapeshift spell queue would incorrectly pull druids out of Tree of Life form .
|
||||||
|
* **Cleanup** - Removed deprecated `UPDATE_SHAPESHIFT_FORM` event listeners and `HealBot_UpdateShapeshiftForm` function to save CPU cycles.
|
||||||
|
|
||||||
|
|
||||||
**v1.7.0**
|
**v1.7.0**
|
||||||
|
* **Feature - Raid Marks** - Added tracking and display of raid marks on unit frames.
|
||||||
* **External Addon Integrations** - Added a new 'Extras' tab in Options to optionally enable integrations with `UnitXP_SP3` (for ultra-precise 3D range and Line of Sight checks), `nampower` (for accurate real-time heal/buff tracking), `SuperWoW` (for robust GUID-based state tracking), and `ClassicAPI` (for native +Healing bonuses and fast 3D distance checks).
|
* **External Addon Integrations** - Added a new 'Extras' tab in Options to optionally enable integrations with `UnitXP_SP3` (for ultra-precise 3D range and Line of Sight checks), `nampower` (for accurate real-time heal/buff tracking), `SuperWoW` (for robust GUID-based state tracking), and `ClassicAPI` (for native +Healing bonuses and fast 3D distance checks).
|
||||||
* **UI Layout** - Widened the Options UI and neatly centered elements to accommodate the new integrations tab.
|
* **UI Layout** - Widened the Options UI and neatly centered elements to accommodate the new integrations tab.
|
||||||
* **Bug Fix - Rendering Crash** - Fixed a critical UI issue where unrecognized debuff types would crash the rendering loop, causing unit frames to disappear.
|
* **Bug Fix - Rendering Crash** - Fixed a critical UI issue where unrecognized debuff types would crash the rendering loop, causing unit frames to disappear.
|
||||||
@@ -61,6 +67,8 @@ Default installation path: `C:\Program Files\World of Warcraft\Interface\AddOns\
|
|||||||
* **Bug Fix - CDC Filter** - Fixed an issue where the CDC module displayed all debuffs instead of filtering for dispellable ones, restoring proper health bar coloring.
|
* **Bug Fix - CDC Filter** - Fixed an issue where the CDC module displayed all debuffs instead of filtering for dispellable ones, restoring proper health bar coloring.
|
||||||
* **Bug Fix - UnitClass Localization** - Added a fallback mapping for the Vanilla `UnitClass` API to always return the uppercase English class string. This fixes a bug where default options (like Debuff tracking) failed to initialize.
|
* **Bug Fix - UnitClass Localization** - Added a fallback mapping for the Vanilla `UnitClass` API to always return the uppercase English class string. This fixes a bug where default options (like Debuff tracking) failed to initialize.
|
||||||
* **Feature - Shapeshift Spell Queue** - Built a native spell queue system for Druid auto-unshifting. Bypasses the "Cannot cast while shapeshifted" error and server lag when AutoUnshift is enabled, firing the heal seamlessly the exact millisecond the form is dropped. Now completely unified to use the standard casting API for maximum reliability across all client setups.
|
* **Feature - Shapeshift Spell Queue** - Built a native spell queue system for Druid auto-unshifting. Bypasses the "Cannot cast while shapeshifted" error and server lag when AutoUnshift is enabled, firing the heal seamlessly the exact millisecond the form is dropped. Now completely unified to use the standard casting API for maximum reliability across all client setups.
|
||||||
|
* **Bug Fix - CDC Config List** - Fixed an uninitialized dropdown list array that prevented the CDC class monitor configuration from saving correctly.
|
||||||
|
* **Bug Fix - Color Picker Accuracy** - Removed an undocumented multiplier hack on default textures that was artificially brightening debuff bar colors and overriding the user's selected colors from the color picker.
|
||||||
|
|
||||||
**v1.6.5**
|
**v1.6.5**
|
||||||
* **Performance Update - Mana Tracking** - Added a fast-path redraw pipeline for unit power changes. This optimization prevents full frame redraws when players naturally regenerate or consume mana, resolving severe FPS drops in 40-man raids while tracking mana.
|
* **Performance Update - Mana Tracking** - Added a fast-path redraw pipeline for unit power changes. This optimization prevents full frame redraws when players naturally regenerate or consume mana, resolving severe FPS drops in 40-man raids while tracking mana.
|
||||||
|
|||||||
Reference in New Issue
Block a user