local Recount = _G.Recount local revision = tonumber(string.sub("$Revision: 1309 $", 12, -3)) if Recount.Version < revision then Recount.Version = revision end local type = type local GetNumPartyMembers = GetNumPartyMembers or GetNumSubgroupMembers local GetNumRaidMembers = GetNumRaidMembers or GetNumGroupMembers local IsInRaid = IsInRaid local UnitAffectingCombat = UnitAffectingCombat local UnitExists = UnitExists local UnitGUID = UnitGUID local UnitName = UnitName function Recount:CheckPartyCombatWithPets() if IsInRaid() and GetNumRaidMembers() > 0 then for i = 1, GetNumRaidMembers() do if UnitAffectingCombat("raid"..i) then return true end if UnitAffectingCombat("raidpet"..i) then return true end end end if not IsInRaid() and GetNumPartyMembers() > 0 then for i = 1, GetNumPartyMembers() do if UnitAffectingCombat("party"..i) then return true end if UnitAffectingCombat("partypet"..i) then return true end end end if UnitAffectingCombat("player") then return true end return false end function Recount:GetUnitIDFromName(name) if type(name) ~= "string" then return nil end -- Bandaid for raid frame issues local realm = name:match("-(.-)") --[[if realm then name = name:match("(.-)-") -- Strip the realm part for this function end]] -- Resike: This is bad for some pet type detection if UnitExists(name) then -- Elsia: Speed boost, yay return name else local lname = name:lower() if lname:sub(1, 3) == "pet" or lname:sub(1, 4) == "raid" or lname:sub(1, 5) == "party" or lname:sub(1, 6) == "player" or lname:sub(1, 6) == "target" then return Recount:GetPetPrefixUnit(name, realm) end return nil end end function Recount:GetPetPrefixUnit(name, realm) if Recount.PlayerName == name and not realm then return "player" end if IsInRaid() and GetNumRaidMembers() > 0 then for i = 1, GetNumRaidMembers() do local unitname, unitrealm = UnitName("raid"..i) if unitname == name and unitrealm == realm then return "raid"..i end end elseif GetNumPartyMembers() > 0 then for i = 1, GetNumPartyMembers() do local unitname, unitrealm = UnitName("party"..i) if unitname == name and unitrealm == realm then return "party"..i end end end return nil end function Recount:FindTargetedUnit(name) if UnitExists(name) then return name end for i = 1, GetNumRaidMembers() do if UnitName("raid"..i) and name == UnitName("raid"..i.."target") then return "raid"..i.."target" elseif UnitName("raidpet"..i.."target") and name == UnitName("raidpet"..i.."target") then return "raidpet"..i.."target" end end for i = 1, GetNumPartyMembers() do if UnitName("party"..i) and name == UnitName("party"..i.."target") then return "party"..i.."target" elseif UnitName("partypet"..i) and name == UnitName("partypet"..i.."target") then return "partypet"..i.."target" end end if name == UnitName("playertarget") then return "playertarget" elseif name == UnitName("focus") then return "focus" end end function Recount:FindOwnerPetFromGUID(petName, petGUID) local ownerName local ownerGUID local ownerRealm for i = 1, GetNumRaidMembers() do if petGUID == UnitGUID("raidpet"..i) then ownerName, ownerRealm = UnitName("raid"..i) if ownerRealm then ownerName = ownerName.."-"..ownerRealm end ownerGUID = UnitGUID("raid"..i) return ownerName, ownerGUID end end for i = 1, GetNumPartyMembers() do if petGUID == UnitGUID("partypet"..i) then ownerName, ownerRealm = UnitName("party"..i) if ownerRealm then ownerName = ownerName.."-"..ownerRealm end ownerGUID = UnitGUID("party"..i) return ownerName, ownerGUID end end if petGUID == UnitGUID("pet") then ownerName = UnitName("player") ownerGUID = UnitGUID("player") return ownerName, ownerGUID end return nil, nil end