--[[ Written by: Simca@Malfurion-US Thanks to Hugh@Burning-Blade, a co-author for the first few versions of the AddOn. Special thanks to Ro for letting me bounce solutions off him regarding tooltip conflicts. ]]-- --GLOBALS: BPBID_Options -- Get folder path and set addon namespace local addonname, internal = ... -- The only localized functions needed here local PB_GetName = _G.C_PetBattles.GetName local PJ_GetPetInfoByPetID = C_PetJournal.GetPetInfoByPetID local PJ_GetPetInfoBySpeciesID = C_PetJournal.GetPetInfoBySpeciesID local PJ_GetPetStats = C_PetJournal.GetPetStats local ceil = math.ceil -- Initalize AddOn locals used in this section local BattleNameText = "" local BPTNameText = "" -- This is the new Battle Pet BreedID "Breed Tooltip" creation and setup function function BPBID_SetBreedTooltip(parent, speciesID, tblBreedID, rareness, tooltipDistance) -- Impossible checks (if missing parent, speciesID, or "rareness") local rarity if (not parent) or (not speciesID) then return end if (rareness) then rarity = rareness else rarity = 4 end -- Arrays are now initialized if they weren't before if (not BPBID_Arrays.BasePetStats) then BPBID_Arrays.InitializeArrays() end -- Set local reference to my tooltip or create it if it doesn't exist -- It inherits TooltipBorderedFrameTemplate AND GameTooltipTemplate to match Blizzard's "psuedo-tooltips" yet still make it easy to use local breedtip local breedtiptext if (parent == FloatingBattlePetTooltip) then breedtiptext = "BPBID_BreedTooltip2" else breedtiptext = "BPBID_BreedTooltip" end breedtip = _G[breedtiptext] or CreateFrame("GameTooltip", breedtiptext, nil, "GameTooltipTemplate") -- Check for existence of LibExtraTip local extratip = false if (internal.LibExtraTip) and (internal.LibExtraTip.GetExtraTip) then extratip = internal.LibExtraTip:GetExtraTip(parent) -- See if it has hooked our parent if (extratip) and (extratip:IsVisible()) then parent = extratip end end -- Set positioning/parenting/ownership of Breed Tooltip breedtip:SetParent(parent) breedtip:SetOwner(parent, "ANCHOR_NONE") breedtip:SetPoint("TOPLEFT", parent, "BOTTOMLEFT", 0, tooltipDistance or 2) breedtip:SetPoint("TOPRIGHT", parent, "BOTTOMRIGHT", 0, tooltipDistance or 2) -- Workaround for TradeSkillMaster's tooltip -- Note that setting parent breaks floating tooltip and setting two corner points breaks borders on TSM tooltip -- Setting parent is also required for BattlePetTooltip because TSMExtraTip constantly reanchors itself on its parent if (_G.IsAddOnLoaded("TradeSkillMaster")) then for i = 1, 10 do local t = _G["TSMExtraTip" .. i] if t then -- It probably never matters which point we check to learn the relative frame -- This is because TSM tooltips should only be relative to one frame each -- If this changes in the future or this assumption is wrong, we'll have to iterate points here local _, relativeFrame = t:GetPoint() if (relativeFrame == BattlePetTooltip) then t:ClearAllPoints() t:SetParent(BPBID_BreedTooltip) t:SetPoint("TOP", BPBID_BreedTooltip, "BOTTOM", 0, -1) elseif (t:GetParent() == FloatingBattlePetTooltip) then t:ClearAllPoints() t:SetPoint("TOP", BPBID_BreedTooltip2, "BOTTOM", 0, -1) end end end end -- Set line for "Current pet's breed" if (BPBID_Options.Breedtip.Current) and (tblBreedID) then local current = "\124cFFD4A017Current Breed:\124r " local numBreeds = #tblBreedID for i = 1, numBreeds do if (i == 1) then current = current .. internal.RetrieveBreedName(tblBreedID[i]) elseif (i == 2) and (i == numBreeds) then current = current .. " or " .. internal.RetrieveBreedName(tblBreedID[i]) elseif (i == numBreeds) then current = current .. ", or " .. internal.RetrieveBreedName(tblBreedID[i]) else current = current .. ", " .. internal.RetrieveBreedName(tblBreedID[i]) end end breedtip:AddLine(current, 1, 1, 1, 1) end -- Set line for "Current pet's possible breeds" if (BPBID_Options.Breedtip.Possible) then local possible = "\124cFFD4A017Possible Breed" if (speciesID) and (BPBID_Arrays.BreedsPerSpecies[speciesID]) then local numBreeds = #BPBID_Arrays.BreedsPerSpecies[speciesID] if numBreeds == internal.MAX_BREEDS then possible = possible .. "s:\124r All" else for i = 1, numBreeds do if (numBreeds == 1) then possible = possible .. ":\124r " .. internal.RetrieveBreedName(BPBID_Arrays.BreedsPerSpecies[speciesID][i]) elseif (i == 1) then possible = possible .. "s:\124r " .. internal.RetrieveBreedName(BPBID_Arrays.BreedsPerSpecies[speciesID][i]) elseif (i == 2) and (i == numBreeds) then possible = possible .. " and " .. internal.RetrieveBreedName(BPBID_Arrays.BreedsPerSpecies[speciesID][i]) elseif (i == numBreeds) then possible = possible .. ", and " .. internal.RetrieveBreedName(BPBID_Arrays.BreedsPerSpecies[speciesID][i]) else possible = possible .. ", " .. internal.RetrieveBreedName(BPBID_Arrays.BreedsPerSpecies[speciesID][i]) end end end else possible = possible .. "s:\124r Unknown" end breedtip:AddLine(possible, 1, 1, 1, 1) end -- Have to have BasePetStats from here on out if (BPBID_Arrays.BasePetStats[speciesID]) then -- Set line for "Pet species' base stats" if (BPBID_Options.Breedtip.SpeciesBase) then local speciesbase = "\124cFFD4A017Base Stats:\124r " .. BPBID_Arrays.BasePetStats[speciesID][1] .. "/" .. BPBID_Arrays.BasePetStats[speciesID][2] .. "/" .. BPBID_Arrays.BasePetStats[speciesID][3] breedtip:AddLine(speciesbase, 1, 1, 1, 1) end local extrabreeds -- Check duplicates (have to have BreedsPerSpecies and tblBreedID for this) if (BPBID_Arrays.BreedsPerSpecies[speciesID]) and (tblBreedID) then extrabreeds = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1} -- "inspection" time! if the breed is not found in the array, it doesn't get passed on to extrabreeds and is effectively discarded for q = 1, #tblBreedID do for i = 1, #BPBID_Arrays.BreedsPerSpecies[speciesID] do local j = BPBID_Arrays.BreedsPerSpecies[speciesID][i] if (tblBreedID[q] == j) then extrabreeds[j - 2] = false end -- If the breed is found in both tables, flag it as false if (extrabreeds[j - 2]) then extrabreeds[j - 2] = j end end end end -- Set line for "Current breed's base stats (level 1 Poor)" (have to have tblBreedID for this) if (BPBID_Options.Breedtip.CurrentStats) and (tblBreedID) then for i = 1, #tblBreedID do local currentbreed = tblBreedID[i] local currentstats = "\124cFFD4A017Breed " .. internal.RetrieveBreedName(currentbreed) .. "*:\124r " .. (BPBID_Arrays.BasePetStats[speciesID][1] + BPBID_Arrays.BreedStats[currentbreed][1]) .. "/" .. (BPBID_Arrays.BasePetStats[speciesID][2] + BPBID_Arrays.BreedStats[currentbreed][2]) .. "/" .. (BPBID_Arrays.BasePetStats[speciesID][3] + BPBID_Arrays.BreedStats[currentbreed][3]) breedtip:AddLine(currentstats, 1, 1, 1, 1) end end -- Set line for "All breeds' base stats (level 1 Poor)" (have to have BreedsPerSpecies for this) if (BPBID_Options.Breedtip.AllStats) and (BPBID_Arrays.BreedsPerSpecies[speciesID]) then if (not BPBID_Options.Breedtip.CurrentStats) or (not extrabreeds) then for i = 1, #BPBID_Arrays.BreedsPerSpecies[speciesID] do local currentbreed = BPBID_Arrays.BreedsPerSpecies[speciesID][i] local allstatsp1 = "\124cFFD4A017Breed " .. internal.RetrieveBreedName(currentbreed) local allstatsp2 = ":\124r " .. (BPBID_Arrays.BasePetStats[speciesID][1] + BPBID_Arrays.BreedStats[currentbreed][1]) .. "/" .. (BPBID_Arrays.BasePetStats[speciesID][2] + BPBID_Arrays.BreedStats[currentbreed][2]) .. "/" .. (BPBID_Arrays.BasePetStats[speciesID][3] + BPBID_Arrays.BreedStats[currentbreed][3]) local allstats -- Will be defined by the if statement below to see the asterisk needs to be added if (not extrabreeds) or ((extrabreeds[currentbreed - 2]) and (extrabreeds[currentbreed - 2] > 2)) then allstats = allstatsp1 .. allstatsp2 else allstats = allstatsp1 .. "*" .. allstatsp2 end breedtip:AddLine(allstats, 1, 1, 1, 1) end else for i = 1, 10 do if (extrabreeds[i]) and (extrabreeds[i] > 2) then local currentbreed = i + 2 local allstats = "\124cFFD4A017Breed " .. internal.RetrieveBreedName(currentbreed) .. ":\124r " .. (BPBID_Arrays.BasePetStats[speciesID][1] + BPBID_Arrays.BreedStats[currentbreed][1]) .. "/" .. (BPBID_Arrays.BasePetStats[speciesID][2] + BPBID_Arrays.BreedStats[currentbreed][2]) .. "/" .. (BPBID_Arrays.BasePetStats[speciesID][3] + BPBID_Arrays.BreedStats[currentbreed][3]) breedtip:AddLine(allstats, 1, 1, 1, 1) end end end end -- Set line for "Current breed's stats at level 25" (have to have tblBreedID for this) if (BPBID_Options.Breedtip.CurrentStats25) and (tblBreedID) then for i = 1, #tblBreedID do local currentbreed = tblBreedID[i] local hex = "\124cFF0070DD" -- Always use rare color by default local quality = 4 -- Always use rare pet quality by default -- Unless the user specifies they want the real color OR the pet is epic/legendary quality if (not BPBID_Options.Breedtip.AllStats25Rare) or (rarity > 4) then hex = ITEM_QUALITY_COLORS[rarity - 1].hex quality = rarity end local currentstats25 = hex .. internal.RetrieveBreedName(currentbreed) .. "* at 25:\124r " .. ceil((BPBID_Arrays.BasePetStats[speciesID][1] + BPBID_Arrays.BreedStats[currentbreed][1]) * 25 * ((BPBID_Arrays.RealRarityValues[quality] - 0.5) * 2 + 1) * 5 + 100 - 0.5) .. "/" .. ceil((BPBID_Arrays.BasePetStats[speciesID][2] + BPBID_Arrays.BreedStats[currentbreed][2]) * 25 * ((BPBID_Arrays.RealRarityValues[quality] - 0.5) * 2 + 1) - 0.5) .. "/" .. ceil((BPBID_Arrays.BasePetStats[speciesID][3] + BPBID_Arrays.BreedStats[currentbreed][3]) * 25 * ((BPBID_Arrays.RealRarityValues[quality] - 0.5) * 2 + 1) - 0.5) breedtip:AddLine(currentstats25, 1, 1, 1, 1) end end -- Set line for "All breeds' stats at level 25" (have to have BreedsPerSpecies for this) if (BPBID_Options.Breedtip.AllStats25) and (BPBID_Arrays.BreedsPerSpecies[speciesID]) then local hex = "\124cFF0070DD" -- Always use rare color by default local quality = 4 -- Always use rare pet quality by default -- Unless the user specifies they want the real color OR the pet is epic/legendary quality if (not BPBID_Options.Breedtip.AllStats25Rare) or (rarity > 4) then hex = ITEM_QUALITY_COLORS[rarity - 1].hex quality = rarity end -- Choose loop (whether I have to show ALL breeds including the one I am looking at or just the other breeds besides the one I'm looking at) if ((rarity == 4) and (BPBID_Options.Breedtip.CurrentStats25Rare ~= BPBID_Options.Breedtip.AllStats25Rare)) or (not BPBID_Options.Breedtip.CurrentStats25) or (not extrabreeds) then for i = 1, #BPBID_Arrays.BreedsPerSpecies[speciesID] do local currentbreed = BPBID_Arrays.BreedsPerSpecies[speciesID][i] local allstats25p1 = hex .. internal.RetrieveBreedName(currentbreed) local allstats25p2 = " at 25:\124r " .. ceil((BPBID_Arrays.BasePetStats[speciesID][1] + BPBID_Arrays.BreedStats[currentbreed][1]) * 25 * ((BPBID_Arrays.RealRarityValues[quality] - 0.5) * 2 + 1) * 5 + 100 - 0.5) .. "/" .. ceil((BPBID_Arrays.BasePetStats[speciesID][2] + BPBID_Arrays.BreedStats[currentbreed][2]) * 25 * ((BPBID_Arrays.RealRarityValues[quality] - 0.5) * 2 + 1) - 0.5) .. "/" .. ceil((BPBID_Arrays.BasePetStats[speciesID][3] + BPBID_Arrays.BreedStats[currentbreed][3]) * 25 * ((BPBID_Arrays.RealRarityValues[quality] - 0.5) * 2 + 1) - 0.5) local allstats25 -- Will be defined by the if statement below to see the asterisk needs to be added if (not extrabreeds) or ((extrabreeds[currentbreed - 2]) and (extrabreeds[currentbreed - 2] > 2)) then allstats25 = allstats25p1 .. allstats25p2 else allstats25 = allstats25p1 .. "*" .. allstats25p2 end breedtip:AddLine(allstats25, 1, 1, 1, 1) end else for i = 1, 10 do if (extrabreeds[i]) and (extrabreeds[i] > 2) then local currentbreed = i + 2 local allstats25 = hex .. internal.RetrieveBreedName(currentbreed) .. " at 25:\124r " .. ceil((BPBID_Arrays.BasePetStats[speciesID][1] + BPBID_Arrays.BreedStats[currentbreed][1]) * 25 * ((BPBID_Arrays.RealRarityValues[quality] - 0.5) * 2 + 1) * 5 + 100 - 0.5) .. "/" .. ceil((BPBID_Arrays.BasePetStats[speciesID][2] + BPBID_Arrays.BreedStats[currentbreed][2]) * 25 * ((BPBID_Arrays.RealRarityValues[quality] - 0.5) * 2 + 1) - 0.5) .. "/" .. ceil((BPBID_Arrays.BasePetStats[speciesID][3] + BPBID_Arrays.BreedStats[currentbreed][3]) * 25 * ((BPBID_Arrays.RealRarityValues[quality] - 0.5) * 2 + 1) - 0.5) breedtip:AddLine(allstats25, 1, 1, 1, 1) end end end end end -- Fix wordwrapping on smaller tooltips if _G[breedtiptext .. "TextLeft1"] then _G[breedtiptext .. "TextLeft1"]:CanNonSpaceWrap(true) end -- Fix fonts to all match (if multiple lines exist, which they should 99.9% of the time) if _G[breedtiptext .. "TextLeft2"] then -- Get fonts from line 1 local fontpath, fontheight, fontflags = _G[breedtiptext .. "TextLeft1"]:GetFont() -- Set iterator at line 2 to start local iterline = 2 -- Match all fonts to line 1 while _G[breedtiptext .. "TextLeft" .. iterline] do _G[breedtiptext .. "TextLeft" .. iterline]:SetFont(fontpath, fontheight, fontflags) _G[breedtiptext .. "TextLeft" .. iterline]:CanNonSpaceWrap(true) iterline = iterline + 1 end end -- Resize height automatically when reshown breedtip:Show() end -- Display breed, quality if necessary, and breed tooltips on pet frames/tooltips in Pet Battles local function BPBID_Hook_BattleUpdate(self) if not self.petOwner or not self.petIndex or not self.Name then return end -- Cache all pets if it is the start of a battle if (internal.cacheTime == true) then internal.CacheAllPets() internal.cacheTime = false end -- Check if it is a tooltip local tooltip = (self:GetName() == "PetBattlePrimaryUnitTooltip") -- Calculate offset local offset = 0 if (self.petOwner == 2) then offset = 3 end -- Retrieve breed local breed = internal.RetrieveBreedName(internal.breedCache[self.petIndex + offset]) -- Get pet's name local name = PB_GetName(self.petOwner, self.petIndex) if not tooltip then -- Set the name header if the user wants if (name) and (BPBID_Options.Names.PrimaryBattle) then -- Set standard text or use hex coloring based on font fix option if (BPBID_Options.BattleFontFix) then local _, _, _, hex = GetItemQualityColor(internal.rarityCache[self.petIndex + offset] - 1) self.Name:SetText("|c"..hex..name.." ("..breed..")".."|r") else self.Name:SetText(name.." ("..breed..")") end end else -- Set the name header if the user wants if (name) and (BPBID_Options.Names.BattleTooltip) then -- Set standard text or use hex coloring based on font fix option if (not BPBID_Options.BattleFontFix) then local _, _, _, hex = GetItemQualityColor(internal.rarityCache[self.petIndex + offset] - 1) self.Name:SetText("|c"..hex..name.." ("..breed..")".."|r") else self.Name:SetText(name.." ("..breed..")") end end -- If this not the same tooltip as before if (BattleNameText ~= self.Name:GetText()) then -- Downside font if the name/breed gets chopped off if self.Name:IsTruncated() then -- Retrieve font elements local fontName, fontHeight, fontFlags = self.Name:GetFont() -- Manually set height to perserve placing of other elements self.Name:SetHeight(self.Name:GetHeight()) -- Store font in addon namespace for later if not internal.BattleFontSize then internal.BattleFontSize = { fontName, fontHeight, fontFlags } end -- Decrease the font size by 1 until it fits while self.Name:IsTruncated() do fontHeight = fontHeight - 1 self.Name:SetFont(fontName, fontHeight, fontFlags) end elseif internal.BattleFontSize then -- Reset font size to original if not truncated and original font size known self.Name:SetFont(internal.BattleFontSize[1], internal.BattleFontSize[2], internal.BattleFontSize[3]) end end -- Set the name text variable to match the real name text now to prepare for the next check BattleNameText = self.Name:GetText() -- Send to tooltip if (BPBID_Options.Tooltips.Enabled) and (BPBID_Options.Tooltips.BattleTooltip) then BPBID_SetBreedTooltip(PetBattlePrimaryUnitTooltip, internal.speciesCache[self.petIndex + offset], internal.resultsCache[self.petIndex + offset], internal.rarityCache[self.petIndex + offset]) end end end -- Display breed, quality if necessary, and breed tooltips on item-based pet tooltips local function BPBID_Hook_BPTShow(speciesID, level, rarity, maxHealth, power, speed) -- Impossible checks for safety reasons if (not BattlePetTooltip.Name) or (not speciesID) or (not level) or (not rarity) or (not maxHealth) or (not power) or (not speed) then return end -- Fix rarity to match our system and calculate breedID and breedname rarity = rarity + 1 local breedNum, quality, resultslist = internal.CalculateBreedID(speciesID, rarity, level, maxHealth, power, speed, false, false) -- Add the breed to the tooltip's name text if (BPBID_Options.Names.BPT) then local breed = internal.RetrieveBreedName(breedNum) -- BattlePetTooltip does not allow customnames for now, so we can just get this ourself (more reliable) local currentText = BattlePetTooltip.Name:GetText() -- Test if we've already written to the tooltip if not strfind(currentText, " (" .. breed .. ")") then -- Append breed to tooltip BattlePetTooltip.Name:SetText(currentText .. " (" .. breed .. ")") -- If this not the same tooltip as before if (BPTNameText ~= BattlePetTooltip.Name:GetText()) then -- Downside font if the name/breed gets chopped off if BattlePetTooltip.Name:IsTruncated() then -- Retrieve font elements local fontName, fontHeight, fontFlags = BattlePetTooltip.Name:GetFont() -- Manually set height to perserve placing of other elements BattlePetTooltip.Name:SetHeight(BattlePetTooltip.Name:GetHeight()) -- Store font in addon namespace for later if not internal.BPTFontSize then internal.BPTFontSize = { fontName, fontHeight, fontFlags } end -- Decrease the font size by 1 until it fits while BattlePetTooltip.Name:IsTruncated() do fontHeight = fontHeight - 1 BattlePetTooltip.Name:SetFont(fontName, fontHeight, fontFlags) end elseif (internal.BPTFontSize) then -- Reset font size to original if not truncated AND original font size known BattlePetTooltip.Name:SetFont(internal.BPTFontSize[1], internal.BPTFontSize[2], internal.BPTFontSize[3]) end end -- Set the name text variable to match the real name text now to prepare for the next check BPTNameText = BattlePetTooltip.Name:GetText() end end -- Set up the breed tooltip if (BPBID_Options.Tooltips.Enabled) and (BPBID_Options.Tooltips.BPT) then BPBID_SetBreedTooltip(BattlePetTooltip, speciesID, resultslist, quality) end end -- Display breed, quality if necessary, and breed tooltips on pet tooltips from chat links local function BPBID_Hook_FBPTShow(speciesID, level, rarity, maxHealth, power, speed, name) -- Impossible checks for safety reasons if (not FloatingBattlePetTooltip.Name) or (not speciesID) or (not level) or (not rarity) or (not maxHealth) or (not power) or (not speed) then return end -- Fix rarity to match our system and calculate breedID and breedname rarity = rarity + 1 local breedNum, quality, resultslist = internal.CalculateBreedID(speciesID, rarity, level, maxHealth, power, speed, false, false) -- Avoid strange quality errors (investigate further?) if (not quality) then return end -- Add the breed to the tooltip's name text if (BPBID_Options.Names.FBPT) then local breed = internal.RetrieveBreedName(breedNum) -- Account for possibility of not having the name passed to us local realname if (not name) then realname = PJ_GetPetInfoBySpeciesID(speciesID) else realname = name end -- Append breed to tooltip FloatingBattlePetTooltip.Name:SetText(realname.." ("..breed..")") -- Could potentially try to avoid collisons better here but it will be hard because these aren't even really GameTooltips -- Resize all relevant parts of tooltip to avoid cutoff breeds/names (since Blizzard made these static-sized!) -- Use alternative method (Simca has this stored) if this doesn't work long-term local stringwide = FloatingBattlePetTooltip.Name:GetStringWidth() + 14 if stringwide < 238 then stringwide = 238 end FloatingBattlePetTooltip:SetWidth(stringwide + 22) FloatingBattlePetTooltip.Name:SetWidth(stringwide) FloatingBattlePetTooltip.BattlePet:SetWidth(stringwide) FloatingBattlePetTooltip.PetType:SetPoint("TOPRIGHT", FloatingBattlePetTooltip.Name, "BOTTOMRIGHT", 0, -2) FloatingBattlePetTooltip.Level:SetWidth(stringwide) FloatingBattlePetTooltip.Delimiter:SetWidth(stringwide + 13) FloatingBattlePetTooltip.JournalClick:SetWidth(stringwide) end -- Set up the breed tooltip if (BPBID_Options.Tooltips.Enabled) and (BPBID_Options.Tooltips.FBPT) then if petbm and petbm.TooltipHook and petbm.TooltipHook.tooltipFrame and petbm.TooltipHook.tooltipFrame.text then BPBID_SetBreedTooltip(FloatingBattlePetTooltip, speciesID, resultslist, quality, 0 - (petbm.TooltipHook.tooltipFrame.text:GetHeight() + 6)) else BPBID_SetBreedTooltip(FloatingBattlePetTooltip, speciesID, resultslist, quality) end end end -- Display breed, quality if necessary, and breed tooltips on Pet Journal tooltips function internal.Hook_PJTEnter(self, motion) -- Impossible check for safety reasons if (not GameTooltip:IsVisible()) then return end if (PetJournalPetCard.petID) then -- Get data from PetID (which can get from the current PetCard since we know the current PetCard has to be responsible for the tooltip too) local speciesID, _, level = PJ_GetPetInfoByPetID(PetJournalPetCard.petID) local _, maxHealth, power, speed, rarity = PJ_GetPetStats(PetJournalPetCard.petID) -- Calculate breedID and breedname local breedNum, quality, resultslist = internal.CalculateBreedID(speciesID, rarity, level, maxHealth, power, speed, false, false) -- If fields become nil due to everything being filtered, show the special runthrough tooltip and escape from the function if not quality then BPBID_SetBreedTooltip(GameTooltip, PetJournalPetCard.speciesID, false, false) return end -- Add the breed to the tooltip's name text if (BPBID_Options.Names.PJT) then local breed = internal.RetrieveBreedName(breedNum) -- Write breed to tooltip GameTooltipTextLeft1:SetText(GameTooltipTextLeft1:GetText().." ("..breed..")") -- Resize to avoid cutting off breed GameTooltip:Show() end -- Color tooltip header if (BPBID_Options.Names.PJTRarity) then GameTooltipTextLeft1:SetTextColor(ITEM_QUALITY_COLORS[quality - 1].r, ITEM_QUALITY_COLORS[quality - 1].g, ITEM_QUALITY_COLORS[quality - 1].b) end -- Set up the breed tooltip if (BPBID_Options.Tooltips.Enabled) and (BPBID_Options.Tooltips.PJT) then BPBID_SetBreedTooltip(GameTooltip, speciesID, resultslist, quality) end elseif (PetJournalPetCard.speciesID) and (BPBID_Options.Tooltips.Enabled) and (BPBID_Options.Tooltips.PJT) then -- Set up the breed tooltip for a special runthrough (no known breed) BPBID_SetBreedTooltip(GameTooltip, PetJournalPetCard.speciesID, false, false) end end function internal.Hook_PJTLeave(self, motion) -- Uncolor tooltip header if (BPBID_Options.Names.PJTRarity) then GameTooltipTextLeft1:SetTextColor(1, 1, 1) end end -- Hook for ArkInventory compability, following the example of BattlePetTooltip function internal.Hook_ArkInventory(tooltip, h, i) -- If the user has chosen not to let ArkInventory handle Battle Pets then we won't need to intervene if ((tooltip ~= GameTooltip) and (tooltip ~= ItemRefTooltip)) or (not ArkInventory or not ArkInventory.db or not ArkInventory.db.option or not ArkInventory.db.option.tooltip or not ArkInventory.db.option.tooltip.battlepet or not ArkInventory.db.option.tooltip.battlepet.enable) then return end -- Decode string local class, speciesID, level, rarity, maxHealth, power, speed = unpack( ArkInventory.ObjectStringDecode( h ) ) -- Escape if not a battlepet link if class ~= "battlepet" then return end -- Impossible checks for safety reasons if (not speciesID) or (not level) or (not rarity) or (not maxHealth) or (not power) or (not speed) then return end -- Change rarity to match our system and calculate breedID and breedname rarity = rarity + 1 local breedNum, quality, resultslist = internal.CalculateBreedID(speciesID, rarity, level, maxHealth, power, speed, false, false) -- Fix width if too small local reloadTooltip = false if (tooltip:GetWidth() < 210) then tooltip:SetMinimumWidth(210) reloadTooltip = true end -- Add the breed to the tooltip's name text if (BPBID_Options.Names.BPT) and (tooltip == GameTooltip) then local breed = internal.RetrieveBreedName(breedNum) local currentText = GameTooltipTextLeft1:GetText() -- Test if we've already written to the tooltip if currentText and not strfind(currentText, " (" .. breed .. ")") then -- Append breed to tooltip GameTooltipTextLeft1:SetText(currentText .. " (" .. breed .. ")") reloadTooltip = true end elseif (BPBID_Options.Names.FBPT) and (tooltip == ItemRefTooltip) then local breed = internal.RetrieveBreedName(breedNum) local currentText = ItemRefTooltipTextLeft1:GetText() -- Append breed to tooltip ItemRefTooltipTextLeft1:SetText(currentText .. " (" .. breed .. ")") reloadTooltip = true end -- Reshow tooltip if needed if reloadTooltip then tooltip:Show() end -- Set up the breed tooltip if (BPBID_Options.Tooltips.Enabled) and (((BPBID_Options.Tooltips.BPT) and (tooltip == GameTooltip)) or ((BPBID_Options.Tooltips.FBPT) and (tooltip == ItemRefTooltip))) then BPBID_SetBreedTooltip(tooltip, speciesID, resultslist, quality) end end -- Hook our tooltip functions hooksecurefunc("PetBattleUnitFrame_UpdateDisplay", BPBID_Hook_BattleUpdate) hooksecurefunc("BattlePetToolTip_Show", BPBID_Hook_BPTShow) hooksecurefunc("FloatingBattlePet_Show", BPBID_Hook_FBPTShow) -- Internal.Hook_PJTEnter is called by the ADDON_LOADED event for Blizzard_Collections in BattlePetBreedID's Core -- Internal.Hook_PJTLeave is called by the ADDON_LOADED event for Blizzard_Collections in BattlePetBreedID's Core -- Pet Journal's list button initialization hook is handled in BattlePetBreedID's Core entirely because it is unrelated to tooltips