ff118b5dc0
* Added DBM Pull timer, moved around buttons Added DBM Pull timer button (will do nothing without DBM, calls the command through the chat) and moved around buttons so you have Ready Check and DBM Pull as the last 2 buttons (easier to use imo) * Update RaidUtility.lua Added a check for DBM-Core, has to be loaded for the buttons to show. Split the timers in 2, one for a 10s pull timer and one for a 5s pull timer. Right now it calls the command through the chat box, if I find the correct API from DBM I will make it call that
254 lines
9.5 KiB
Lua
254 lines
9.5 KiB
Lua
local E, L = unpack(select(2, ...)); --Import: Engine, Locales
|
|
local RU = E:GetModule("RaidUtility")
|
|
local S = E:GetModule("Skins")
|
|
|
|
--Lua functions
|
|
local find = string.find
|
|
--WoW API / Variables
|
|
local CreateFrame = CreateFrame
|
|
local IsInInstance = IsInInstance
|
|
local GetNumRaidMembers = GetNumRaidMembers
|
|
local GetNumPartyMembers = GetNumPartyMembers
|
|
local IsPartyLeader = IsPartyLeader
|
|
local IsRaidLeader = IsRaidLeader
|
|
local IsRaidOfficer = IsRaidOfficer
|
|
local InCombatLockdown = InCombatLockdown
|
|
local DoReadyCheck = DoReadyCheck
|
|
local ToggleFriendsFrame = ToggleFriendsFrame
|
|
|
|
if IsAddOnLoaded("DBM-Core") then
|
|
PANEL_HEIGHT = 120
|
|
else
|
|
PANEL_HEIGHT = 100
|
|
end
|
|
|
|
local function CheckRaidStatus()
|
|
local inInstance, instanceType = IsInInstance()
|
|
if (((IsRaidLeader() or IsRaidOfficer()) and GetNumRaidMembers() > 0) or (IsPartyLeader() and GetNumPartyMembers() > 0)) and not (inInstance and (instanceType == "pvp" or instanceType == "arena")) then
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
-- Function to create buttons in this module
|
|
function RU:CreateUtilButton(name, parent, template, width, height, point, relativeto, point2, xOfs, yOfs, text, texture)
|
|
local button = CreateFrame("Button", name, parent, template)
|
|
button:Width(width)
|
|
button:Height(height)
|
|
button:Point(point, relativeto, point2, xOfs, yOfs)
|
|
S:HandleButton(button)
|
|
|
|
if text then
|
|
button.text = button:CreateFontString(nil, "OVERLAY", button)
|
|
button.text:FontTemplate()
|
|
button.text:Point("CENTER", button, "CENTER", 0, -1)
|
|
button.text:SetJustifyH("CENTER")
|
|
button.text:SetText(text)
|
|
button:SetFontString(button.text)
|
|
elseif texture then
|
|
button.texture = button:CreateTexture(nil, "OVERLAY", nil)
|
|
button.texture:SetTexture(texture)
|
|
button.texture:Point("TOPLEFT", button, "TOPLEFT", E.mult, -E.mult)
|
|
button.texture:Point("BOTTOMRIGHT", button, "BOTTOMRIGHT", -E.mult, E.mult)
|
|
end
|
|
end
|
|
|
|
function RU:ToggleRaidUtil(event)
|
|
if InCombatLockdown() then
|
|
self:RegisterEvent("PLAYER_REGEN_ENABLED", "ToggleRaidUtil")
|
|
return
|
|
end
|
|
|
|
if CheckRaidStatus() then
|
|
if RaidUtilityPanel.toggled == true then
|
|
RaidUtility_ShowButton:Hide()
|
|
RaidUtilityPanel:Show()
|
|
else
|
|
RaidUtility_ShowButton:Show()
|
|
RaidUtilityPanel:Hide()
|
|
end
|
|
else
|
|
RaidUtility_ShowButton:Hide()
|
|
RaidUtilityPanel:Hide()
|
|
end
|
|
|
|
if event == "PLAYER_REGEN_ENABLED" then
|
|
self:UnregisterEvent("PLAYER_REGEN_ENABLED", "ToggleRaidUtil")
|
|
end
|
|
end
|
|
|
|
function RU:Initialize()
|
|
if not E.private.general.raidUtility then return end
|
|
self.Initialized = true
|
|
|
|
--Create main frame
|
|
local RaidUtilityPanel = CreateFrame("Frame", "RaidUtilityPanel", E.UIParent, "SecureHandlerClickTemplate")
|
|
RaidUtilityPanel:SetTemplate("Transparent")
|
|
RaidUtilityPanel:Width(230)
|
|
RaidUtilityPanel:Height(PANEL_HEIGHT)
|
|
RaidUtilityPanel:Point("TOP", E.UIParent, "TOP", -400, 1)
|
|
RaidUtilityPanel:SetFrameLevel(3)
|
|
RaidUtilityPanel.toggled = false
|
|
RaidUtilityPanel:SetFrameStrata("HIGH")
|
|
|
|
self:CreateUtilButton("RaidUtility_ShowButton", E.UIParent, "SecureHandlerClickTemplate", 136, 18, "TOP", E.UIParent, "TOP", -400, E.Border, RAID_CONTROL, nil)
|
|
RaidUtility_ShowButton:SetFrameRef("RaidUtilityPanel", RaidUtilityPanel)
|
|
RaidUtility_ShowButton:SetAttribute("_onclick", ([=[
|
|
local raidUtil = self:GetFrameRef("RaidUtilityPanel")
|
|
local closeButton = raidUtil:GetFrameRef("RaidUtility_CloseButton")
|
|
|
|
self:Hide()
|
|
raidUtil:Show()
|
|
|
|
local point = self:GetPoint()
|
|
local raidUtilPoint, closeButtonPoint, yOffset
|
|
|
|
if string.find(point, "BOTTOM") then
|
|
raidUtilPoint = "BOTTOM"
|
|
closeButtonPoint = "TOP"
|
|
yOffset = 1
|
|
else
|
|
raidUtilPoint = "TOP"
|
|
closeButtonPoint = "BOTTOM"
|
|
yOffset = -1
|
|
end
|
|
|
|
yOffset = yOffset * (tonumber(%d))
|
|
|
|
raidUtil:ClearAllPoints()
|
|
closeButton:ClearAllPoints()
|
|
raidUtil:SetPoint(raidUtilPoint, self, raidUtilPoint)
|
|
closeButton:SetPoint(raidUtilPoint, raidUtil, closeButtonPoint, 0, yOffset)
|
|
]=]):format(-E.Border + E.Spacing * 3))
|
|
RaidUtility_ShowButton:SetScript("OnMouseUp", function()
|
|
RaidUtilityPanel.toggled = true
|
|
end)
|
|
RaidUtility_ShowButton:SetMovable(true)
|
|
RaidUtility_ShowButton:SetClampedToScreen(true)
|
|
RaidUtility_ShowButton:SetClampRectInsets(0, 0, -1, 1)
|
|
RaidUtility_ShowButton:RegisterForDrag("RightButton")
|
|
RaidUtility_ShowButton:SetFrameStrata("HIGH")
|
|
RaidUtility_ShowButton:SetScript("OnDragStart", function(self)
|
|
if InCombatLockdown() then E:Print(ERR_NOT_IN_COMBAT) return end
|
|
self:StartMoving()
|
|
end)
|
|
|
|
RaidUtility_ShowButton:SetScript("OnDragStop", function(self)
|
|
self:StopMovingOrSizing()
|
|
local point = self:GetPoint()
|
|
local xOffset = self:GetCenter()
|
|
local screenWidth = E.UIParent:GetWidth() / 2
|
|
xOffset = xOffset - screenWidth
|
|
self:ClearAllPoints()
|
|
if find(point, "BOTTOM") then
|
|
self:Point("BOTTOM", E.UIParent, "BOTTOM", xOffset, -1)
|
|
else
|
|
self:Point("TOP", E.UIParent, "TOP", xOffset, 1)
|
|
end
|
|
end)
|
|
|
|
self:CreateUtilButton("RaidUtility_CloseButton", RaidUtilityPanel, "SecureHandlerClickTemplate", 136, 18, "TOP", RaidUtilityPanel, "BOTTOM", 0, -1, CLOSE, nil)
|
|
RaidUtility_CloseButton:SetFrameRef("RaidUtility_ShowButton", RaidUtility_ShowButton)
|
|
RaidUtility_CloseButton:SetAttribute("_onclick", [=[self:GetParent():Hide(); self:GetFrameRef("RaidUtility_ShowButton"):Show();]=])
|
|
RaidUtility_CloseButton:SetScript("OnMouseUp", function() RaidUtilityPanel.toggled = false end)
|
|
RaidUtilityPanel:SetFrameRef("RaidUtility_CloseButton", RaidUtility_CloseButton)
|
|
|
|
self:CreateUtilButton("DisbandRaidButton", RaidUtilityPanel, nil, RaidUtilityPanel:GetWidth() * 0.8, 18, "TOP", RaidUtilityPanel, "TOP", 0, -5, L["Disband Group"], nil)
|
|
DisbandRaidButton:SetScript("OnMouseUp", function()
|
|
if CheckRaidStatus() then
|
|
E:StaticPopup_Show("DISBAND_RAID")
|
|
end
|
|
end)
|
|
|
|
self:CreateUtilButton("MainTankButton", RaidUtilityPanel, "SecureActionButtonTemplate", (DisbandRaidButton:GetWidth() / 2) - 2, 18, "TOPLEFT", DisbandRaidButton, "BOTTOMLEFT", 0, -5, MAINTANK, nil)
|
|
MainTankButton:SetAttribute("type", "maintank")
|
|
MainTankButton:SetAttribute("unit", "target")
|
|
MainTankButton:SetAttribute("action", "toggle")
|
|
|
|
self:CreateUtilButton("MainAssistButton", RaidUtilityPanel, "SecureActionButtonTemplate", (DisbandRaidButton:GetWidth() / 2) - 2, 18, "TOPRIGHT", DisbandRaidButton, "BOTTOMRIGHT", 0, -5, MAINASSIST, nil)
|
|
MainAssistButton:SetAttribute("type", "mainassist")
|
|
MainAssistButton:SetAttribute("unit", "target")
|
|
MainAssistButton:SetAttribute("action", "toggle")
|
|
|
|
self:CreateUtilButton("RaidControlButton", RaidUtilityPanel, nil, MainTankButton:GetWidth(), 18, "TOPLEFT", MainTankButton, "BOTTOMLEFT", 0, -5, L["Raid Menu"], nil)
|
|
RaidControlButton:SetScript("OnMouseUp", function()
|
|
if InCombatLockdown() then E:Print(ERR_NOT_IN_COMBAT) return end
|
|
ToggleFriendsFrame(5)
|
|
end)
|
|
|
|
self:CreateUtilButton("ConvertRaidButton", RaidUtilityPanel, nil, MainAssistButton:GetWidth(), 18, "TOPRIGHT", MainAssistButton, "BOTTOMRIGHT", 0, -5, CONVERT_TO_RAID, nil)
|
|
ConvertRaidButton:SetScript("OnMouseUp", function()
|
|
if CheckRaidStatus() then
|
|
ConvertToRaid()
|
|
SetLootMethod("master", "player")
|
|
end
|
|
end)
|
|
ConvertRaidButton:SetScript("OnEvent", function(btn)
|
|
if GetNumRaidMembers() == 0 and GetNumPartyMembers() > 0 and IsPartyLeader() then
|
|
if not btn:IsShown() then
|
|
RaidControlButton:Width(MainAssistButton:GetWidth())
|
|
btn:Show()
|
|
end
|
|
elseif btn:IsShown() then
|
|
RaidControlButton:Width(DisbandRaidButton:GetWidth())
|
|
btn:Hide()
|
|
end
|
|
end)
|
|
ConvertRaidButton:RegisterEvent("RAID_ROSTER_UPDATE")
|
|
ConvertRaidButton:RegisterEvent("PARTY_MEMBERS_CHANGED")
|
|
ConvertRaidButton:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
|
|
|
|
self:CreateUtilButton("ReadyCheckButton", RaidUtilityPanel, nil, RaidUtilityPanel:GetWidth() * 0.8, 18, "TOPLEFT", RaidControlButton, "BOTTOMLEFT", 0, -5, READY_CHECK, nil)
|
|
ReadyCheckButton:SetScript("OnMouseUp", function()
|
|
if CheckRaidStatus() then
|
|
DoReadyCheck()
|
|
end
|
|
end)
|
|
ReadyCheckButton:SetScript("OnEvent", function(btn)
|
|
if not (IsRaidLeader("player") or IsRaidOfficer("player")) then
|
|
btn:Disable()
|
|
else
|
|
btn:Enable()
|
|
end
|
|
end)
|
|
ReadyCheckButton:RegisterEvent("RAID_ROSTER_UPDATE")
|
|
ReadyCheckButton:RegisterEvent("PARTY_MEMBERS_CHANGED")
|
|
ReadyCheckButton:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
|
|
if IsAddOnLoaded("DBM-Core") then
|
|
self:CreateUtilButton("DBMPullButton10", RaidUtilityPanel, nil, MainTankButton:GetWidth(), 18, "TOPLEFT", ReadyCheckButton, "BOTTOMLEFT", 0, -5, L["Pull 10"], nil)
|
|
DBMPullButton10:SetScript("OnMouseUp", function()
|
|
if InCombatLockdown() then E:Print(ERR_NOT_IN_COMBAT) return end
|
|
-- Hacked way to make the dbm call, will update if I find the apis for it
|
|
local editbox=ChatEdit_ChooseBoxForSend(DEFAULT_CHAT_FRAME)
|
|
ChatEdit_ActivateChat(editbox)
|
|
editbox:SetText("/dbm pull 10")
|
|
ChatEdit_OnEnterPressed(editbox)
|
|
end)
|
|
|
|
self:CreateUtilButton("DBMPullButton5", RaidUtilityPanel, nil, MainTankButton:GetWidth(), 18, "TOPRIGHT", ReadyCheckButton, "BOTTOMRIGHT", 0, -5, L["Pull 5"], nil)
|
|
DBMPullButton5:SetScript("OnMouseUp", function()
|
|
if InCombatLockdown() then E:Print(ERR_NOT_IN_COMBAT) return end
|
|
-- Hacked way to make the dbm call, will update if I find the apis for it
|
|
local editbox=ChatEdit_ChooseBoxForSend(DEFAULT_CHAT_FRAME)
|
|
ChatEdit_ActivateChat(editbox)
|
|
editbox:SetText("/dbm pull 5")
|
|
ChatEdit_OnEnterPressed(editbox)
|
|
end)
|
|
end
|
|
|
|
|
|
--Automatically show/hide the frame if we have RaidLeader or RaidOfficer
|
|
self:RegisterEvent("RAID_ROSTER_UPDATE", "ToggleRaidUtil")
|
|
self:RegisterEvent("PLAYER_ENTERING_WORLD", "ToggleRaidUtil")
|
|
self:RegisterEvent("PARTY_MEMBERS_CHANGED", "ToggleRaidUtil")
|
|
end
|
|
|
|
local function InitializeCallback()
|
|
RU:Initialize()
|
|
end
|
|
|
|
E:RegisterInitialModule(RU:GetName(), InitializeCallback)
|