View Single Post
03-09-22, 08:16 AM   #1
kaimox
A Fallenroot Satyr
Join Date: Jun 2008
Posts: 25
Master Plan and setbackdrop

I'm trying to fix an abandoned addon which has the backdrop error: MasterPlan (https://www.curseforge.com/wow/addons/master-plan)
Error no. 1:
Code:
1753x MasterPlan\GarrisonMissions.lua:644: attempt to call method 'SetBackdrop' (a nil value)
[string "@MasterPlan\GarrisonMissions.lua"]:644: in main chunk
[string "=[C]"]: in function `LoadAddOn'
[string "@MasterPlan\PlanA\PlanA.lua"]:77: in function <MasterPlan\PlanA\PlanA.lua:74>
[string "=[C]"]: ?
[string "=[C]"]: in function `Show'
[string "@FrameXML\UIParent.lua"]:2958: in function `SetUIPanel'
[string "@FrameXML\UIParent.lua"]:2764: in function `ShowUIPanel'
[string "@FrameXML\UIParent.lua"]:2671: in function <FrameXML\UIParent.lua:2667>
[string "=[C]"]: in function `SetAttribute'
[string "@FrameXML\UIParent.lua"]:3522: in function <FrameXML\UIParent.lua:3501>
[string "=[C]"]: in function `ShowUIPanel'
[string "@FrameXML\UIParent.lua"]:2214: in function <FrameXML\UIParent.lua:1287>

