You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
269 lines
9.7 KiB
269 lines
9.7 KiB
local addonName, addon = ...
|
|
--addon = LibStub("AceAddon-3.0"):NewAddon(addon, addonName, "AceEvent-3.0", "AceConsole-3.0", "AceHook-3.0")
|
|
addon = LibStub("AceAddon-3.0"):GetAddon(addonName)
|
|
|
|
|
|
--Stubs to for when MogIt is not loaded
|
|
local MogIt = {}
|
|
addon.MogIt = MogIt
|
|
function MogIt.GetMogitOutfits() return {} end
|
|
function MogIt.GetMogitWishlist() return {["extraset"] = {},["name"] = "MogIt Wishlist",["item"] = {}, ["set"] = {},} end
|
|
MogIt.MogitSets = {}
|
|
|
|
function MogIt:DeleteSet(setName, noConfirm)
|
|
end
|
|
function MogIt:RenameSet(setName)
|
|
end
|
|
|
|
if not IsAddOnLoaded("MogIt") then return end
|
|
|
|
local mog = _G["MogIt"]
|
|
local L = LibStub("AceLocale-3.0"):GetLocale(addonName)
|
|
local Wishlist = mog:GetModule("Wishlist")
|
|
|
|
local function SetHooks()
|
|
if addon:IsHooked(Wishlist, "DeleteSet") then return end
|
|
addon:SecureHook(Wishlist, "DeleteSet", function(self) addon:SendMessage("BW_TRANSMOG_COLLECTION_UPDATED") end)
|
|
addon:SecureHook(Wishlist, "RenameSet", function(self) addon:SendMessage("BW_TRANSMOG_COLLECTION_UPDATED") end)
|
|
addon:SecureHook(Wishlist, "CreateSet", function(self) addon:SendMessage("BW_TRANSMOG_COLLECTION_UPDATED") end)
|
|
addon:SecureHook(Wishlist, "GetSet", function(self) addon:SendMessage("BW_TRANSMOG_COLLECTION_UPDATED") end)
|
|
addon:SecureHook(Wishlist, "BuildList", function(self) addon:SendMessage("BW_TRANSMOG_COLLECTION_UPDATED") end)
|
|
end
|
|
|
|
function MogIt:DeleteSet(setName, noConfirm)
|
|
Wishlist:DeleteSet(setName, noConfirm)
|
|
--addon:SendMessage("BW_TRANSMOG_COLLECTION_UPDATED")
|
|
end
|
|
|
|
function MogIt:RenameSet(setName)
|
|
Wishlist:RenameSet(setName)
|
|
--addon:SendMessage("BW_TRANSMOG_COLLECTION_UPDATED")
|
|
end
|
|
local function UpdateFrames()
|
|
--Hooks into the extra sets scroll frame buttons to allow ctrl-right clicking on the button to generate a mogit preview
|
|
|
|
for i, model in ipairs(BetterWardrobeCollectionFrame.ItemsCollectionFrame.Models) do
|
|
model:SetScript("OnMouseDown", function(self, button)
|
|
if IsControlKeyDown() and button == "RightButton" then
|
|
local itemsCollectionFrame = self:GetParent()
|
|
if not itemsCollectionFrame.transmogLocation:IsIllusion() then
|
|
local sources = CollectionWardrobeUtil.GetSortedAppearanceSources(self.visualInfo.visualID, itemsCollectionFrame:GetActiveCategory(), itemsCollectionFrame.transmogLocation)
|
|
if BetterWardrobeCollectionFrame.tooltipSourceIndex then
|
|
local index = CollectionWardrobeUtil.GetValidIndexForNumSources(BetterWardrobeCollectionFrame.tooltipSourceIndex, #sources)
|
|
local link = select(6, C_TransmogCollection.GetAppearanceSourceInfo(sources[index].sourceID))
|
|
mog:AddToPreview(link)
|
|
return
|
|
end
|
|
else
|
|
mog:SetPreviewEnchant(mog:GetPreview(mog.activePreview), self.visualInfo.sourceID);
|
|
end
|
|
end
|
|
self:OnMouseDown(button)
|
|
end)
|
|
end
|
|
|
|
ScrollUtil.AddInitializedFrameCallback(BetterWardrobeCollectionFrame.SetsCollectionFrame.ListContainer.ScrollBox, function(self, button, elementData)
|
|
if not button.mogitInit then
|
|
local orig_OnClick = button:GetScript("OnClick");
|
|
button:SetScript("OnClick", function(self, button2)
|
|
if IsControlKeyDown() and button2 == "RightButton" then
|
|
local preview = mog:GetPreview();
|
|
local sources = (index == 1 and C_TransmogSets.GetSetSources(self.setID)) or addon.GetSetsources(self.setID)
|
|
for source in pairs(sources) do
|
|
mog:AddToPreview(select(6, C_TransmogCollection.GetAppearanceSourceInfo(source)), preview);
|
|
end
|
|
return
|
|
end
|
|
orig_OnClick(self, button2);
|
|
end);
|
|
button.mogitInit = true;
|
|
end
|
|
end, self, true);
|
|
-- WardrobeCollectionFrame.SetsCollectionFrame.DetailsFrame.itemFramesPool.resetterFunc = function(self, obj) obj:RegisterForDrag("LeftButton", "RightButton") end
|
|
end
|
|
|
|
addon:RegisterMessage("BW_ADDON_LOADED", function() C_Timer.After(0.5, function()UpdateFrames()end) end)
|
|
|
|
addon:RegisterMessage("BW_OnPlayerEnterWorld", function() SetHooks() end)
|
|
|
|
|
|
function MogIt.GetMogitOutfits()
|
|
local sets = Wishlist:GetSets(nil, true)
|
|
if #sets == 0 then return end
|
|
|
|
local mogSets = {}
|
|
local slotList = addon.Globals.slots
|
|
for i, set in pairs(sets) do
|
|
local data = {}
|
|
data.name = set.name or ""
|
|
--data.name = "MogIt - " .. set.name or ""
|
|
data.set = "mogit"
|
|
data.setType = "SavedMogIt"
|
|
data.label = L["MogIt Set"]
|
|
data.index = i + 60000
|
|
data.outfitID = 60000 + i
|
|
data.mainHandEnchant = 0
|
|
data.offHandEnchant = 0
|
|
data.offShoulder = 0
|
|
data.itemData = data.itemData or {}
|
|
|
|
for i, invSlot in ipairs(slotList) do
|
|
local slotID = GetInventorySlotInfo(invSlot)
|
|
local itemLink = set.items[invSlot]
|
|
--print(itemLink)
|
|
if itemLink then
|
|
local appearanceID, sourceID = C_TransmogCollection.GetItemInfo(itemLink)
|
|
local sourceInfoSuccess, sourceInfo = pcall(C_TransmogCollection.GetSourceInfo, sourceID)
|
|
if (sourceInfoSuccess) then
|
|
local appearanceID = sourceInfo.visualID
|
|
local itemID = sourceInfo.itemID
|
|
local itemMod = sourceInfo.itemModID
|
|
--print(invSlot)
|
|
data.itemData[slotID] = {"'"..itemID..":"..itemMod.."'", sourceID, appearanceID}
|
|
if not data.icon then
|
|
--local categoryID, visualID, canEnchant, icon, isCollected, itemLink, transmogLink, unknown1 = C_TransmogCollection.GetAppearanceSourceInfo(itemLink)
|
|
local _, _, _, _, icon, _, _ = GetItemInfoInstant(itemLink)
|
|
data.icon = icon
|
|
end
|
|
end
|
|
end
|
|
end
|
|
--[[local items = set.items
|
|
local sources = {}
|
|
for i, invSlot in ipairs(addon.Globals.slots) do
|
|
local slotID = GetInventorySlotInfo(invSlot)
|
|
local item = items[invSlot]
|
|
data.items[slotID] = item
|
|
local icon
|
|
if item then
|
|
local sourceID = addon.GetSourceFromItem(item)
|
|
local sourceInfo = C_TransmogCollection.GetSourceInfo(sourceID)
|
|
--print(sourceID)
|
|
sources[item] = sourceInfo.visualID
|
|
if not icon then
|
|
icon = select(5, GetItemInfoInstant(item))
|
|
data.icon = icon
|
|
end
|
|
end
|
|
end]]
|
|
--data.sources = sources
|
|
MogIt.MogitSets[data.index] = data
|
|
tinsert(mogSets, data)
|
|
end
|
|
|
|
return mogSets
|
|
end
|
|
|
|
function MogIt.GetMogitWishlist()
|
|
local list = Wishlist:BuildList()
|
|
local item_list = {["extraset"] = {},["name"] = "MogIt Wishlist",["item"] = {}, ["set"] = {},}
|
|
for i, itemlink in ipairs(list) do
|
|
if type(itemlink) == "string" then
|
|
local appearanceID, sourceID = C_TransmogCollection.GetItemInfo(itemlink)
|
|
if appearanceID then
|
|
item_list.item[appearanceID] = true
|
|
end
|
|
end
|
|
end
|
|
return item_list
|
|
end
|
|
|
|
|
|
local function matchVisual(itemlink)
|
|
local appearanceID, sourceID = C_TransmogCollection.GetItemInfo(itemlink)
|
|
local list = Wishlist:BuildList()
|
|
|
|
for i, mog_itemlink in ipairs(list) do
|
|
if type(mog_itemlink) == "string" then
|
|
local mog_appearanceID = C_TransmogCollection.GetItemInfo(mog_itemlink)
|
|
if appearanceID == mog_appearanceID then
|
|
return mog_itemlink
|
|
end
|
|
end
|
|
end
|
|
|
|
return nil
|
|
end
|
|
|
|
|
|
function MogIt.UpdateWishlistItem(type, typeID, add)
|
|
local addSet
|
|
if type == "item" then
|
|
local itemlink
|
|
local sources = C_TransmogCollection.GetAllAppearanceSources(typeID)
|
|
if sources then
|
|
itemlink = select(6, C_TransmogCollection.GetAppearanceSourceInfo(sources[1]))
|
|
|
|
if add then
|
|
Wishlist:AddItem(itemlink)
|
|
mog:BuildList(nil, "Wishlist")
|
|
else
|
|
local mogitItem = matchVisual(itemlink)
|
|
Wishlist:DeleteItem(mogitItem)
|
|
mog:BuildList(nil, "Wishlist")
|
|
end
|
|
print(add and L["Appearance added."] or L["Appearance removed."] )
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:RefreshVisualsList()
|
|
BetterWardrobeCollectionFrame.ItemsCollectionFrame:UpdateItems()
|
|
end
|
|
else
|
|
local sources
|
|
if type == "set" then
|
|
sources = C_TransmogSets.GetSetSources(typeID)
|
|
setName = C_TransmogSets.GetSetInfo(typeID).name
|
|
else
|
|
setInfo = addon.GetSetInfo(typeID)
|
|
sources = addon.GetSetsources(typeID)
|
|
setName = "name"
|
|
itemModID = setInfo.mod or 0
|
|
end
|
|
|
|
for sourceID, isCollected in pairs(sources) do
|
|
local sourceInfo = C_TransmogCollection.GetSourceInfo(sourceID)
|
|
local visualID = C_TransmogCollection.GetItemInfo(sourceInfo.itemID, itemModID)--(type == "set" and sourceInfo.visualID) or addon.GetItemSource(sourceID, setInfo.mod)
|
|
if visualID then
|
|
addSet = MogIt.UpdateWishlistItem("item", visualID, add or nil)
|
|
end
|
|
end
|
|
|
|
--print( addSet and L["%s: Uncollected items added"]:format(setName) or L["No new appearces needed."])
|
|
return addSet
|
|
end
|
|
end
|
|
|
|
local MAX_DEFAULT_OUTFITS = C_TransmogCollection.GetNumMaxOutfits()
|
|
local function IsDefaultSet(outfitID)
|
|
|
|
return outfitID < MAX_DEFAULT_OUTFITS -- #C_TransmogCollection.GetOutfits()--MAX_DEFAULT_OUTFITS
|
|
end
|
|
|
|
function MogIt:CopySet(outfitID)
|
|
local icon
|
|
local outfit
|
|
|
|
local itemTransmogInfoList = {}
|
|
setdata = addon.GetSetInfo(outfitID)
|
|
local name = setdata.name.." (Copy)"
|
|
local icon = setdata.icon
|
|
local itemlist = setdata.sources
|
|
|
|
--for key, transmogSlot in pairs(TRANSMOG_SLOTS) do
|
|
for slotID = 1, 19 do
|
|
--local slotID = transmogSlot.location:GetSlotID();
|
|
local itemTransmogInfo = ItemUtil.CreateItemTransmogInfo(itemlist[slotID] or 0, 0, 0);
|
|
itemTransmogInfoList[slotID] = itemTransmogInfo
|
|
end
|
|
|
|
if (outfitID and IsDefaultSet(outfitID)) or (#C_TransmogCollection.GetOutfits() < MAX_DEFAULT_OUTFITS) then
|
|
outfitID = C_TransmogCollection.NewOutfit(name, icon, itemTransmogInfoList);
|
|
else
|
|
tinsert(addon.OutfitDB.char.outfits, setdata)
|
|
outfit = addon.OutfitDB.char.outfits[#addon.OutfitDB.char.outfits]
|
|
outfit["name"] = name
|
|
outfit.setID = nil
|
|
--outfit["icon"] = setdata.icon
|
|
--outfit.itemTransmogInfoList = itemTransmogInfoList or {}
|
|
end
|
|
|
|
addon:SendMessage("BW_TRANSMOG_COLLECTION_UPDATED")
|
|
end
|
|
|