Global("Base", {})
local wtMain = mainForm:GetChildChecked("MainPanel", false)
local TextMain = wtMain:GetChildChecked("Text", false)
local Tooltip = mainForm:GetChildChecked("Tooltip", false)
local Title = Tooltip:GetChildChecked("Title", false)
local BasicValue = Tooltip:GetChildChecked("BasicValue", false)
local BonusEquipment = Tooltip:GetChildChecked("BonusEquipment", false)
local BonusEquipmentRitual = Tooltip:GetChildChecked("BonusEquipmentRitual", false)
local BonusFairy = Tooltip:GetChildChecked("BonusFairy", false)
local BonusGuildCape = Tooltip:GetChildChecked("BonusGuildCape", false)
local BonusMilestones = Tooltip:GetChildChecked("BonusMilestones", false)
local BonusLegacyGods = Tooltip:GetChildChecked("BonusLegacyGods", false)
local OldSave = Tooltip:GetChildChecked("OldSave", false)
local showTooltip, notFound = false
local NicknameMainHero
function SetSize(wt, sizeX, sizeY)
local placement = wt:GetPlacementPlain()
if sizeX then placement.sizeX = sizeX end
if sizeY then placement.sizeY = sizeY end
wt:SetPlacementPlain(placement)
end
function StartInspect()
local unitId = avatar.GetTarget()
local avatarId = avatar.GetId()
if unitId == nil then wtMain:Show(false) return end
if not unit.IsPlayer(unitId) then wtMain:Show(false) return end
if matchMaking.IsAvatarInMatchMakingEvent() then
local nickname = userMods.FromWString(object.GetName(unitId))
FillWidget(nickname)
else
if unitId == avatarId then
InspectAvatar()
else
avatar.StartInspect(unitId)
end
end
--wtMain:Show(true)
end
function InspectTarget()
local artLegacyGods, GuildCape = false
local Bonuses = {}
local InspectInfo = avatar.GetInspectInfo()
local unitId = InspectInfo.playerId
local nickname = userMods.FromWString(object.GetName(unitId))
local sumPower, artLvl = 0
local Equipment = unit.GetEquipmentItemIds(unitId, ITEM_CONT_EQUIPMENT)
if Equipment then
for slot,item in pairs(Equipment) do
local itemInfo = itemLib.GetItemInfo(item)
local bonus = itemLib.GetBonus(item)
local power = bonus.miscStats.power.effective
sumPower = sumPower + power
Bonuses.Equipment = sumPower
if userMods.FromWString(itemInfo.name) == "Guild tabard" or userMods.FromWString(itemInfo.name) == "Champion's tabard" or userMods.FromWString(itemInfo.name) == "Tactician's Banner" or userMods.FromWString(itemInfo.name) == "Keeper's Banner" or userMods.FromWString(itemInfo.name) == "Commander's Banner" then
GuildCape = true
end
if userMods.FromWString(itemInfo.name) == "Gods' Legacy" then
artLvl = itemInfo.level
artLegacyGods = true
end
end
else
Bonuses.Equipment = 0
end
local RitualEquipment = unit.GetEquipmentItemIds(unitId, ITEM_CONT_EQUIPMENT_RITUAL)
if RitualEquipment then
Bonuses.RitualEquipment = 0
for slot,item in pairs(RitualEquipment) do
local itemInfo = itemLib.GetItemInfo(item)
local bonus = itemLib.GetBonus(item)
local power = bonus.miscStats.power.effective
sumPower = sumPower + power
Bonuses.RitualEquipment = Bonuses.RitualEquipment + power
end
else
Bonuses.RitualEquipment = 0
end
Bonuses.BasicValue = 300
sumPower = sumPower + Bonuses.BasicValue
local FairyInfo = unit.GetFairyInfo(unitId)
Bonuses.Fairy = FairyInfo.powerBonus
sumPower = sumPower + Bonuses.Fairy
Bonuses.Milestones = sumPower * 0.09 + Bonuses.Fairy
sumPower = sumPower + (sumPower * 0.09)
if GuildCape then
local GuildCapeBonus = (0.04 * unit.GetGuildInfo(unitId).level / 100) * sumPower
sumPower = sumPower + GuildCapeBonus
Bonuses.GuildCapeBonus = GuildCapeBonus
GuildCape = false
else
Bonuses.GuildCapeBonus = 0
end
if artLegacyGods then
Bonuses.artLegacyGods = artLvl * 25 + 250
sumPower = sumPower + Bonuses.artLegacyGods
artLegacyGods = false
else
Bonuses.artLegacyGods = 0
end
Bonuses.sumPower = math.ceil(sumPower)
Base[nickname] = Bonuses
userMods.SetGlobalConfigSection("Base", Base)
FillWidget(nickname)
end
function InspectAvatar()
local artLegacyGods, GuildCape = false
local avatarId = avatar.GetId()
local nickname = userMods.FromWString(object.GetName(avatarId))
local Bonuses = {}
local sumPower, artLvl = 0
local Equipment = unit.GetEquipmentItemIds(avatarId, ITEM_CONT_EQUIPMENT)
if Equipment then
for slot,item in pairs(Equipment) do
local itemInfo = itemLib.GetItemInfo(item)
local bonus = itemLib.GetBonus(item)
local power = bonus.miscStats.power.effective
sumPower = sumPower + power
Bonuses.Equipment = sumPower
if userMods.FromWString(itemInfo.name) == "Guild tabard" or userMods.FromWString(itemInfo.name) == "Champion's tabard" or userMods.FromWString(itemInfo.name) == "Tactician's Banner" or userMods.FromWString(itemInfo.name) == "Keeper's Banner" or userMods.FromWString(itemInfo.name) == "Commander's Banner" then
GuildCape = true
end
if userMods.FromWString(itemInfo.name) == "Gods' Legacy" then
artLvl = itemInfo.level
artLegacyGods = true
end
end
else
Bonuses.Equipment = 0
end
local RitualEquipment = unit.GetEquipmentItemIds(avatarId, ITEM_CONT_EQUIPMENT_RITUAL)
if RitualEquipment then
Bonuses.RitualEquipment = 0
for slot,item in pairs(RitualEquipment) do
local itemInfo = itemLib.GetItemInfo(item)
local bonus = itemLib.GetBonus(item)
local power = bonus.miscStats.power.effective
sumPower = sumPower + power
Bonuses.RitualEquipment = Bonuses.RitualEquipment + power
end
else
Bonuses.RitualEquipment = 0
end
Bonuses.BasicValue = 300
sumPower = sumPower + Bonuses.BasicValue
local FairyInfo = unit.GetFairyInfo(avatarId)
Bonuses.Fairy = FairyInfo.powerBonus
sumPower = sumPower + Bonuses.Fairy
Bonuses.Milestones = sumPower * 0.09 + Bonuses.Fairy
sumPower = sumPower + (sumPower * 0.09)
if GuildCape then
local GuildCapeBonus = (0.04 * unit.GetGuildInfo(avatarId).level / 100) * sumPower
sumPower = sumPower + GuildCapeBonus
Bonuses.GuildCapeBonus = GuildCapeBonus
GuildCape = false
else
Bonuses.GuildCapeBonus = 0
end
if artLegacyGods then
Bonuses.artLegacyGods = artLvl * 25 + 250
sumPower = sumPower + Bonuses.artLegacyGods
artLegacyGods = false
else
Bonuses.artLegacyGods = 0
end
Bonuses.sumPower = math.ceil(sumPower)
Base[nickname] = Bonuses
userMods.SetGlobalConfigSection("Base", Base)
FillWidget(nickname)
end
function FillWidget(nickname)
local avatarId = avatar.GetId()
NicknameMainHero = userMods.FromWString(object.GetName(avatarId))
if not Base[nickname] or Base[nickname] == nil then
TextMain:SetVal("power", GetLocalizedText("NotFound"))
TextMain:SetVal("difference", userMods.ToWString(""))
TextMain:SetClassVal("class", listCSS[Options.TextStyle])
notFound = true
else
notFound = false
if not Base[NicknameMainHero] or not Base[NicknameMainHero].sumPower then InspectAvatar() end
if nickname == NicknameMainHero then
TextMain:SetVal("power", common.FormatInt(Base[NicknameMainHero].sumPower, "%d"))
TextMain:SetVal("difference", userMods.ToWString(""))
TextMain:SetClassVal("class", listCSS[Options.TextStyle])
FillTooltip(NicknameMainHero)
else
if type(Base[nickname]) == "number" then
local mathPower = Base[nickname] - Base[NicknameMainHero].sumPower
TextMain:SetVal("power", common.FormatInt(Base[nickname], "%d"))
if Options.ShowComparingMainPanel then
if mathPower == 0 then
TextMain:SetVal("difference", userMods.ToWString(" (=)"))
else
TextMain:SetVal("difference", userMods.ToWString(" ("..tostring(mathPower)..")"))
end
else
TextMain:SetVal("difference", userMods.ToWString(""))
end
TextMain:SetClassVal("class", listCSS[Options.TextStyle])
FillTooltip(nickname)
else
local mathPower = Base[nickname].sumPower - Base[NicknameMainHero].sumPower
TextMain:SetVal("power", common.FormatInt(Base[nickname].sumPower, "%d"))
if Options.ShowComparingMainPanel then
if mathPower == 0 then
TextMain:SetVal("difference", userMods.ToWString(" (=)"))
else
TextMain:SetVal("difference", userMods.ToWString(" ("..tostring(mathPower)..")"))
end
else
TextMain:SetVal("difference", userMods.ToWString(""))
end
TextMain:SetClassVal("class", listCSS[Options.TextStyle])
FillTooltip(nickname)
end
end
end
if Options.ShowBackground then
TextMain:SetFormat('')
wtMain:SetBackgroundTexture(common.GetAddonRelatedTextureGroup("Group01"):GetTexture("TitleCut"))
SetSize(wtMain, 140, 40)
else
TextMain:SetFormat('')
wtMain:SetBackgroundTexture(common.GetAddonRelatedTextureGroup("Group01"):GetTexture("Transparent"))
SetSize(wtMain, TextMain:GetPlacementPlain().sizeX, TextMain:GetPlacementPlain().sizeY)
end
wtMain:Show(true)
end
function FillTooltip(nickname)
if type(Base[nickname]) == "number" then
Title:Show(false)
BasicValue:Show(false)
BonusEquipment:Show(false)
BonusEquipmentRitual:Show(false)
BonusFairy:Show(false)
BonusGuildCape:Show(false)
BonusMilestones:Show(false)
BonusLegacyGods:Show(false)
OldSave:SetVal("text", GetLocalizedText("OldRecord"))
OldSave:Show(true)
else
Title:SetVal("text", GetLocalizedText("Power"))
Title:SetClassVal("class", "ColorWhite")
BasicValue:SetVal("text", GetLocalizedText("BasicValue"))
BasicValue:SetVal("value", common.FormatInt(Base[nickname].BasicValue, "%d"))
BasicValue:SetClassVal("class", "Label")
BonusEquipment:SetVal("text", GetLocalizedText("Equipment"))
BonusEquipment:SetVal("value", common.FormatFloat(Base[nickname].Equipment, "%g"))
if Options.ShowComparingOnTooltip then
local difference = math.ceil(Base[nickname].Equipment - Base[NicknameMainHero].Equipment)
if difference == 0 then
BonusEquipment:SetVal("difference", userMods.ToWString(" (=)"))
else
BonusEquipment:SetVal("difference", userMods.ToWString(" ("..tostring(difference)..")"))
end
else
BonusEquipment:SetVal("difference", userMods.ToWString(""))
end
BonusEquipment:SetClassVal("class", "Label")
BonusEquipmentRitual:SetVal("text", GetLocalizedText("RitualEquipment"))
BonusEquipmentRitual:SetVal("value", common.FormatFloat(Base[nickname].RitualEquipment or 0, "%g"))
if Options.ShowComparingOnTooltip then
local difference = math.ceil((Base[nickname].RitualEquipment or 0) - (Base[NicknameMainHero].RitualEquipment or 0))
if difference == 0 then
BonusEquipmentRitual:SetVal("difference", userMods.ToWString(" (=)"))
else
BonusEquipmentRitual:SetVal("difference", userMods.ToWString(" ("..tostring(difference)..")"))
end
else
BonusEquipmentRitual:SetVal("difference", userMods.ToWString(""))
end
BonusEquipmentRitual:SetClassVal("class", "Label")
BonusFairy:SetVal("text", GetLocalizedText("Fairy"))
BonusFairy:SetVal("value", common.FormatFloat(Base[nickname].Fairy, "%g"))
if Options.ShowComparingOnTooltip then
local difference = math.ceil(Base[nickname].Fairy - Base[NicknameMainHero].Fairy)
if difference == 0 then
BonusFairy:SetVal("difference", userMods.ToWString(" (=)"))
else
BonusFairy:SetVal("difference", userMods.ToWString(" ("..tostring(difference)..")"))
end
else
BonusFairy:SetVal("difference", userMods.ToWString(""))
end
BonusFairy:SetClassVal("class", "Label")
BonusGuildCape:SetVal("text", GetLocalizedText("GuildCapeBonus"))
BonusGuildCape:SetVal("value", common.FormatFloat(Base[nickname].GuildCapeBonus or 0, "%g"))
if Options.ShowComparingOnTooltip then
local difference = math.ceil((Base[nickname].GuildCapeBonus or 0) - (Base[NicknameMainHero].GuildCapeBonus or 0))
if difference == 0 then
BonusGuildCape:SetVal("difference", userMods.ToWString(" (=)"))
else
BonusGuildCape:SetVal("difference", userMods.ToWString(" ("..tostring(difference)..")"))
end
else
BonusGuildCape:SetVal("difference", userMods.ToWString(""))
end
BonusGuildCape:SetClassVal("class", "Label")
BonusMilestones:SetVal("text", GetLocalizedText("Milestones"))
BonusMilestones:SetVal("value", common.FormatFloat(Base[nickname].Milestones or 0, "%g"))
if Options.ShowComparingOnTooltip then
local difference = math.ceil((Base[nickname].Milestones or 0) - (Base[NicknameMainHero].Milestones or 0))
if difference == 0 then
BonusMilestones:SetVal("difference", userMods.ToWString(" (=)"))
else
BonusMilestones:SetVal("difference", userMods.ToWString(" ("..tostring(difference)..")"))
end
else
BonusMilestones:SetVal("difference", userMods.ToWString(""))
end
BonusMilestones:SetClassVal("class", "Label")
BonusLegacyGods:SetVal("text", GetLocalizedText("artLegacyGods"))
BonusLegacyGods:SetVal("value", common.FormatFloat(Base[nickname].artLegacyGods or 0, "%g"))
if Options.ShowComparingOnTooltip then
local difference = math.ceil((Base[nickname].artLegacyGods or 0) - (Base[NicknameMainHero].artLegacyGods or 0))
if difference == 0 then
BonusLegacyGods:SetVal("difference", userMods.ToWString(" (=)"))
else
BonusLegacyGods:SetVal("difference", userMods.ToWString(" ("..tostring(difference)..")"))
end
else
BonusLegacyGods:SetVal("difference", userMods.ToWString(""))
end
BonusLegacyGods:SetClassVal("class", "Label")
OldSave:Show(false)
Title:Show(true)
BasicValue:Show(true)
BonusEquipment:Show(true)
BonusEquipmentRitual:Show(true)
BonusFairy:Show(true)
BonusGuildCape:Show(true)
BonusMilestones:Show(true)
BonusLegacyGods:Show(true)
end
end
function tooltipPlace()
local placement = Tooltip:GetPlacementPlain()
local wtMain = wtMain:GetRealRect()
local rect = Tooltip:GetRealRect()
rect.sizeX = rect.x2 - rect.x1
rect.sizeY = rect.y2 - rect.y1
local frameRect = stateMainForm:GetRealRect()
frameRect.sizeX = frameRect.x2 - frameRect.x1
frameRect.sizeY = frameRect.y2 - frameRect.y1
local placeX = frameRect.x2 - wtMain.x2
local placeY = frameRect.y2 - wtMain.y1
placement.alignX = WIDGET_ALIGN_LOW_ABS
placement.alignY = WIDGET_ALIGN_LOW_ABS
if placeX > rect.sizeX then
placement.posX = wtMain.x2
else
placement.posX = wtMain.x1 - rect.sizeX
end
if frameRect.y2 - wtMain.y1 > rect.sizeY then
placement.posY = wtMain.y1
elseif wtMain.y2 > rect.sizeY then
placement.posY = wtMain.y2 - rect.sizeY
else
placement.posY = (frameRect.sizeY - rect.sizeY) / 2
end
if Options.ShowComparingOnTooltip then
placement.sizeX = 370
else
placement.sizeX = 330
end
Tooltip:SetPlacementPlain(placement)
end
function ShowInfo(reaction)
if notFound then
Tooltip:Show(false)
else
showTooltip = not showTooltip
Tooltip:Show(showTooltip)
if showTooltip then
tooltipPlace()
end
end
end
function SlashCMD(params)
local text = userMods.FromWString(params.text)
if text == "/opp" then
ShowOptions()
end
end
function Init()
DnD.Init(wtMain,wtMain, true, true)
common.RegisterEventHandler(StartInspect, "EVENT_AVATAR_TARGET_CHANGED")
common.RegisterEventHandler(InspectTarget, "EVENT_INSPECT_STARTED")
common.RegisterReactionHandler(ShowInfo, "ShowInfo")
common.RegisterEventHandler(SlashCMD, "EVENT_UNKNOWN_SLASH_COMMAND")
Base = userMods.GetGlobalConfigSection("Base") or {}
end
Init()