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.
88 lines
3.1 KiB
88 lines
3.1 KiB
|
3 years ago
|
-- This is a modified version of the Storyline Quest Data Provider code but using BtWQuests data instead of C_QuestLine data to get a list of quests
|
||
|
|
-- /run BtWQuests_QuestDataProvider = CreateFromMixins(BtWQuests_QuestDataProviderMixin);WorldMapFrame:AddDataProvider(BtWQuests_QuestDataProvider);
|
||
|
|
BtWQuestsQuestDataProviderMixin = CreateFromMixins(MapCanvasDataProviderMixin);
|
||
|
|
function BtWQuestsQuestDataProviderMixin:OnAdded(mapCanvas)
|
||
|
|
MapCanvasDataProviderMixin.OnAdded(self, mapCanvas);
|
||
|
|
mapCanvas:SetPinTemplateType("BtWQuestsQuestPinTemplate", "BUTTON");
|
||
|
|
end
|
||
|
|
|
||
|
|
function BtWQuestsQuestDataProviderMixin:RemoveAllData()
|
||
|
|
self:GetMap():RemoveAllPinsByTemplate("BtWQuestsQuestPinTemplate");
|
||
|
|
end
|
||
|
|
|
||
|
|
function BtWQuestsQuestDataProviderMixin:RefreshAllData(fromOnShow)
|
||
|
|
self:RemoveAllData();
|
||
|
|
|
||
|
|
if BtWQuests.Settings.showMapPins then
|
||
|
|
local mapID = self:GetMap():GetMapID();
|
||
|
|
local mapInfo = C_Map.GetMapInfo(mapID);
|
||
|
|
if mapInfo and mapInfo.mapType ~= Enum.UIMapType.Continent and mapInfo.mapType ~= Enum.UIMapType.World and mapInfo.mapType ~= Enum.UIMapType.Cosmic then
|
||
|
|
local items = BtWQuestsDatabase:GetAvailableMapItems(mapID, BtWQuestsCharacters:GetPlayer())
|
||
|
|
for _,item in ipairs(items) do
|
||
|
|
local pin = self:GetMap():AcquirePin("BtWQuestsQuestPinTemplate", item.itemName);
|
||
|
|
pin:SetPosition(item.x, item.y);
|
||
|
|
if BtWQuests.Settings.smallMapPins then
|
||
|
|
pin:SetSize(16, 16);
|
||
|
|
else
|
||
|
|
pin:SetSize(22, 22);
|
||
|
|
end
|
||
|
|
pin:Show();
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
BtWQuestsQuestPinMixin = CreateFromMixins(MapCanvasPinMixin);
|
||
|
|
function BtWQuestsQuestPinMixin:OnLoad()
|
||
|
|
self:SetScalingLimits(1, 1.0, 1.2);
|
||
|
|
self:UseFrameLevelType("PIN_FRAME_LEVEL_STORY_LINE");
|
||
|
|
end
|
||
|
|
function BtWQuestsQuestPinMixin:OnAcquired(itemName)
|
||
|
|
self.itemName = itemName;
|
||
|
|
self.mapID = self:GetMap():GetMapID();
|
||
|
|
end
|
||
|
|
function BtWQuestsQuestPinMixin:SetName(value)
|
||
|
|
self.itemName = value
|
||
|
|
end
|
||
|
|
function BtWQuestsQuestPinMixin:IsMouseWithin()
|
||
|
|
return MouseIsOver(self)
|
||
|
|
end
|
||
|
|
function BtWQuestsQuestPinMixin:OnUpdate()
|
||
|
|
local x, y = GetCursorPosition()
|
||
|
|
if x == self.lastMouseX and y == self.lastMouseY then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
self.lastMouseX, self.lastMouseY = x, y
|
||
|
|
|
||
|
|
local quests = {}
|
||
|
|
for pin in self:GetMap():EnumeratePinsByTemplate("BtWQuestsQuestPinTemplate") do
|
||
|
|
if pin:IsMouseWithin() then
|
||
|
|
quests[#quests+1] = pin.itemName
|
||
|
|
end
|
||
|
|
end
|
||
|
|
local tooltip = WorldMapTooltip or GameTooltip
|
||
|
|
tooltip:SetOwner(self, "ANCHOR_LEFT");
|
||
|
|
if #quests == 1 then
|
||
|
|
tooltip:AddLine(quests[1]);
|
||
|
|
tooltip:AddLine(AVAILABLE_QUEST, 1, 1, 1, true);
|
||
|
|
else
|
||
|
|
tooltip:AddLine(AVAILABLE_QUESTS, 1, 1, 1, true);
|
||
|
|
for _,itemName in ipairs(quests) do
|
||
|
|
tooltip:AddLine(itemName);
|
||
|
|
end
|
||
|
|
end
|
||
|
|
tooltip:Show();
|
||
|
|
end
|
||
|
|
function BtWQuestsQuestPinMixin:OnMouseEnter()
|
||
|
|
self:SetScript("OnUpdate", self.OnUpdate)
|
||
|
|
end
|
||
|
|
function BtWQuestsQuestPinMixin:OnMouseLeave()
|
||
|
|
self:SetScript("OnUpdate", nil)
|
||
|
|
|
||
|
|
local tooltip = WorldMapTooltip or GameTooltip
|
||
|
|
tooltip:Hide();
|
||
|
|
end
|
||
|
|
function BtWQuestsQuestPinMixin:OnClick()
|
||
|
|
local x, y = self:GetPosition()
|
||
|
|
BtWQuests_AddWaypoint(self.mapID, x, y, self.itemName)
|
||
|
|
end
|