changeset 135:4979b5cca6de

- Fixed lua error from newly obtained artifacts
author Nenue
date Thu, 25 Jan 2018 20:58:10 -0500
parents 24dc16a49b15
children 414e37af1b1b
files Modules/ArtifactPower.lua Modules/GuildInfo.lua Modules/GuildInfo.xml Modules/LFGFrame.lua Modules/LFGFrame.xml Modules/PaperDoll.lua Modules/PetBattle.lua Modules/PetBattle.xml Veneer.toc
diffstat 9 files changed, 567 insertions(+), 537 deletions(-) [+]
line wrap: on
line diff
--- a/Modules/ArtifactPower.lua	Fri Dec 22 20:37:15 2017 -0500
+++ b/Modules/ArtifactPower.lua	Thu Jan 25 20:58:10 2018 -0500
@@ -344,8 +344,6 @@
     self:TryToShow()
   elseif event == 'BAG_UPDATE' then
     local containerID = ...
-
-
     self:QueueBag(containerID)
   elseif event == 'ITEM_LOCK_CHANGED' then
 
--- a/Modules/GuildInfo.lua	Fri Dec 22 20:37:15 2017 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,403 +0,0 @@
-
-local print = DEVIAN_WORKSPACE and function(...) print('VnRoster', ...) end or nop
-
-VeneerRosterKunMixin = {
-  anchorFrame = 'LFGListFrame',
-  anchorPoint = 'TOPLEFT',
-
-  AchievementsDirty = true,
-  GuildInfoDirty = true,
-  blocks = {},
-}
-
-
-local module = VeneerRosterKunMixin
-
-function module:OnLoad()
-  Veneer:AddHandler(self, self.anchorPoint)
-  --self:RegisterEvent('GUILD_ROSTER_UPDATE')
-  --self:RegisterEvent('GUILD_TRADESKILL_UPDATE')
-
-  --self:RegisterEvent('LFG_LIST_SEARCH_RESULT_UPDATED')
-  --self:RegisterEvent('LFG_LIST_SEARCH_RESULTS_RECEIVED')
-  --self:RegisterEvent('LFG_LIST_AVAILABILITY_UPDATE')
-  --self:RegisterEvent('LFG_LIST_LOCK_INFO_RECEIVED')
-  self:RegisterEvent('ADDON_LOADED')
-
-  hooksecurefunc("LFGListSearchPanel_SelectResult", function(obj)
-  print('LFGListSearchPanel_SelectResult')
-    self.selectedID = obj.selectedResult
-    print('selected =', self.selectedID)
-    self:UpdateAchievementLinks()
-  end)
-  hooksecurefunc("LFGListSearchPanel_SignUp", function(obj)
-    print('LFGListSearchPanel_SignUp', obj.selectedResult)
-
-
-    self.selectedID = obj.selectedResult
-    print('selected =', self.selectedID)
-    self:UpdateAchievementLinks()
-  end)
-end
-
-function module:Setup()
-  VeneerHandlerMixin.Setup(self)
-  self:SetParent(LFGListFrame)
-  self:SetPoint('TOPLEFT', LFGListFrame,'TOPRIGHT')
-  self:SetShown(true)
-end
-
-function module:SetDirty()
-  if self:IsVisible() then
-    self:Update()
-  else
-    self.GuildInfoDirty = true
-    self.AchievementsDirty = true
-  end
-end
-local firstLoad = true
-function module:OnShow()
-  print('|cFF00FFFFOnShow()|r')
-  self:Update(firstLoad)
-  firstLoad = nil
-end
-
-function module:UpdateGuildInfo()
-  local numMembers = GetNumGuildMembers()
-  print(numMembers)
-  for i = 1, numMembers do
-    --print(GetGuildRosterInfo(i))
-  end
-  self.GuildInfoDirty = nil
-end
-
--- cheevos to link
-local overlaps = {
-  [11781] = 11875,
-  [12002] = 12111,
-}
-local cheevos = {
-  -- Mythic Prog
-  {
-    -- Antorus
-    12002, -- argus
-    12001, -- aggramar
-    12000, -- coven
-    11999, -- barry
-    11998, -- kin'garoth
-    11997, -- imonar
-    11996, -- eonar
-    11995, -- portal keeper
-    11994, -- high command
-    11993, -- doggos
-    11992, -- worldbreaker
-
-    -- Tomb of Sargeras
-    11781, -- kj
-    11780, -- avatar
-    11779, -- maiden
-    11776, -- mistress
-    11778, -- host,
-    11777, -- sisters
-    11775, -- harjatan,
-    11774, -- di,
-    11773, -- goroth
-  },
-  -- Completion
-  {
-    12111, -- CE Argus,
-    12110, -- AotC Argus,
-    11875, -- CE KJ
-    11874, -- AotC KJ
-    11790 -- Deceiver's Fall,
-
-
-  },
-  -- Mythic+
-  {
-    11162, -- master
-    11185, -- conqueror
-  }
-}
-
-local invasion = {}
-local cheev = {}
-
-function cheev:OnClick()
-  local resultID = LFGListFrame.SearchPanel.selectedResult or self:GetParent().selectedID
-  print('current selection = ', resultID)
-  if ACTIVE_CHAT_EDIT_BOX then
-    ChatEdit_InsertLink(self.link)
-  elseif resultID then
-    local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted, leaderName = C_LFGList.GetSearchResultInfo(resultID);
-    --print(name, comment, leaderName)
-    ChatFrame_OpenChat("/w "..leaderName.." "..self.link, DEFAULT_CHAT_FRAME)
-  end
-end
-
-function invasion:OnClick()
-
-end
-
-function module:UpdateInvasionButtons()
-
-end
-
-local listed = {}
-
-function module:UpdateAchievementLinks()
-  print('UpdateAchievementLinks()')
-
-  local resultID = LFGListFrame.SearchPanel.selectedResult or self.selectedID
-  self:Show()
-
-
-  local index = 0
-  local lastBlock
-  local contentsHeight = 0
-  for _, group in ipairs(cheevos) do
-    for _, id in ipairs(group) do
-    local _, name, points, completed, month, day, year, description, flags, icon = GetAchievementInfo(id)
-      if completed then
-
-        -- if the highest mythic kill
-         if listed[overlaps[id]] then
-           break
-         end
-
-
-        index = index + 1
-        --print(index)
-        local block =self.blocks[index]
-        if not block then
-          block = CreateFrame('Button', 'VeneerRosterKunBlock'..index, self, 'VeneerRosterKunBlock')
-          block:SetScript('OnClick', cheev.OnClick)
-          block:SetID(index)
-          self.blocks[index] = block
-        end
-
-        block.link = GetAchievementLink(id)
-        block.Icon:SetTexture(icon)
-        block.Label:SetText(name)
-        block:ClearAllPoints()
-        if lastBlock then
-          block:SetPoint('TOPLEFT', lastBlock, 'BOTTOMLEFT', 0, 0)
-        else
-          block:SetPoint('TOPLEFT')
-        end
-        --print(block:GetHeight(), block:GetPoint(1))
-        block:Show()
-
-        contentsHeight = contentsHeight + block:GetHeight()
-
-        --print(index, name, icon)
-        lastBlock = block
-        listed[id] = true
-        break;
-      end
-    end
-  end
-
---[[
-  local areaPOIs = C_WorldMap.GetAreaPOIForMap(GetCurrentMapAreaID(), 1);
-  if areaPOIs then
-
-
-    for i, areaPoiID in ipairs(areaPOIs) do
-      local poiInfo = C_WorldMap.GetAreaPOIInfo(GetCurrentMapAreaID(), areaPoiID, 1);
-
-      index = index + 1
-      --print(index)
-      local block =self.blocks[index]
-      if not block then
-        block = CreateFrame('Button', 'VeneerRosterKunBlock'..index, self, 'VeneerRosterKunBlock')
-        block:SetScript('OnClick', invasion.OnClick)
-        block:SetID(index)
-        self.blocks[index] = block
-      end
-
-
-
-    end
-  end
- --]]
-
-  --print(index,  #self.blocks)
-  if index < #self.blocks then
-    for i = index+1, #self.blocks do
-      --print('hiding', i)
-      self.blocks[i]:Hide()
-    end
-
-  end
-
-  self:SetHeight(contentsHeight)
-
-end
-
-function module:Update(forced)
-
-
-  if self.GuildInfoDirty or forced then
-    self:UpdateGuildInfo()
-  end
-  if self.AchievementsDirty or forced then
-    self:UpdateAchievementLinks()
-  end
-
-
-end
-function module:SetupGuildUI()
-  self:UnregisterEvent('ADDON_LOADED')
-end
-function module:OnEvent(event, ...)
-  print('|cFFFF0088OnEvent()|r', event, ...)
-  if event == 'ADDON_LOADED' then
-    local addon = ...
-    if addon == 'Blizzard_GuildUI' then
-      self:SetupGuildUI()
-    end
-  elseif event == 'LFG_LIST_SEARCH_RESULTS_RECEIVED' then
-  elseif event == 'LFG_LIST_SEARCH_RESULT_UPDATED' then
-  end
-end
-
-
-VeneerPetBattleActionMixin = {}
-VeneerPetBattleInfoMixin = {}
-local pb = VeneerPetBattleInfoMixin
-local action = VeneerPetBattleActionMixin
-
-
-function pb:OnShow()
-  self:ClearAllPoints()
-  self:SetPoint('TOPLEFT', PetBattleFrame.EnemyBuffFrame, 'BOTTOMLEFT', 0, -12)
-  self:RegisterEvent('PET_BATTLE_PET_ROUND_PLAYBACK_COMPLETE')
-  self:RegisterEvent('PET_BATTLE_ACTION_SELECTED')
-  self:RegisterEvent('PET_BATTLE_TURN_STARTED')
-  print('pet on show')
-  self:Refresh()
-end
-
-function pb:OnHide()
-  print('pet on hide')
-  self:UnregisterAllEvents()
-end
-
-function pb:OnEvent(event)
-  print('pb event|cFFFF8800', event)
-  self:Refresh()
-end
-
-function pb:Refresh()
-  local myPetSlot = C_PetBattles.GetActivePet(1)
-  local myPetType = C_PetBattles.GetPetType(1, myPetSlot)
-
-  local index = 0
-  local nonActiveIndex = 0
-  local lastFrame, lastNonActive
-  for petSlot = 1, C_PetBattles.GetNumPets(2) do
-
-    for abilitySlot = 1,3 do
-      local _, name, texture, cooldown, tooltip,_, abilityType, noStrongWeakHints = C_PetBattles.GetAbilityInfo(2, petSlot, abilitySlot)
-      local petHealth = C_PetBattles.GetHealth(2, petSlot)
-
-      if petHealth >= 1 then
-        local isUsable, currentCooldown, currentLockdown = C_PetBattles.GetAbilityState(2, petSlot, abilitySlot);
-        --print(index, petSlot, abilitySlot, name, currentCooldown, currentLockdown, cooldown, petHealth)
-
-        index = index + 1
-        local frame = self.Abilities[index]
-
-        frame.ownerID = 2
-        frame.petIndex = petSlot
-        frame.abIndex = abilitySlot
-        frame.tooltip = tooltip
-        frame.Name:SetText(name)
-        frame.Icon:SetTexture(texture)
-        frame.TypeIcon:SetTexture("Interface\\PetBattles\\PetIcon-"..PET_TYPE_SUFFIX[abilityType])
-
-
-        for i = 1,C_PetBattles.GetNumPets(1) do
-          local myPetType = C_PetBattles.GetPetType(1, i)
-          if not (myPetType or abilityType) then
-            frame.BetterIcon[i]:Hide();
-          else
-            local modifier = C_PetBattles.GetAttackModifier(abilityType, myPetType)
-            if ( noStrongWeakHints or modifier == 1 ) then
-              frame.BetterIcon[i]:Hide();
-            elseif (modifier > 1) then
-              frame.BetterIcon[i]:SetTexture("Interface\\PetBattles\\BattleBar-AbilityBadge-Strong");
-              frame.BetterIcon[i]:Show();
-            elseif (modifier < 1) then
-              frame.BetterIcon[i]:SetTexture("Interface\\PetBattles\\BattleBar-AbilityBadge-Weak");
-              frame.BetterIcon[i]:Show();
-            end
-
-          end
-        end
-
-
-        if cooldown >= 1 then
-          frame.Border2:Show()
-        else
-
-          frame.Border2:Hide()
-        end
-
-
-        currentCooldown = (currentCooldown >= 1) and currentCooldown or 0
-        if petHealth == 0 then
-          frame.Cooldown:SetText(nil)
-          frame.Cooldown:SetTextColor(1,0,0)
-        else
-          if currentLockdown >= 1 and currentLockdown > currentCooldown then
-            frame.Cooldown:SetTextColor(1,0,0)
-          else
-            frame.Cooldown:SetTextColor(1,1,1)
-          end
-          frame.Cooldown:SetText((currentCooldown >= 1) and currentCooldown or nil)
-        end
-
-        frame:ClearAllPoints()
-        if petSlot ==  C_PetBattles.GetActivePet(2) then
-          frame:SetSize(48,48)
-          frame.Border2:SetSize(72,72)
-          frame.Icon:SetDesaturated(false)
-          frame.Name:SetTextColor(1,1,0)
-          if lastFrame then
-            frame:SetPoint('TOPLEFT', lastFrame, 'BOTTOMLEFT', 0, -4)
-          else
-            frame:SetPoint('TOPLEFT', self, 'TOPLEFT')
-          end
-          lastFrame = frame
-        else
-          frame:SetSize(24,24)
-          frame.Border2:SetSize(36,36)
-          frame.Name:SetTextColor(0.5,0.5,0.5)
-          frame.Icon:SetDesaturated(true)
-          if lastNonActive then
-            frame:SetPoint('TOPLEFT', lastNonActive, 'BOTTOMLEFT', 0, -2)
-          else
-            frame:SetPoint('TOPLEFT', self, 'TOPLEFT', 128, 0)
-          end
-          lastNonActive = frame
-        end
-        frame:Show()
-      end
-    end
-  end
-
-  for i = index + 1, #self.Abilities do
-    self.Abilities[i]:Hide()
-  end
-end
-
-function action:OnEnter()
-  PetBattleAbilityTooltip_SetAbility(self.ownerID, self.petIndex, self.abIndex);
-  PetBattleAbilityTooltip_Show("TOPRIGHT", self:GetParent(), "TOPLEFT", -5, 0, self.additionalText);
-end
-
-function action:OnLeave()
-  PetBattlePrimaryAbilityTooltip:Hide();
-end
\ No newline at end of file
--- a/Modules/GuildInfo.xml	Fri Dec 22 20:37:15 2017 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,131 +0,0 @@
-<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
-..\FrameXML\UI.xsd">
-  <Script file="GuildInfo.lua" />
-
-  <Frame name="$parentRosterKun" mixin="VeneerRosterKunMixin" parent="Veneer"  inherits="VeneerHandlerTemplate">
-
-    <Size x="200"/>
-    <Layers>
-      <Layer level="BACKGROUND">
-        <Texture setAllPoints="true">
-          <Color a="0.5" r="0" g="0" b="0" />
-        </Texture>
-      </Layer>
-    </Layers>
-
-
-  </Frame>
-
-  <Button name="VeneerRosterKunBlock" parent="VeneerRosterKun" parentArray="blocks" virtual="true">
-    <Size x="200" y="36" />
-    <Layers>
-      <Layer level="BACKGROUND">
-        <Texture parentKey="Icon">
-          <Anchors>
-            <Anchor point="TOPLEFT" />
-
-          </Anchors>
-          <Size x="36" y="36" />
-        </Texture>
-      </Layer>
-      <Layer level="OVERLAY">
-        <FontString inherits="GameFontNormal" parentKey="Label">
-          <Anchors>
-            <Anchor point="LEFT" relativePoint="RIGHT" relativeKey="$parent.Icon" x="4" y="0" />
-          </Anchors>
-        </FontString>
-      </Layer>
-    </Layers>
-    <HighlightTexture>
-      <Color a="0.2" r="0" g="0" b="1" />
-    </HighlightTexture>
-  </Button>
-
-
-  <Frame name="VeneerPetBattleAbilityTemplate" parent="VeneerPetBattleInfo" parentArray="Abilities" virtual="true" mixin="VeneerPetBattleActionMixin">
-    <Size x="48" y="48" />
-    <Scripts>
-      <OnEnter method="OnEnter" />
-      <OnLeave method="OnLeave" />
-    </Scripts>
-    <Layers>
-      <Layer level="BACKGROUND">
-        <Texture parentKey="Icon" setAllPoints="true" />
-
-      </Layer>
-      <Layer level="OVERLAY">
-        <Texture parentArray="BetterIcon">
-          <Size x="24" y="24" />
-          <Anchors>
-            <Anchor point="BOTTOMLEFT" relativePoint="BOTTOMRIGHT" />
-          </Anchors>
-        </Texture>
-        <Texture parentArray="BetterIcon">
-          <Size x="24" y="24" />
-          <Anchors>
-            <Anchor  point="BOTTOMLEFT" relativePoint="BOTTOMRIGHT" x="26" y="0" />
-          </Anchors>
-        </Texture>
-        <Texture parentArray="BetterIcon">
-          <Size x="24" y="24" />
-          <Anchors>
-            <Anchor  point="BOTTOMLEFT" relativePoint="BOTTOMRIGHT" x="54" y="0" />
-          </Anchors>
-        </Texture>
-        <FontString parentKey="Name" inherits="GameFontNormal">
-          <Anchors>
-            <Anchor point="TOPLEFT" relativePoint="TOPRIGHT" x="4" y="-4" />
-          </Anchors>
-        </FontString>
-        <FontString parentKey="Cooldown" inherits="GameFont_Gigantic">
-          <Anchors>
-            <Anchor point="CENTER" />
-          </Anchors>
-        </FontString>
-
-        <Texture parentKey="TypeIcon">
-          <Size x="16" y="16" />
-          <TexCoords left="0.79687500" right="0.49218750" top="0.50390625" bottom="0.65625000"/>
-          <Anchors>
-            <Anchor point="TOPRIGHT" />
-
-          </Anchors>
-        </Texture>
-
-        <Texture setAllPoints="true" hidden="true" file="">
-
-        </Texture>
-        <Texture parentKey="Border2" file="Interface\PetBattles\PetBattle-GoldSpeedFrame" hidden="true">
-          <Size x="48" y="48"/>
-          <Anchors>
-            <Anchor point="CENTER" relativeKey="$parent.Icon"/>
-          </Anchors>
-          <TexCoords left="0.0" right="0.84375" top="0.0" bottom="0.8515625"/>
-        </Texture>
-      </Layer>
-    </Layers>
-  </Frame>
-
-  <Frame name="VeneerPetBattleInfo" parent="PetBattleFrame" hidden="false" mixin="VeneerPetBattleInfoMixin">
-    <Size x="128" y="64" />
-    <Scripts>
-      <OnLoad method="OnLoad" />
-      <OnEvent method="OnEvent" />
-      <OnShow method="OnShow" />
-      <OnHide method="OnHide" />
-    </Scripts>
-    <Frames>
-      <Frame inherits="VeneerPetBattleAbilityTemplate" />
-      <Frame inherits="VeneerPetBattleAbilityTemplate" />
-      <Frame inherits="VeneerPetBattleAbilityTemplate" />
-      <Frame inherits="VeneerPetBattleAbilityTemplate" />
-      <Frame inherits="VeneerPetBattleAbilityTemplate" />
-      <Frame inherits="VeneerPetBattleAbilityTemplate" />
-      <Frame inherits="VeneerPetBattleAbilityTemplate" />
-      <Frame inherits="VeneerPetBattleAbilityTemplate" />
-      <Frame inherits="VeneerPetBattleAbilityTemplate" />
-    </Frames>
-  </Frame>
-
-
-</Ui>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Modules/LFGFrame.lua	Thu Jan 25 20:58:10 2018 -0500
@@ -0,0 +1,282 @@
+
+local print = DEVIAN_WORKSPACE and function(...) print('LFGFrame', ...) end or nop
+
+VeneerRosterKunMixin = {
+  anchorFrame = 'LFGListFrame',
+  anchorPoint = 'TOPLEFT',
+
+  InvasionsDirty = true,
+  AchievementsDirty = true,
+  GuildInfoDirty = true,
+  blocks = {},
+}
+
+
+local module = VeneerRosterKunMixin
+
+function module:OnLoad()
+  Veneer:AddHandler(self, self.anchorPoint)
+  self:RegisterEvent('ADDON_LOADED')
+
+  hooksecurefunc("LFGListCategorySelection_StartFindGroup", function(panel, questID)
+    print('LFGListCategorySelection_StartFindGroup', panel:GetParent(), questID)
+  end)
+  hooksecurefunc("LFGListCategorySelection_SelectCategory", function(panel, categoryID, filters)
+    print('LFGListCategorySelection_SelectCategory', panel:GetParent(), categoryID, filters)
+    print('\n',debugstack(3))
+  end)
+  hooksecurefunc("LFGListSearchPanel_SetCategory", function(panel, categoryID, filters, baseFilters)
+    print('LFGListSearchPanel_SetCategory', panel:GetParent(), categoryID, filters, baseFilters)
+  end)
+end
+
+function module:Setup()
+  VeneerHandlerMixin.Setup(self)
+  self:SetParent(LFGListFrame)
+  self:SetPoint('TOPLEFT', LFGListFrame,'TOPRIGHT')
+  self:SetShown(true)
+end
+
+function module:SetDirty()
+  if self:IsVisible() then
+    self:Update()
+  else
+    self.GuildInfoDirty = true
+    self.AchievementsDirty = true
+    self.InvasionsDirty = true
+  end
+end
+local firstLoad = true
+function module:OnShow()
+  print('|cFF00FFFFOnShow()|r')
+  self:Update(firstLoad)
+  firstLoad = nil
+
+  local locationName = GetRealZoneText()
+
+  if not C_LFGList.GetActiveEntryInfo() and locationName and locationName:match('Invasion') and not InCombatLockdown() then
+    PVEFrame_ShowFrame("GroupFinderFrame", LFGListPVEStub);
+    local panel = LFGListFrame.CategorySelection
+    LFGListCategorySelection_SelectCategory(panel, 6, 0);
+    LFGListCategorySelection_StartFindGroup(panel, locationName);
+  end
+end
+
+function module:UpdateGuildInfo()
+  local numMembers = GetNumGuildMembers()
+  print(numMembers)
+  for i = 1, numMembers do
+    --print(GetGuildRosterInfo(i))
+  end
+  self.GuildInfoDirty = nil
+end
+
+-- cheevos to link
+local overlaps = {
+  [11781] = 11875,
+  [12002] = 12111,
+}
+local cheevos = {
+  -- Mythic Prog
+  {
+    -- Antorus
+    12002, -- argus
+    12001, -- aggramar
+    12000, -- coven
+    11999, -- barry
+    11998, -- kin'garoth
+    11997, -- imonar
+    11996, -- eonar
+    11995, -- portal keeper
+    11994, -- high command
+    11993, -- doggos
+    11992, -- worldbreaker
+
+    -- Tomb of Sargeras
+    11781, -- kj
+    11780, -- avatar
+    11779, -- maiden
+    11776, -- mistress
+    11778, -- host,
+    11777, -- sisters
+    11775, -- harjatan,
+    11774, -- di,
+    11773, -- goroth
+  },
+  -- Completion
+  {
+    12111, -- CE Argus,
+    12110, -- AotC Argus,
+    11875, -- CE KJ
+    11874, -- AotC KJ
+    11790 -- Deceiver's Fall,
+
+
+  },
+  -- Mythic+
+  {
+    11162, -- master
+    11185, -- conqueror
+  }
+}
+
+local invasion = {}
+local cheev = {}
+
+function cheev:OnClick()
+  local resultID = LFGListFrame.SearchPanel.selectedResult or self:GetParent().selectedID
+  print('current selection = ', resultID)
+  if ACTIVE_CHAT_EDIT_BOX then
+    ChatEdit_InsertLink(self.link)
+  elseif resultID then
+    local id, activityID, name, comment, voiceChat, iLvl, honorLevel, age, numBNetFriends, numCharFriends, numGuildMates, isDelisted, leaderName = C_LFGList.GetSearchResultInfo(resultID);
+    --print(name, comment, leaderName)
+    ChatFrame_OpenChat("/w "..leaderName.." "..self.link, DEFAULT_CHAT_FRAME)
+  end
+end
+
+function invasion:OnClick()
+  if not InCombatLockdown() then
+  PVEFrame_ShowFrame("GroupFinderFrame", LFGListPVEStub);
+  local panel = LFGListFrame.CategorySelection
+  LFGListCategorySelection_SelectCategory(panel, 6, 0);
+  LFGListCategorySelection_StartFindGroup(panel, self.searchText);
+  end
+
+end
+
+local listed = {}
+
+
+function module:Update(forced)
+  if self.GuildInfoDirty or forced then
+    self:UpdateGuildInfo()
+  end
+  local numBlocks =  0
+  if self.AchievementsDirty or forced then
+    numBlocks = self:UpdateAchievementLinks(numBlocks)
+  end
+
+  if self.InvasionsDirty or forced then
+    numBlocks =  self:UpdateInvasionButtons(numBlocks)
+  end
+
+  local lastBlock
+  local contentsHeight = 0
+  for index, block in ipairs(self.blocks) do
+    if index > numBlocks then
+      block:Hide()
+    else
+      block:ClearAllPoints()
+      if lastBlock then
+        block:SetPoint('TOPLEFT', lastBlock, 'BOTTOMLEFT', 0, -2)
+      else
+        block:SetPoint('TOPLEFT', LFGListFrame, 'TOPRIGHT', 0, 0)
+      end
+      block:Show()
+      lastBlock = block
+
+      contentsHeight = contentsHeight + block:GetHeight()
+    end
+  end
+  self:SetHeight(contentsHeight)
+end
+
+
+function module:GetBlock(index)
+
+  local block =self.blocks[index]
+  if not block then
+    block = CreateFrame('Button', 'VeneerRosterKunBlock'..index, self, 'VeneerRosterKunBlock')
+
+    block:SetID(index)
+    self.blocks[index] = block
+  end
+  return block
+end
+
+function module:UpdateInvasionButtons(offset)
+  print('UpdateInvasionButtons()')
+  offset = offset or 0
+  local lastBlock = self.lastAchievement
+
+  local contentsHeight = 0
+  local areaPOIs = C_WorldMap.GetAreaPOIForMap(GetCurrentMapAreaID(), 1);
+  if areaPOIs then
+
+
+    for i, areaPoiID in ipairs(areaPOIs) do
+      local poiInfo = C_WorldMap.GetAreaPOIInfo(GetCurrentMapAreaID(), areaPoiID, 1);
+
+      offset = offset + 1
+      --print(index)
+      local block = self:GetBlock(offset)
+      block:SetScript('OnClick', invasion.OnClick)
+      block.Label:SetText(poiInfo.description)
+      block.Icon:SetAtlas(poiInfo.atlasName)
+      block.searchText = poiInfo.description
+      block.buttonType = 'group-poi'
+    end
+  end
+  return offset, contentsHeight
+end
+
+function module:UpdateAchievementLinks(offset)
+  print('UpdateAchievementLinks()')
+  offset = offset or 0
+  local resultID = LFGListFrame.SearchPanel.selectedResult or self.selectedID
+  self:Show()
+
+
+  local contentsHeight = 0
+  for _, group in ipairs(cheevos) do
+    for _, id in ipairs(group) do
+      local _, name, points, completed, month, day, year, description, flags, icon = GetAchievementInfo(id)
+      if completed then
+        -- if the highest mythic kill
+        if listed[overlaps[id]] then
+          break
+        end
+        offset = offset + 1
+        local block = self:GetBlock(offset)
+        block:SetScript('OnClick', cheev.OnClick)
+        --print(index)
+
+        block.link = GetAchievementLink(id)
+        block.Icon:SetTexture(icon)
+        block.Label:SetText(name)
+        block.buttonType = 'cheevo'
+
+        contentsHeight = contentsHeight + block:GetHeight()
+
+        --print(index, name, icon)
+        listed[id] = true
+        break;
+      end
+    end
+  end
+
+  self.lastAchievement = lastBlock
+
+  return offset, contentsHeight
+
+  --[[
+   --]]
+
+
+end
+
+function module:SetupGuildUI()
+  self:UnregisterEvent('ADDON_LOADED')
+end
+function module:OnEvent(event, ...)
+  print('|cFFFF0088OnEvent()|r', event, ...)
+  if event == 'ADDON_LOADED' then
+    local addon = ...
+    if addon == 'Blizzard_GuildUI' then
+      self:SetupGuildUI()
+    end
+  elseif event == 'LFG_LIST_SEARCH_RESULTS_RECEIVED' then
+  elseif event == 'LFG_LIST_SEARCH_RESULT_UPDATED' then
+  end
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Modules/LFGFrame.xml	Thu Jan 25 20:58:10 2018 -0500
@@ -0,0 +1,46 @@
+<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
+..\FrameXML\UI.xsd">
+
+    <Script file="LFGFrame.lua" />
+
+    <Frame name="$parentRosterKun" mixin="VeneerRosterKunMixin" parent="Veneer"  inherits="VeneerHandlerTemplate">
+
+    <Size x="200"/>
+    <Layers>
+        <Layer level="BACKGROUND">
+            <Texture setAllPoints="true">
+                <Color a="0.5" r="0" g="0" b="0" />
+            </Texture>
+        </Layer>
+    </Layers>
+
+
+    </Frame>
+
+    <Button name="VeneerRosterKunBlock" parent="VeneerRosterKun" parentArray="blocks" virtual="true">
+    <Size x="200" y="36" />
+    <Layers>
+        <Layer level="BACKGROUND">
+            <Texture parentKey="Icon">
+                <Anchors>
+                    <Anchor point="TOPLEFT" />
+
+                </Anchors>
+                <Size x="36" y="36" />
+            </Texture>
+        </Layer>
+        <Layer level="OVERLAY">
+            <FontString inherits="GameFontNormal" parentKey="Label">
+                <Anchors>
+                    <Anchor point="LEFT" relativePoint="RIGHT" relativeKey="$parent.Icon" x="4" y="0" />
+                </Anchors>
+            </FontString>
+        </Layer>
+    </Layers>
+    <HighlightTexture>
+        <Color a="0.2" r="0" g="0" b="1" />
+    </HighlightTexture>
+    </Button>
+
+
+</Ui>
\ No newline at end of file
--- a/Modules/PaperDoll.lua	Fri Dec 22 20:37:15 2017 -0500
+++ b/Modules/PaperDoll.lua	Thu Jan 25 20:58:10 2018 -0500
@@ -309,6 +309,7 @@
   local tooltip = VeneerPaperDollTooltip
 
   for i = 1, numRelics do
+    relicCache[i] = relicCache[i] or {}
     local relicName, relicIcon, relicType, relicLink = C_ArtifactUI.GetRelicInfo(i);
     local relicLevel = relicCache[i][2] or ""
     local relicForge = relicCache[i][5] or {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Modules/PetBattle.lua	Thu Jan 25 20:58:10 2018 -0500
@@ -0,0 +1,143 @@
+
+local print = DEVIAN_WORKSPACE and function(...) print('VnRoster', ...) end or nop
+
+
+
+VeneerPetBattleActionMixin = {}
+VeneerPetBattleInfoMixin = {}
+local pb = VeneerPetBattleInfoMixin
+local action = VeneerPetBattleActionMixin
+
+
+function pb:OnShow()
+  self:ClearAllPoints()
+  self:SetPoint('TOPLEFT', PetBattleFrame.EnemyBuffFrame, 'BOTTOMLEFT', 0, -12)
+  self:RegisterEvent('PET_BATTLE_PET_ROUND_PLAYBACK_COMPLETE')
+  self:RegisterEvent('PET_BATTLE_ACTION_SELECTED')
+  self:RegisterEvent('PET_BATTLE_TURN_STARTED')
+  print('pet on show')
+  self:Refresh()
+end
+
+function pb:OnHide()
+  print('pet on hide')
+  self:UnregisterAllEvents()
+end
+
+function pb:OnEvent(event)
+  print('pb event|cFFFF8800', event)
+  self:Refresh()
+end
+
+function pb:Refresh()
+  local myPetSlot = C_PetBattles.GetActivePet(1)
+  local myPetType = C_PetBattles.GetPetType(1, myPetSlot)
+
+  local index = 0
+  local nonActiveIndex = 0
+  local lastFrame, lastNonActive
+  for petSlot = 1, C_PetBattles.GetNumPets(2) do
+
+    for abilitySlot = 1,3 do
+      local _, name, texture, cooldown, tooltip,_, abilityType, noStrongWeakHints = C_PetBattles.GetAbilityInfo(2, petSlot, abilitySlot)
+      local petHealth = C_PetBattles.GetHealth(2, petSlot)
+
+      if petHealth >= 1 then
+        local isUsable, currentCooldown, currentLockdown = C_PetBattles.GetAbilityState(2, petSlot, abilitySlot);
+        --print(index, petSlot, abilitySlot, name, currentCooldown, currentLockdown, cooldown, petHealth)
+
+        index = index + 1
+        local frame = self.Abilities[index]
+
+        frame.ownerID = 2
+        frame.petIndex = petSlot
+        frame.abIndex = abilitySlot
+        frame.tooltip = tooltip
+        frame.Name:SetText(name)
+        frame.Icon:SetTexture(texture)
+        frame.TypeIcon:SetTexture("Interface\\PetBattles\\PetIcon-"..PET_TYPE_SUFFIX[abilityType])
+
+
+        for i = 1,C_PetBattles.GetNumPets(1) do
+          local myPetType = C_PetBattles.GetPetType(1, i)
+          if not (myPetType or abilityType) then
+            frame.BetterIcon[i]:Hide();
+          else
+            local modifier = C_PetBattles.GetAttackModifier(abilityType, myPetType)
+            if ( noStrongWeakHints or modifier == 1 ) then
+              frame.BetterIcon[i]:Hide();
+            elseif (modifier > 1) then
+              frame.BetterIcon[i]:SetTexture("Interface\\PetBattles\\BattleBar-AbilityBadge-Strong");
+              frame.BetterIcon[i]:Show();
+            elseif (modifier < 1) then
+              frame.BetterIcon[i]:SetTexture("Interface\\PetBattles\\BattleBar-AbilityBadge-Weak");
+              frame.BetterIcon[i]:Show();
+            end
+
+          end
+        end
+
+
+        if cooldown >= 1 then
+          frame.Border2:Show()
+        else
+
+          frame.Border2:Hide()
+        end
+
+
+        currentCooldown = (currentCooldown >= 1) and currentCooldown or 0
+        if petHealth == 0 then
+          frame.Cooldown:SetText(nil)
+          frame.Cooldown:SetTextColor(1,0,0)
+        else
+          if currentLockdown >= 1 and currentLockdown > currentCooldown then
+            frame.Cooldown:SetTextColor(1,0,0)
+          else
+            frame.Cooldown:SetTextColor(1,1,1)
+          end
+          frame.Cooldown:SetText((currentCooldown >= 1) and currentCooldown or nil)
+        end
+
+        frame:ClearAllPoints()
+        if petSlot ==  C_PetBattles.GetActivePet(2) then
+          frame:SetSize(48,48)
+          frame.Border2:SetSize(72,72)
+          frame.Icon:SetDesaturated(false)
+          frame.Name:SetTextColor(1,1,0)
+          if lastFrame then
+            frame:SetPoint('TOPLEFT', lastFrame, 'BOTTOMLEFT', 0, -4)
+          else
+            frame:SetPoint('TOPLEFT', self, 'TOPLEFT')
+          end
+          lastFrame = frame
+        else
+          frame:SetSize(24,24)
+          frame.Border2:SetSize(36,36)
+          frame.Name:SetTextColor(0.5,0.5,0.5)
+          frame.Icon:SetDesaturated(true)
+          if lastNonActive then
+            frame:SetPoint('TOPLEFT', lastNonActive, 'BOTTOMLEFT', 0, -2)
+          else
+            frame:SetPoint('TOPLEFT', self, 'TOPLEFT', 128, 0)
+          end
+          lastNonActive = frame
+        end
+        frame:Show()
+      end
+    end
+  end
+
+  for i = index + 1, #self.Abilities do
+    self.Abilities[i]:Hide()
+  end
+end
+
+function action:OnEnter()
+  PetBattleAbilityTooltip_SetAbility(self.ownerID, self.petIndex, self.abIndex);
+  PetBattleAbilityTooltip_Show("TOPRIGHT", self:GetParent(), "TOPLEFT", -5, 0, self.additionalText);
+end
+
+function action:OnLeave()
+  PetBattlePrimaryAbilityTooltip:Hide();
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Modules/PetBattle.xml	Thu Jan 25 20:58:10 2018 -0500
@@ -0,0 +1,92 @@
+<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/
+..\FrameXML\UI.xsd">
+
+  <Script file="PetBattle.lua" />
+
+  <Frame name="VeneerPetBattleAbilityTemplate" parent="VeneerPetBattleInfo" parentArray="Abilities" virtual="true" mixin="VeneerPetBattleActionMixin">
+    <Size x="48" y="48" />
+    <Scripts>
+      <OnEnter method="OnEnter" />
+      <OnLeave method="OnLeave" />
+    </Scripts>
+    <Layers>
+      <Layer level="BACKGROUND">
+        <Texture parentKey="Icon" setAllPoints="true" />
+
+      </Layer>
+      <Layer level="OVERLAY">
+        <Texture parentArray="BetterIcon">
+          <Size x="24" y="24" />
+          <Anchors>
+            <Anchor point="BOTTOMLEFT" relativePoint="BOTTOMRIGHT" />
+          </Anchors>
+        </Texture>
+        <Texture parentArray="BetterIcon">
+          <Size x="24" y="24" />
+          <Anchors>
+            <Anchor  point="BOTTOMLEFT" relativePoint="BOTTOMRIGHT" x="26" y="0" />
+          </Anchors>
+        </Texture>
+        <Texture parentArray="BetterIcon">
+          <Size x="24" y="24" />
+          <Anchors>
+            <Anchor  point="BOTTOMLEFT" relativePoint="BOTTOMRIGHT" x="54" y="0" />
+          </Anchors>
+        </Texture>
+        <FontString parentKey="Name" inherits="GameFontNormal">
+          <Anchors>
+            <Anchor point="TOPLEFT" relativePoint="TOPRIGHT" x="4" y="-4" />
+          </Anchors>
+        </FontString>
+        <FontString parentKey="Cooldown" inherits="GameFont_Gigantic">
+          <Anchors>
+            <Anchor point="CENTER" />
+          </Anchors>
+        </FontString>
+
+        <Texture parentKey="TypeIcon">
+          <Size x="16" y="16" />
+          <TexCoords left="0.79687500" right="0.49218750" top="0.50390625" bottom="0.65625000"/>
+          <Anchors>
+            <Anchor point="TOPRIGHT" />
+
+          </Anchors>
+        </Texture>
+
+        <Texture setAllPoints="true" hidden="true" file="">
+
+        </Texture>
+        <Texture parentKey="Border2" file="Interface\PetBattles\PetBattle-GoldSpeedFrame" hidden="true">
+          <Size x="48" y="48"/>
+          <Anchors>
+            <Anchor point="CENTER" relativeKey="$parent.Icon"/>
+          </Anchors>
+          <TexCoords left="0.0" right="0.84375" top="0.0" bottom="0.8515625"/>
+        </Texture>
+      </Layer>
+    </Layers>
+  </Frame>
+
+  <Frame name="VeneerPetBattleInfo" parent="PetBattleFrame" hidden="false" mixin="VeneerPetBattleInfoMixin">
+    <Size x="128" y="64" />
+    <Scripts>
+      <OnLoad method="OnLoad" />
+      <OnEvent method="OnEvent" />
+      <OnShow method="OnShow" />
+      <OnHide method="OnHide" />
+    </Scripts>
+    <Frames>
+      <Frame inherits="VeneerPetBattleAbilityTemplate" />
+      <Frame inherits="VeneerPetBattleAbilityTemplate" />
+      <Frame inherits="VeneerPetBattleAbilityTemplate" />
+      <Frame inherits="VeneerPetBattleAbilityTemplate" />
+      <Frame inherits="VeneerPetBattleAbilityTemplate" />
+      <Frame inherits="VeneerPetBattleAbilityTemplate" />
+      <Frame inherits="VeneerPetBattleAbilityTemplate" />
+      <Frame inherits="VeneerPetBattleAbilityTemplate" />
+      <Frame inherits="VeneerPetBattleAbilityTemplate" />
+    </Frames>
+  </Frame>
+
+
+</Ui>
\ No newline at end of file
--- a/Veneer.toc	Fri Dec 22 20:37:15 2017 -0500
+++ b/Veneer.toc	Thu Jan 25 20:58:10 2018 -0500
@@ -18,6 +18,7 @@
 Modules\TalkingHead.xml
 Modules\BuffFrame.xml
 Modules\PaperDoll.xml
-Modules\GuildInfo.xml
+Modules\PetBattle.xml
 Modules\ArtifactPower.xml
-Modules\FriendsFrame.xml
\ No newline at end of file
+Modules\FriendsFrame.xml
+Modules\LFGFrame.xml
\ No newline at end of file