Locals:
_ = "MasterPlan"
T = <table> {
 ShipMissionReplacements = <table> {
 }
 MaxTraitStack = <table> {
 }
 MissionRewardSets = <table> {
 }
 LockTraits = <table> {
 }
 TraitStack = <table> {
 }
 IsDescendantOf = <function> defined @MasterPlan\Libs/Reframe.lua:8
 ItemLevelUpgrades = <table> {
 }
 UpdateMissionTabs = <function> defined @MasterPlan\MissionsUI.lua:41
 After0 = <function> defined @MasterPlan\Libs/Reframe.lua:19
 _SetMissionSeenTable = <function> defined @MasterPlan\GarrisonAPI.lua:895
 CreateEdge = <function> defined @MasterPlan\Mark-50.lua:29
 config = <table> {
 }
 Garrison = <table> {
 }
 CreateLazyItemButton = <function> defined @MasterPlan\Libs/Reframe.lua:106
 XPMissions = <table> {
 }
 FOLLOWER_LEVEL_BASE = 30
 EnvironmentGhosts = <table> {
 }
 EnvironmentBonus = <table> {
 }
 SetModifierSensitiveTip = <function> defined @MasterPlan\Libs/Reframe.lua:147
 TraitDisplayMap = <table> {
 }
 ShipAffinityMap = <table> {
 }
 Mark = 50
 TokenSlots = <table> {
 }
 CrateLevels = <table> {
 }
 StrongNavalThreats = <table> {
 }
 EquipmentTraitQuests = <table> {
 }
 FOLLOWER_ITEM_LEVEL_CAP = 675
 SpecIcons = <table> {
 }
 MoreTraitStack = <table> {
 }
 Evie = <userdata>
 EquipmentCounters = <table> {
 }
 FOLLOWER_LEVEL_CAP = 40
 Nine = <table> {
 }
 ShipInterestPool = <table> {
 }
 MissionCoalescing = <table> {
 }
 InterestPool = <table> {
 }
 Affinities = <table> {
 }
 MissionLocationBanners = <table> {
 }
 L = <userdata>
 MENTOR_FOLLOWER = 465
 EnvironmentCounters = <table> {
 }
 AlwaysTraits = <table> {
 }
 SpecCounters = <table> {
 }
 EquipmentTraitItems = <table> {
 }
 MinorRewards = <table> {
 }
 UsableAffinities = <table> {
 }
 ShipTraitStack = <table> {
 }
 tentativeState = <table> {
 }
 _GetMissionSeenTable = <function> defined @MasterPlan\GarrisonAPI.lua:904
 MissionExpire = <table> {
 }
 InterestMask = <table> {
 }
 UniqueTraits = <table> {
 }
 TraitCost = <table> {
 }
 EquivTrait = <table> {
 }
 MissionsUI = <table> {
 }
 GetMouseFocus = <function> defined @MasterPlan\Libs/Reframe.lua:4
 TrackedMissionSets = <table> {
 }
}
EV = <userdata>
G = <table> {
 GetMechanicInfo = <function> defined @MasterPlan\GarrisonAPI.lua:560
 ExtendMissionInfoWithParty = <function> defined @MasterPlan\GarrisonAPI.lua:1806
 SetDoubleCountersTooltip = <function> defined @MasterPlan\GarrisonAPI.lua:2925
 SetGroupTooltip = <function> defined @MasterPlan\GarrisonAPI.lua:2848
 DissolveAllTentativeParties = <function> defined @MasterPlan\GarrisonAPI.lua:97
 SuppressFollowerEvents = <function> defined @MasterPlan\GarrisonAPI.lua:921
 GetFollowerRerollConstraints = <function> defined @MasterPlan\GarrisonAPI.lua:2456
 GetFilteredMissionGroups = <function> defined @MasterPlan\GarrisonAPI.lua:1080
 GetFollowerTraits = <function> defined @MasterPlan\GarrisonAPI.lua:513
 GetNumIdleCombatFollowers = <function> defined @MasterPlan\GarrisonAPI.lua:682
 GetMissionDefaultGroupRank = <function> defined @MasterPlan\GarrisonAPI.lua:1503
 GetFMLevel = <function> defined @MasterPlan\GarrisonAPI.lua:616
 GetCounterInfo = <function> defined @MasterPlan\GarrisonAPI.lua:464
 GetBestGroupInfo = <function> defined @MasterPlan\GarrisonAPI.lua:3179
 GetFollowerLevelDescription = <function> defined @MasterPlan\GarrisonAPI.lua:623
 SetCurrencyTraitTip = <function> defined @MasterPlan\GarrisonAPI.lua:2841
 GetMissionSummary = <function> defined @MasterPlan\GarrisonAPI.lua:2333
 SetItemTooltip = <function> defined @MasterPlan\GarrisonAPI.lua:2799
 GetTimeStringFromSeconds = <function> defined @MasterPlan\GarrisonAPI.lua:203
 AbortCompleteMissions = <function> defined @MasterPlan\G
I do not really understand lua well, but I'm trying my best. I changed the first line in this code block in GarrisonMissions.lua:
Code:
do -- Counter-follower lists
--	local itip = CreateFrame("GameTooltip", "MPInnerTip", nil, "GameTooltipTemplate") do
	local itip = CreateFrame("GameTooltip", "MPInnerTip", nil, BackdropTemplateMixin and "GameTooltipTemplate") do
		itip:SetBackdrop(nil)
		itip:SetPadding(0, 0)
		itip:SetScript("OnHide", function(self)
			self:Hide()
			self:SetParent(nil)
			self:ClearAllPoints()
		end)
		itip:SetScript("OnUpdate", function(self)
			local atip = self:GetParent()
			if not atip then
				return self:Hide()
			end
			local il, al, at, iw = self:GetLeft(), atip:GetLeft(), atip:GetTop(), self:GetWidth()
			if not (il and al and at and iw) then
				return
			end
			local lm = il - al
			atip:SetWidth(math.max(245, lm + iw))
			if atip.Description then
				atip.Description:SetWidth(atip:GetWidth()+atip:GetLeft()-atip.Description:GetLeft()-10)
			end
			local tw = atip:GetWidth() - lm - 18
			if tw > self:GetWidth() then
				self:SetMinimumWidth(tw)
				self:Show()
			end
			self:Show()
			atip:SetHeight(at-self:GetTop()+self:GetHeight()+2)
		end)
		function itip:ActivateFor(owner, ...)
			if owner then
				self:SetParent(owner)
				self:SetOwner(owner, "ANCHOR_PRESERVE")
				self:ClearAllPoints()
				self:SetPoint(...)
			end
		end
	end
but I ended up with another error no. 2:
Code:
163x MasterPlan\GarrisonAPI.lua:2701: attempt to call method 'SetBackdropColor' (a nil value)
[string "@MasterPlan\GarrisonAPI.lua"]:2701: in function `SetClassSpecTooltip'
[string "@MasterPlan\GarrisonFollowers.lua"]:408: in function <MasterPlan\GarrisonFollowers.lua:382>

Locals:
self = GameTooltip {
 0 = <userdata>
 SetCurrencyByID = <function> defined =[C]:-1
 textLeft1Font = "GameTooltipHeaderText"
 GetBackdropColor = <function> defined @TinyTooltip\Core.lua:858
 SetHyperlink = <function> defined =[C]:-1
 updateTooltipTimer = 0.130000
 SetArtifactPowerByID = <function> defined =[C]:-1
 textRight2Font = "GameTooltipText"
 comparing = false
 TopOverlay = <unnamed> {
 }
 GetBackdropBorderColor = <function> defined @TinyTooltip\Core.lua:859
 style = <unnamed> {
 }
 SetUnitDebuff = <function> defined =[C]:-1
 SetQuestItem = <function> defined =[C]:-1
 waitingForData = false
 numMoneyFrames = 1
 SetRecipeReagentItem = <function> defined =[C]:-1
 layoutType = "TooltipDefaultLayout"
 shoppingTooltips = <table> {
 }
 hasMoney = 1
 SetCurrencyTokenByID = <function> defined =[C]:-1
 SetQuestLogItem = <function> defined =[C]:-1
 BottomOverlay = <unnamed> {
 }
 __tamedCounts = false
 textRight1Font = "GameTooltipHeaderText"
 SetCurrencyToken = <function> defined =[C]:-1
 NineSlice = <unnamed> {
 }
 textLeft2Font = "GameTooltipText"
 model = <unnamed> {
 }
 TextRight2 = GameTooltipTextRight2 {
 }
 TextLeft2 = GameTooltipTextLeft2 {
 }
 SetUnitAura = <function> defined =[C]:-1
 TextLeft1 = GameTooltipTextLeft1 {
 }
 TextRight1 = GameTooltipTextRight1 {
 }
 ItemTooltip = <unnamed> {
 }
 needsReset = true
 SetUnitBuff = <function> defined =[C]:-1
 GetBackdrop = <function> defined @TinyTooltip\Core.lua:857
 BigFactionIcon = <unnamed> {
 }
 SetRecipeResultItem = <function> defined =[C]:-1
}
specId = 4
specName = "Unheiligtodesritter"
ab1 = nil
ab2 = nil
fi = <table> {
 displayHeight = 0.500000
 followerTypeID = 1
 abilities = <table> {
 }
 iLevel = 675
 scale = 0.700000
 classAtlas = "GarrMission_ClassIcon-DeathKnight"
 combatAllySpellIDs = <table> {
 }
 isTroop = false
 displayIDs = <table> {
 }
 autoCombatantStats = <table> {
 }
 classSpec = 4
 displayScale = 1
 level = 40
 unlockableEquipment = <table> {
 }
 quality = 4
 portraitIconID = 1066212
 unlockableAbilities = <table> {
 }
 isFavorite = false
 isSoulbind = false
 isAutoTroop = false
 xp = 0
 className = "Unheiligtodesritter"
 equipment = <table> {
 }
 isMaxLevel = true
 name = "Olaf Pestträger"
 followerID = "0x0000000026BBFB91"
 height = 1.200000
 levelXP = 0
 isCollected = true
 garrFollowerID = 242
}
c = <table> {
 1 = 1
 2 = 2
 3 = 7
 4 = 8
 5 = 10
}
ci = <table> {
 1 = <table> {
 }
 2 = <table> {
 }
 3 = <table> {
 }
 4 = <table> {
 }
 6 = <table> {
 }
 7 = <table> {
 }
 8 = <table> {
 }
 9 = <table> {
 }
 10 = <table> {
 }
}
finfo = <table> {
 611705759 = <table> {
 }
 621564966 = <table> {
 }
 554861866 = <table> {
 }
 564073912 = <table> {
 }
 557008026 = <table> {
 }
 649853841 = <table> {
 }
 647456010 = <table> {
 }
 558497649 = <table> {
 }
 554811483 = <table> {
 }
 628500002 = <table> {
 }
 574020219 = <table> {
 }
 644121922 = <table> {
 }
 640011705 = <table> {
 }
 554366730 = <table> {
 }
 591313258 = <table> {
 }
 577581114 = <table> {
 }
 558484756 = <table> {
 }
 554362970 = <table> {
 }
 637676654 = <table> {
 }
 600377894 = <table> {
 }
 634410410 = <table> {
 }
 554720426 = <table> {
 }
 557029619 = <table> {
 }
 624641191 = <table> {
 }
 567243613 = <table> {
 }
 555677904 = <table> {
 }
 618581631 = <table> {
 }
 568491898 = <table> {
 }
 554792869 = <table> {
 }
 585511669 = <table> {
 }
 554785479 = <table> {
 }
 570915827 = <table> {
 }
 583237840 = <table> {
 }
 604725544 = <table> {
 }
 608325726 = <table> {
 }
 554362419 = <table> {
 }
 595615744 = <table> {
 }
 615463396 = <table> {
 }
 588212129 = <table> {
 }
 560876254 = <table> {
 }
 558481057 = <table> {
 }
 554343297 = <table> {
 }
 555782709 = <table> {
 }
 555679993 = <table> {
 }
 631337830 = <table> {
 }
 569287289 = <table> {
 }
 557002900 = <table> {
 }
 554803148 = <table> {
 }
 576729221 = <table> {
 }
 568485522 = <table> {
 }
 560171043 = <table> {
 }
 580438516 = <table> {
 }
 554862621 = <table> {
 }
}
dropCounter = nil
dct = <table> {
 807 = <table> {
 }
 309 = <table> {
 }
 903 = <table> {
 }
 -207
So I tried this in GarrisonAPI.lua:
Code:
function api.SetClassSpecTooltip(self, specId, specName, ab1, ab2)
-- trying to fix setbackdrop error
  if not self.SetBackdrop then
    Mixin(self, BackdropTemplateMixin)
  end
	local fi
	if type(specId) == "table" then
		fi, specId, specName = specId, specId.classSpec, specId.className
	end
	
	local c = T.SpecCounters[specId]
	if not c then return end
	
	self:ClearLines()

	local ci, finfo, dropCounter = api.GetCounterInfo(), api.GetFollowerInfo(), not ab2 and ab1 or nil
	local dct = api.GetDoubleCounters()
	if specName then
		self:AddLine(specName, 1,1,1)
		self:AddLine(L"Potential counters:")
		local lockedCounter = api.GetFollowerLockedCounterInfo(fi and (fi.garrFollowerID or fi.followerID))
		
		local leftLine
		for i=1,#c do
			for j=lockedCounter and #c or (i+1), #c do
				local pc, lc = lockedCounter or c[j], c[i]
				local lct, lpt = dct[pc*100+lc], dct[-(pc*100+lc)]
				local _, _, pi = api.GetMechanicInfo(pc)
				local _, _, li = api.GetMechanicInfo(lc)
				local pt = "|T" .. pi .. ":16:16:0:0:64:64:5:59:5:59|t"
				if leftLine then
					local rt = pt .. "|T" .. li .. ":16:16:0:0:64:64:5:59:5:59|t"
					local rf, ra, rp = api.countFreeFollowers(lct, finfo), lct and #lct or 0, lpt and #lpt or 0
					rt = (rf == 0 and ra == 0 and "0" or "") .. (rf > 0 and "|cff20ff20" .. rf .. "|r" or "") .. (ra > rf and (rf > 0 and "+" or "") .. "|cffccc78f" .. (ra - rf) .. "|r" or "") .. "|cffa0a0a0/" .. rp .. " " .. rt
					self:AddDoubleLine(leftLine, rt, 1,1,1, 1,1,1)
					leftLine = nil
				else
					local lt = pt .. "|T" .. li .. ":16:16:0:0:64:64:5:59:5:59|t"
					local lf, la, lp = api.countFreeFollowers(lct, finfo), lct and #lct or 0, lpt and #lpt or 0
					leftLine = lt .. " " .. (lf == 0 and la == 0 and "0" or "") .. (lf > 0 and "|cff20ff20" .. lf .. "|r" or "") .. (la > lf and (lf > 0 and "+" or "") .. "|cffccc78f" .. (la - lf) .. "|r" or "") .. "|cffa0a0a0/" .. lp
				end
			end
		end
		if leftLine then
			self:AddLine(leftLine, 1,1,1)
		end
	else
		self:AddLine(ITEM_QUALITY_COLORS[4].hex .. L"Epic Ability")
		self:AddLine(L"An additional random ability is unlocked when this follower reaches epic quality." .. "|n ", 1,1,1, 1)
		self:AddLine(L"Potential counters:")
		for i=1,#c do
			if c[i] == dropCounter then
				dropCounter = nil
			else
				local _, name, ico = api.GetMechanicInfo(c[i])
				local counters = ci[c[i]]
				local freeCount, totalCount = api.countFreeFollowers(counters, finfo), counters and #counters or 0
				local counts = (freeCount > 0 and "|cff20ff20" .. freeCount or "0") .. "|r+|cffccc78f" .. (totalCount - freeCount)
				self:AddDoubleLine("|TInterface\\Buttons\\UI-Quickslot2:13:2:-1:0:64:64:31:32:31:32|t|T" .. ico .. ":0:0:0:0:64:64:5:59:5:59|t " .. name, counts, 1,1,1, 1,1,1)
			end
		end
	end
	
	self:SetBackdropColor(0,0,0)
	
	local novel, inact, _, rerollDesc = api.CountUniqueRerolls(c, fi and fi.followerID)
	if novel > 0 or inact > 0 then
		self:AddDoubleLine(L"Unique ability rerolls:", rerollDesc)
	end
	
	if fi and fi.quality >= 4 and fi.isCollected then
		local a1, a2 = C_Garrison.GetFollowerAbilityAtIndex(fi.followerID, 1), C_Garrison.GetFollowerAbilityAtIndex(fi.followerID, 2)
		a1, a2 = C_Garrison.GetFollowerAbilityCounterMechanicInfo(a1), C_Garrison.GetFollowerAbilityCounterMechanicInfo(a2)
		local sd = dct[a1 < a2 and (a1 * 100 + a2) or (a2 * 100 + a1)]
		if sd and #sd > 1 then
			self:AddLine(" ")
			self:AddLine(L"Duplicate counters" .. ":")
			addFollowerList(self, sd, finfo, nil, true, nil, fi.followerID)
		end
	end
	
	self:Show()
	return true
end
... and actually this fix helped - but error no. 1 in GarrisonMissions.lua line 644 is still there. Why? What did I do wrong with the first change?

Last edited by kaimox : 03-10-22 at 08:29 AM.
  Reply With Quote