Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local ADDON_NAME = ...
- local ADDON_VERSION = GetAddOnMetadata(ADDON_NAME, "Version")
- local GoldTrack = {}
- GoldTrack.__index = GoldTrack
- local SESSION_BALANCE = 1
- local REALM_BALANCE = 2
- local CHARACTER_BALANCE = 3
- SLASH_GOLDTRACK1 = "/goldtrack"
- SLASH_GOLDTRACK2 = "/gt"
- function SlashCmdList.GOLDTRACK(msg, edit)
- if msg == "debug" then
- GoldTrack.global.debug = not GoldTrack.global.debug
- if GoldTrack.global.debug then
- GoldTrack:Print("Debug mode enabled!")
- else
- GoldTrack:Print("Debug mode disabled!")
- end
- end
- GoldTrack:Show()
- end
- local backdrop = {
- bgFile = "Interface\\FrameGeneral\\UI-Background-Marble",
- edgeFile = "Interface\\DialogFrame\\UI-DialogBox-Gold-Border",
- tile = false,
- tileSize = 128,
- edgeSize = 16,
- insets = {
- left = 4,
- right = 4,
- top = 4,
- bottom = 4
- }
- }
- function GoldTrack:Initialize()
- self:CreateMainFrame()
- self:CreateTooltipFrame()
- self:CreateMenuFrame()
- self:RegisterEvents()
- end
- function GoldTrack:CreateMainFrame()
- -- Create the frame and set backdrop
- self.Frame = CreateFrame("Button", "GoldTrack_Frame", UIParent)
- self.Frame:Hide()
- self.Frame:SetBackdrop(backdrop)
- self.Frame:SetFrameStrata("HIGH")
- self.Frame:SetAlpha(0.75)
- -- Set frame size
- self.Frame:SetWidth(340)
- self.Frame:SetHeight(48)
- -- Create frame text
- self.Frame.Text = self.Frame:CreateFontString(nil, "HIGH", "BossEmoteNormalHuge")
- self.Frame.Text:SetAllPoints()
- self.Frame.Text:SetPoint("CENTER", 0, 0)
- -- Make the frame movable
- self.Frame:SetMovable(true)
- self.Frame:EnableMouse(true)
- self.Frame:RegisterForDrag("LeftButton")
- self.Frame:SetScript("OnDragStart", self.Frame.StartMoving)
- self.Frame:SetScript("OnDragStop", function()
- self.char.pos_x, self.char.pos_y = self.Frame:GetCenter()
- self.Frame:StopMovingOrSizing()
- end)
- self.Frame:RegisterForClicks("RightButtonUp")
- self.Frame:SetScript("OnClick", function(frame, button, down) if button == "RightButton" then ToggleDropDownMenu(1, nil, self.Frame.Menu, "GoldTrack_Frame", 0, 0) end end)
- end
- function GoldTrack:CreateTooltipFrame()
- self.Frame.Tooltip = CreateFrame("GameTooltip", "GoldTrack_Tooltip", nil, "GameTooltipTemplate")
- self.Frame.Tooltip:SetScale(0.75)
- end
- function GoldTrack:CreateMenuFrame()
- self.Frame.Menu = CreateFrame("Frame", "GoldTrack_Menu")
- self.Frame.Menu.displayMode = "MENU"
- self.Frame.Menu.initialize = function(frame, level, menuList) self:InitializeMenu(level, menuList) end
- end
- function GoldTrack:InitializeMenu(level, menuList)
- local info = UIDropDownMenu_CreateInfo()
- if not level then return end
- if level == 1 then
- info.isTitle = true
- info.text = "Reset balance"
- info.notCheckable = true
- UIDropDownMenu_AddButton(info)
- info.isTitle = nil
- info.notCheckable = true
- info.disabled = false
- info.text = "Session"
- info.func = function() self:ResetSessionBalance() end
- UIDropDownMenu_AddButton(info)
- info.text = "Realm"
- info.func = function() self:ResetRealmFactionBalance() end
- UIDropDownMenu_AddButton(info)
- info.text = "Character"
- info.func = nil
- info.menuList = 1
- info.hasArrow = true
- UIDropDownMenu_AddButton(info)
- info.isTitle = true
- info.menuList = nil
- info.hasArrow = false
- info.disabled = true
- info.text = nil
- UIDropDownMenu_AddButton(info)
- info.disabled = false
- info.isTitle = false
- info.text = "Show"
- info.menuList = 2
- info.hasArrow = true
- info.func = nil
- UIDropDownMenu_AddButton(info)
- info.text = "Hide"
- info.func = function() self:Hide() end
- info.hasArrow = false
- info.menuList = nil
- UIDropDownMenu_AddButton(info)
- elseif level == 2 and menuList == 1 then
- info.isTitle = false
- info.disabled = false
- info.notCheckable = true
- info.func = function(frame, name) self:ResetCharacterBalance(name) end
- for _,data in next,self:GetRealmFactionChars(),nil do
- if self.char.faction == data.faction and data.session_money ~= 0 then
- if self.char.realm == data.realm then
- info.text = data.name
- else
- info.text = data.name .. "-" .. data.realm
- end
- info.arg1 = data
- UIDropDownMenu_AddButton(info, level)
- end
- end
- elseif level == 2 and menuList == 2 then
- info.isTitle = false
- info.disabled = false
- info.notCheckable = false
- info.func = function(frame, value) self.char.main_balance = value self:UpdateMainFrame() end
- info.text = "Session"
- info.arg1 = SESSION_BALANCE
- info.checked = self.char.main_balance == SESSION_BALANCE
- UIDropDownMenu_AddButton(info, level)
- info.text = "Realm"
- info.arg1 = REALM_BALANCE
- info.checked = self.char.main_balance == REALM_BALANCE
- UIDropDownMenu_AddButton(info, level)
- info.text = "Character"
- info.arg1 = CHARACTER_BALANCE
- info.checked = self.char.main_balance == CHARACTER_BALANCE
- UIDropDownMenu_AddButton(info, level)
- end
- end
- function GoldTrack:RegisterEvents()
- self.Frame:RegisterEvent("ADDON_LOADED")
- self.Frame:RegisterEvent("PLAYER_LOGOUT")
- self.Frame:RegisterEvent("PLAYER_ENTERING_WORLD")
- self.Frame:RegisterEvent("PLAYER_MONEY")
- self.Frame:SetScript("OnEvent", function(frame, event, ...) self[event](self, ...) end)
- self.Frame:SetScript("OnEnter", function() self:ShowTooltip() end)
- self.Frame:SetScript("OnLeave", function() self:HideTooltip() end)
- end
- function GoldTrack:UpdateMainFrame()
- local balance = 0
- local balance_str = nil
- if self.char.main_balance == SESSION_BALANCE then
- if self.login_money then
- balance = GetMoney() - self.login_money
- end
- elseif self.char.main_balance == REALM_BALANCE then
- balance = self:GetRealmFactionBalance()
- else
- balance = self.char.session_money
- end
- if balance < 0 then
- balance_str = "|cffff0000" .. GetCoinTextureString(abs(balance)) .. "|r"
- elseif balance > 0 then
- balance_str = "|cff00ff00" .. GetCoinTextureString(balance) .. "|r"
- else
- balance_str = "|cffffffff" .. GetCoinTextureString(balance) .. "|r"
- end
- self.Frame.Text:SetText(balance_str)
- end
- function GoldTrack:Show()
- self.char.show = true
- self.Frame:Show()
- end
- function GoldTrack:Hide()
- self.char.show = false
- self:Print(ADDON_NAME .. " is now hidden. Use " .. SLASH_GOLDTRACK1 .. " or " .. SLASH_GOLDTRACK2 .. " to show it again!")
- self.Frame:Hide()
- end
- function GoldTrack:ShowTooltip()
- self.Frame.Tooltip:Hide()
- self.Frame.Tooltip:ClearLines()
- self.Frame.Tooltip:SetOwner(self.Frame, "ANCHOR_RIGHT")
- self.Frame.Tooltip:AddLine(ADDON_NAME .. " " .. ADDON_VERSION, 1, 1, 0)
- self.Frame.Tooltip:AddLine(" ")
- -- Earnings --
- local realm_balance = self:GetRealmFactionBalance()
- if realm_balance < 0 then
- self.Frame.Tooltip:AddDoubleLine(self:GetFactionImage(self.char.faction) .. self.realm.name .. ":", GetCoinTextureString(abs(realm_balance)), 1, 1, 1, 1, 0, 0)
- elseif realm_balance > 0 then
- self.Frame.Tooltip:AddDoubleLine(self:GetFactionImage(self.char.faction) .. self.realm.name .. ":", GetCoinTextureString(realm_balance), 1, 1, 1, 0.2, 0.8, 0.2)
- else
- self.Frame.Tooltip:AddDoubleLine(self:GetFactionImage(self.char.faction) .. self.realm.name .. ":", GetCoinTextureString(realm_balance), 1, 1, 1, 1, 1, 1)
- end
- self.Frame.Tooltip:AddLine(" ")
- self.Frame.Tooltip:AddLine("Character balance:", 1, 1, 1)
- for _, data in next,self:GetRealmFactionChars(), nil do
- local class_color = RAID_CLASS_COLORS[data.class]
- local name_str = data.name
- if self.char.realm ~= data.realm then
- name_str = name_str .. "-" .. data.realm
- end
- if data.session_money < 0 then
- self.Frame.Tooltip:AddDoubleLine(" " .. name_str .. ":", GetCoinTextureString(abs(data.session_money)), class_color.r, class_color.g, class_color.b, 1, 0, 0)
- elseif data.session_money > 0 then
- self.Frame.Tooltip:AddDoubleLine(" " .. name_str .. ":", GetCoinTextureString(data.session_money), class_color.r, class_color.g, class_color.b, 0.2, 0.8, 0.2)
- end
- end
- self.Frame.Tooltip:AddLine(" ")
- -- Wealth --
- self.Frame.Tooltip:AddLine("Wealth:", 1, 1, 1)
- for _, data in next,self:GetRealmFactionChars(), nil do
- local class_color = RAID_CLASS_COLORS[data.class]
- if self.char.realm == data.realm then
- self.Frame.Tooltip:AddDoubleLine(" " .. data.name .. ":", GetCoinTextureString(data.money), class_color.r, class_color.g, class_color.b, 1, 1, 1)
- else
- self.Frame.Tooltip:AddDoubleLine(" " .. data.name .. "-" .. data.realm .. ":", GetCoinTextureString(data.money), class_color.r, class_color.g, class_color.b, 1, 1, 1)
- end
- end
- self.Frame.Tooltip:AddLine(" ")
- self.Frame.Tooltip:AddDoubleLine(" Total:", GetCoinTextureString(self:GetRealmFactionWealth()), 1, 1, 1, 1, 1, 1)
- self.Frame.Tooltip:Show()
- end
- function GoldTrack:HideTooltip()
- self.Frame.Tooltip:Hide()
- end
- function GoldTrack:ADDON_LOADED(addon)
- -- Only handle if our addon
- if addon ~= ADDON_NAME then
- return
- end
- -- Because this is alpha, there are often changes to saved variables
- -- To prevent errors, delete the old saved variables when updating
- if not GoldTrack_DB or GoldTrack_DB.version ~= ADDON_VERSION then
- GoldTrack_DB = { version = ADDON_VERSION, debug = false }
- end
- if not GoldTrack_DB then GoldTrack_DB = { version = ADDON_VERSION, debug = false } end
- local name, realm = UnitName("player")
- local realm = GetRealmName():gsub("%s+", "")
- local _, class = UnitClass("player")
- self.realms = GetAutoCompleteRealms()
- if not self.realms then
- self.realms = { realm }
- end
- if not GoldTrack_DB[realm] then
- GoldTrack_DB[realm] = {
- name = realm,
- Horde = {
- session_money = 0
- },
- Alliance = {
- session_money = 0
- },
- chars = {
- }
- }
- end
- if not GoldTrack_DB[realm].chars[name] then
- GoldTrack_DB[realm].chars[name] = {
- name = name,
- realm = realm,
- show = true,
- money = 0,
- session_money = 0,
- faction = UnitFactionGroup("player"),
- class = class,
- main_balance = REALM_BALANCE
- }
- end
- self.char = GoldTrack_DB[realm].chars[name]
- self.realm = GoldTrack_DB[realm]
- self.global = GoldTrack_DB
- if self.global.debug == nil then
- self.global.debug = false
- end
- for _, realm in next,self.realms,nil do
- self:DebugPrint(realm)
- end
- self:PrintTable(self.global)
- self.Frame:SetPoint("CENTER", 0, 0)
- if self.char.show then
- self:Show()
- end
- self:UpdateMainFrame()
- end
- function GoldTrack:PLAYER_ENTERING_WORLD()
- self.char.money = GetMoney()
- if not self.login_money then
- self.login_money = GetMoney()
- end
- end
- function GoldTrack:PLAYER_MONEY()
- local money = GetMoney()
- local diff = money - self.char.money
- self:OnMoneyChange(diff)
- self.char.money = money
- end
- function GoldTrack:ResetSessionBalance()
- self.login_money = GetMoney()
- self:UpdateMainFrame()
- end
- function GoldTrack:ResetRealmFactionBalance()
- for _, realm in next,self.realms,nil do
- if self.global[realm] then
- self.global[realm][self.char.faction].session_money = 0
- end
- end
- end
- function GoldTrack:ResetCharacterBalance(data)
- data.session_money = 0
- end
- function GoldTrack:OnMoneyChange(diff)
- self.char.session_money = self.char.session_money + diff
- self.realm[self.char.faction].session_money = self.realm[self.char.faction].session_money + diff
- self:UpdateMainFrame()
- end
- -- Get all the characters that are on current realm or on realm connected
- -- to the current realm
- function GoldTrack:GetRealmFactionChars()
- local chars = {}
- for _, realm in next,self.realms,nil do
- if self.global[realm] then
- for _, c in next,self.global[realm].chars,nil do
- if self.char.faction == c.faction then
- self:DebugPrint("Match")
- table.insert(chars, c)
- end
- end
- end
- end
- return chars
- end
- -- Get total wealth of characters on current realm and connected realms
- function GoldTrack:GetRealmFactionWealth()
- local wealth = 0
- for _, data in next,self:GetRealmFactionChars(),nil do
- if data.faction == self.char.faction then
- wealth = wealth + data.money
- end
- end
- return wealth
- end
- function GoldTrack:GetRealmFactionBalance()
- local balance = 0
- for _, realm in next, self.realms,nil do
- if self.global[realm] then
- balance = balance + self.global[realm][self.char.faction].session_money
- end
- end
- return balance
- end
- function GoldTrack:GetFactionImage(faction)
- if faction == "Horde" then
- return "|TInterface\\FriendsFrame\\PlusManz-Horde:20:20:0:0|t"
- else
- return "|TInterface\\FriendsFrame\\PlusManz-Alliance:20:20:0:0|t"
- end
- end
- function GoldTrack:DebugPrint(msg)
- if self.global.debug then
- self:Print("(DEBUG) " .. msg)
- end
- end
- function GoldTrack:PrintTable(tbl)
- for k,v in next,tbl,nil do
- if type(v) == "table" then self:PrintTable(v)
- else self:DebugPrint(k .. ": " .. tostring(v)) end
- end
- end
- function GoldTrack:Print(msg)
- ChatFrame1:AddMessage("|cff00ffcc" .. ADDON_NAME .. "|r: " .. msg)
- end
- GoldTrack:Initialize()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement