mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
964 lines
36 KiB
Lua
964 lines
36 KiB
Lua
NetherBot.InitLocale()
|
|
local i18n = NetherBot.I18n
|
|
|
|
-- Create the Main frame
|
|
local frame = CreateFrame("Frame", "NetherbotFrame", UIParent)
|
|
frame:SetSize(200, 200)
|
|
frame:SetPoint("CENTER", UIParent, "CENTER")
|
|
|
|
local title = frame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
title:SetPoint("TOP", frame, "TOP", 0, -10)
|
|
title:SetText(i18n("NetherBot - NPCBOT Tool"))
|
|
|
|
-- Set the background color and transparency for MainFrame "Frame"
|
|
frame:SetBackdrop({
|
|
bgFile = "Interface/Buttons/WHITE8X8",
|
|
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
|
|
tile = true, tileSize = 16, edgeSize = 16,
|
|
insets = { left = 4, right = 4, top = 4, bottom = 4 }
|
|
})
|
|
frame:SetBackdropColor(0.35, 0.14, 0.73, 0.25)
|
|
frame:SetBackdropBorderColor(0.53, 0.07, 0.89, 1)
|
|
|
|
-- Make the frame movable
|
|
frame:SetMovable(true)
|
|
frame:EnableMouse(true)
|
|
|
|
-- Create the adminFrame
|
|
local adminFrame = CreateFrame("Frame", "NetherbotAdminFrame", UIParent)
|
|
adminFrame:SetSize(200, 200)
|
|
adminFrame:SetPoint("RIGHT", frame, "LEFT", -10, 0)
|
|
adminFrame:SetBackdrop({
|
|
bgFile = "Interface/Tooltips/UI-Tooltip-Background",
|
|
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
|
|
tile = true, tileSize = 16, edgeSize = 16,
|
|
insets = { left = 4, right = 4, top = 4, bottom = 4 }
|
|
})
|
|
adminFrame:SetBackdropColor(1, 0, 0, 0.2)
|
|
adminFrame:SetBackdropBorderColor(0, 1, 0, 1)
|
|
adminFrame:Hide()
|
|
|
|
local adminTitle = adminFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
adminTitle:SetPoint("TOP", adminFrame, "TOP", 0, -10)
|
|
adminTitle:SetText(i18n("Admin"))
|
|
|
|
|
|
|
|
-- Handle frame movement
|
|
frame:SetScript("OnMouseDown", function(self, button)
|
|
if button == "LeftButton" then
|
|
self:StartMoving()
|
|
end
|
|
end)
|
|
|
|
-- Stop frame movement
|
|
frame:SetScript("OnMouseUp", function(self, button)
|
|
if button == "LeftButton" then
|
|
self:StopMovingOrSizing()
|
|
end
|
|
end)
|
|
|
|
|
|
|
|
-- Create the buttons
|
|
-- Your addon's namespace and variables
|
|
local NetherBot = {}
|
|
NetherbotDB = {} -- Your saved variables table
|
|
|
|
-- Create a function to set and save the scale
|
|
local function SetAndSaveScale(scale)
|
|
frame:SetScale(scale)
|
|
NetherbotDB.scale = scale
|
|
end
|
|
|
|
-- Add UI scale buttons
|
|
local increaseScaleButton = CreateFrame("Button", "NetherbotIncreaseScaleButton", frame)
|
|
increaseScaleButton:SetSize(20, 20)
|
|
increaseScaleButton:SetPoint("TOPLEFT", frame, "TOPLEFT", 5, -5)
|
|
increaseScaleButton:SetNormalFontObject("GameFontNormal")
|
|
local increaseButtonText = increaseScaleButton:CreateFontString(nil, "OVERLAY")
|
|
increaseButtonText:SetFont("Fonts\\FRIZQT__.TTF", 20, "OUTLINE")
|
|
increaseButtonText:SetText("")
|
|
increaseButtonText:SetPoint("CENTER", 0, 0)
|
|
increaseButtonText:SetTextColor(1, 1, 0)
|
|
increaseScaleButton:RegisterForClicks("LeftButtonUp")
|
|
increaseScaleButton:SetScript("OnClick", function()
|
|
local currentScale = frame:GetScale()
|
|
local newScale = currentScale + 0.1
|
|
SetAndSaveScale(newScale)
|
|
end)
|
|
|
|
local decreaseScaleButton = CreateFrame("Button", "NetherbotDecreaseScaleButton", frame)
|
|
decreaseScaleButton:SetSize(20, 20)
|
|
decreaseScaleButton:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -5, -5)
|
|
decreaseScaleButton:SetNormalFontObject("GameFontNormal")
|
|
local decreaseButtonText = decreaseScaleButton:CreateFontString(nil, "OVERLAY")
|
|
decreaseButtonText:SetFont("Fonts\\FRIZQT__.TTF", 20, "OUTLINE")
|
|
decreaseButtonText:SetText("")
|
|
decreaseButtonText:SetPoint("CENTER", 0, 0)
|
|
decreaseButtonText:SetTextColor(1, 1, 0)
|
|
decreaseScaleButton:RegisterForClicks("LeftButtonUp")
|
|
decreaseScaleButton:SetScript("OnClick", function()
|
|
local currentScale = frame:GetScale()
|
|
local newScale = currentScale - 0.1
|
|
SetAndSaveScale(newScale)
|
|
end)
|
|
|
|
-- Event handler for addon loading
|
|
local function OnAddonLoaded(self, event, addonName)
|
|
if addonName == "NetherBot" then
|
|
-- Check if the scale is saved in the saved variables
|
|
if NetherbotDB and NetherbotDB.scale then
|
|
frame:SetScale(NetherbotDB.scale)
|
|
end
|
|
end
|
|
end
|
|
|
|
local addonLoadedFrame = CreateFrame("Frame")
|
|
addonLoadedFrame:RegisterEvent("ADDON_LOADED")
|
|
addonLoadedFrame:SetScript("OnEvent", OnAddonLoaded)
|
|
|
|
|
|
|
|
-- Add texture to the increase button
|
|
local increaseTexture = increaseScaleButton:CreateTexture(nil, "BACKGROUND")
|
|
increaseTexture:SetTexture("Interface\\Icons\\spell_chargepositive")
|
|
increaseTexture:SetAllPoints()
|
|
increaseScaleButton:SetNormalTexture(increaseTexture)
|
|
-- Add texture to the decrease button
|
|
local decreaseTexture = decreaseScaleButton:CreateTexture(nil, "BACKGROUND")
|
|
decreaseTexture:SetTexture("Interface\\Icons\\spell_chargenegative")
|
|
decreaseTexture:SetAllPoints()
|
|
decreaseScaleButton:SetNormalTexture(decreaseTexture)
|
|
|
|
|
|
|
|
-- Follow Button
|
|
local followButton = CreateFrame("Button", "NetherbotFollowButton", frame, "ActionButtonTemplate")
|
|
followButton:SetPoint("TOPLEFT", frame, "TOPLEFT", 8, -35)
|
|
followButton:SetSize(42, 42)
|
|
local followButtonText = followButton:CreateFontString(nil, "OVERLAY")
|
|
followButtonText:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE") -- Use the "OUTLINE" flag for text outline
|
|
followButtonText:SetText("Follow")
|
|
followButtonText:SetPoint("CENTER", 0, 0)
|
|
followButtonText:SetTextColor(1, 1, 0) -- Set text color (yellow in this case)
|
|
|
|
local followTexture = followButton:CreateTexture(nil, "BACKGROUND")
|
|
followTexture:SetTexture("Interface\\Icons\\Ability_Tracking")
|
|
followTexture:SetAllPoints()
|
|
followButton:SetNormalTexture(followTexture)
|
|
|
|
local followpushedTexture = followButton:CreateTexture(nil, "BACKGROUND")
|
|
followpushedTexture:SetTexture("Interface\\Icons\\Ability_Tracking")
|
|
followpushedTexture:SetAllPoints()
|
|
followButton:SetPushedTexture(followpushedTexture)
|
|
|
|
-- StandStill Button
|
|
local standstillButton = CreateFrame("Button", "NetherbotStandstillButton", frame, "ActionButtonTemplate")
|
|
standstillButton:SetPoint("LEFT", followButton, "RIGHT", 5, 0)
|
|
standstillButton:SetSize(42, 42)
|
|
local standstillButtonText = standstillButton:CreateFontString(nil, "OVERLAY")
|
|
standstillButtonText:SetFont("Fonts\\FRIZQT__.TTF", 11, "OUTLINE") -- Use the "OUTLINE" flag for text outline
|
|
standstillButtonText:SetText("Stand")
|
|
standstillButtonText:SetPoint("CENTER", 0, 0)
|
|
standstillButtonText:SetTextColor(1, 1, 0) -- Set text color (yellow in this case)
|
|
|
|
local standstillTexture = standstillButton:CreateTexture(nil, "BACKGROUND")
|
|
standstillTexture:SetTexture("Interface\\Icons\\Inv_misc_map_01")
|
|
standstillTexture:SetAllPoints()
|
|
standstillButton:SetNormalTexture(standstillTexture)
|
|
|
|
local standstillpushedTexture = standstillButton:CreateTexture(nil, "BACKGROUND")
|
|
standstillpushedTexture:SetTexture("Interface\\Icons\\Inv_misc_map_01")
|
|
standstillpushedTexture:SetAllPoints()
|
|
standstillButton:SetPushedTexture(standstillpushedTexture)
|
|
|
|
--FullStop Button
|
|
local fullstopButton = CreateFrame("Button", "NetherbotfullstopButton", frame, "ActionButtonTemplate")
|
|
fullstopButton:SetPoint("LEFT", standstillButton, "RIGHT", 5, 0)
|
|
fullstopButton:SetSize(42, 42)
|
|
local fullstopButtonText = fullstopButton:CreateFontString(nil, "OVERLAY")
|
|
fullstopButtonText:SetFont("Fonts\\FRIZQT__.TTF", 11, "OUTLINE") -- Use the "OUTLINE" flag for text outline
|
|
fullstopButtonText:SetText("Stop")
|
|
fullstopButtonText:SetPoint("CENTER", 0, 0)
|
|
fullstopButtonText:SetTextColor(1, 1, 0) -- Set text color (yellow in this case)
|
|
|
|
local fullstopTexture = fullstopButton:CreateTexture(nil, "BACKGROUND")
|
|
fullstopTexture:SetTexture("Interface\\Icons\\Spell_chargenegative")
|
|
fullstopTexture:SetAllPoints()
|
|
fullstopButton:SetNormalTexture(fullstopTexture)
|
|
|
|
local fullstoppushedTexture = fullstopButton:CreateTexture(nil, "BACKGROUND")
|
|
fullstoppushedTexture:SetTexture("Interface\\Icons\\Spell_chargenegative")
|
|
fullstoppushedTexture:SetAllPoints()
|
|
fullstopButton:SetPushedTexture(fullstoppushedTexture)
|
|
|
|
-- Slack Button
|
|
local followOnlyButton = CreateFrame("Button", "NetherbotFollowOnlyButton", frame, "ActionButtonTemplate")
|
|
followOnlyButton:SetPoint("LEFT", fullstopButton, "RIGHT", 5, 0)
|
|
followOnlyButton:SetSize(42, 42)
|
|
local followOnlyButtonText = followOnlyButton:CreateFontString(nil, "OVERLAY")
|
|
followOnlyButtonText:SetFont("Fonts\\FRIZQT__.TTF", 11, "OUTLINE") -- Use the "OUTLINE" flag for text outline
|
|
followOnlyButtonText:SetText("Slack")
|
|
followOnlyButtonText:SetPoint("CENTER", 0, 0)
|
|
followOnlyButtonText:SetTextColor(1, 1, 0) -- Set text color (yellow in this case)
|
|
|
|
local followOnlyTexture = followOnlyButton:CreateTexture(nil, "BACKGROUND")
|
|
followOnlyTexture:SetTexture("Interface\\Icons\\Spell_Nature_Sleep")
|
|
followOnlyTexture:SetAllPoints()
|
|
followOnlyButton:SetNormalTexture(followOnlyTexture)
|
|
|
|
local followOnlyPushedTexture = followOnlyButton:CreateTexture(nil, "BACKGROUND")
|
|
followOnlyPushedTexture:SetTexture("Interface\\Icons\\Spell_Nature_Sleep")
|
|
followOnlyPushedTexture:SetAllPoints()
|
|
followOnlyButton:SetPushedTexture(followOnlyPushedTexture)
|
|
|
|
-- Show Button
|
|
local ShowNPCButton = CreateFrame("Button", "NetherbotShow3Button", frame, "ActionButtonTemplate")
|
|
ShowNPCButton:SetPoint("TOPLEFT", followButton, "BOTTOMLEFT", 0, -5)
|
|
ShowNPCButton:SetSize(42, 42)
|
|
local ShowButtonText = ShowNPCButton:CreateFontString(nil, "OVERLAY")
|
|
ShowButtonText:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE") -- Use the "OUTLINE" flag for text outline
|
|
ShowButtonText:SetText("UnHide")
|
|
ShowButtonText:SetPoint("CENTER", 0, 0)
|
|
ShowButtonText:SetTextColor(1, 1, 0) -- Set text color (yellow in this case)
|
|
|
|
local ShowNPCTexture = ShowNPCButton:CreateTexture(nil, "BACKGROUND")
|
|
ShowNPCTexture:SetTexture("Interface\\Icons\\ability_hunter_beastcall")
|
|
ShowNPCTexture:SetAllPoints()
|
|
ShowNPCButton:SetNormalTexture(ShowNPCTexture)
|
|
|
|
local ShowNPCpushedTexture = ShowNPCButton:CreateTexture(nil, "BACKGROUND")
|
|
ShowNPCpushedTexture:SetTexture("Interface\\Icons\\ability_hunter_beastcall")
|
|
ShowNPCpushedTexture:SetAllPoints()
|
|
ShowNPCButton:SetPushedTexture(ShowNPCpushedTexture)
|
|
|
|
-- Hide Button
|
|
local HideNPCButton = CreateFrame("Button", "NetherbotShow3Button", frame, "ActionButtonTemplate")
|
|
HideNPCButton:SetPoint("LEFT", ShowNPCButton, "RIGHT", 5, 0)
|
|
HideNPCButton:SetSize(42, 42)
|
|
local HideButtonText = HideNPCButton:CreateFontString(nil, "OVERLAY")
|
|
HideButtonText:SetFont("Fonts\\FRIZQT__.TTF", 11, "OUTLINE") -- Use the "OUTLINE" flag for text outline
|
|
HideButtonText:SetText("Hide")
|
|
HideButtonText:SetPoint("CENTER", 0, 0)
|
|
HideButtonText:SetTextColor(1, 1, 0) -- Set text color (yellow in this case)
|
|
|
|
local HideNPCTexture = HideNPCButton:CreateTexture(nil, "BACKGROUND")
|
|
HideNPCTexture:SetTexture("Interface\\Icons\\ability_stealth")
|
|
HideNPCTexture:SetAllPoints()
|
|
HideNPCButton:SetNormalTexture(HideNPCTexture)
|
|
|
|
local HideNPCpushedTexture = HideNPCButton:CreateTexture(nil, "BACKGROUND")
|
|
HideNPCpushedTexture:SetTexture("Interface\\Icons\\ability_stealth")
|
|
HideNPCpushedTexture:SetAllPoints()
|
|
HideNPCButton:SetPushedTexture(HideNPCpushedTexture)
|
|
|
|
|
|
|
|
-- Recall Button
|
|
local RecallNPCButton = CreateFrame("Button", "NetherbotShow3Button", frame, "ActionButtonTemplate")
|
|
RecallNPCButton:SetPoint("LEFT", HideNPCButton, "RIGHT", 5, 0)
|
|
RecallNPCButton:SetSize(42, 42)
|
|
local RecallButtonText = RecallNPCButton:CreateFontString(nil, "OVERLAY")
|
|
RecallButtonText:SetFont("Fonts\\FRIZQT__.TTF", 11, "OUTLINE") -- Use the "OUTLINE" flag for text outline
|
|
RecallButtonText:SetText("Recall")
|
|
RecallButtonText:SetPoint("CENTER", 0, 0)
|
|
RecallButtonText:SetTextColor(1, 1, 0) -- Set text color (yellow in this case)
|
|
|
|
local RecallNPCTexture = RecallNPCButton:CreateTexture(nil, "BACKGROUND")
|
|
RecallNPCTexture:SetTexture("Interface\\Icons\\Inv_misc_rune_01")
|
|
RecallNPCTexture:SetAllPoints()
|
|
RecallNPCButton:SetNormalTexture(RecallNPCTexture)
|
|
|
|
local RecallNPCpushedTexture = RecallNPCButton:CreateTexture(nil, "BACKGROUND")
|
|
RecallNPCpushedTexture:SetTexture("Interface\\Icons\\Inv_misc_rune_01")
|
|
RecallNPCpushedTexture:SetAllPoints()
|
|
RecallNPCButton:SetPushedTexture(RecallNPCpushedTexture)
|
|
|
|
-- Unbind Button
|
|
local unbindButton = CreateFrame("Button", "NetherbotUnbindButton", frame, "ActionButtonTemplate")
|
|
unbindButton:SetPoint("LEFT", RecallNPCButton, "RIGHT", 5, 0) -- Positioning it to the right of the Recall button
|
|
unbindButton:SetSize(42, 42)
|
|
local unbindButtonText = unbindButton:CreateFontString(nil, "OVERLAY")
|
|
unbindButtonText:SetFont("Fonts\\FRIZQT__.TTF", 11, "OUTLINE")
|
|
unbindButtonText:SetText("Unbind")
|
|
unbindButtonText:SetPoint("CENTER", 0, 0)
|
|
unbindButtonText:SetTextColor(1, 1, 0)
|
|
|
|
local unbindTexture = unbindButton:CreateTexture(nil, "BACKGROUND")
|
|
unbindTexture:SetTexture("Interface\\Icons\\INV_Misc_Key_14") -- Example texture, change as needed
|
|
unbindTexture:SetAllPoints()
|
|
unbindButton:SetNormalTexture(unbindTexture)
|
|
|
|
local unbindPushedTexture = unbindButton:CreateTexture(nil, "BACKGROUND")
|
|
unbindPushedTexture:SetTexture("Interface\\Icons\\INV_Misc_Key_14") -- Example texture, change as needed
|
|
unbindPushedTexture:SetAllPoints()
|
|
unbindButton:SetPushedTexture(unbindPushedTexture)
|
|
|
|
-- Unbind Button Function
|
|
unbindButton:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot command unbind", "SAY")
|
|
end)
|
|
|
|
local distanceLabel = standstillButton:CreateFontString(nil, "ARTWORK", "GameFontNormal")
|
|
distanceLabel:SetPoint("BOTTOM", standstillButton, "BOTTOM", 20, -63)
|
|
distanceLabel:SetText(i18n("Follow Distance:"))
|
|
|
|
-- Distance1 Button
|
|
local distance1Button = CreateFrame("Button", "Netherbotdistance1Button", frame, "ActionButtonTemplate")
|
|
distance1Button:SetPoint("TOPLEFT", followButton, "BOTTOMLEFT", 10, -65)
|
|
distance1Button:SetSize(50, 25)
|
|
local distance1ButtonText = distance1Button:CreateFontString(nil, "OVERLAY")
|
|
distance1ButtonText:SetFont("Fonts\\FRIZQT__.TTF", 11, "OUTLINE") -- Use the "OUTLINE" flag for text outline
|
|
distance1ButtonText:SetText(i18n("Low"))
|
|
distance1ButtonText:SetPoint("CENTER", 0, 0)
|
|
distance1ButtonText:SetTextColor(1, 1, 0) -- Set text color (yellow in this case)
|
|
|
|
local distance1Texture = distance1Button:CreateTexture(nil, "BACKGROUND")
|
|
distance1Texture:SetTexture("Interface\\Icons\\Inv_misc_punchcards_red")
|
|
distance1Texture:SetAllPoints()
|
|
distance1Button:SetNormalTexture(distance1Texture)
|
|
local distance1pushedTexture = distance1Button:CreateTexture(nil, "BACKGROUND")
|
|
distance1pushedTexture:SetTexture("Interface\\Icons\\Inv_misc_punchcards_red")
|
|
distance1pushedTexture:SetAllPoints()
|
|
distance1Button:SetPushedTexture(distance1pushedTexture)
|
|
|
|
-- Distance2 Button
|
|
local distance2Button = CreateFrame("Button", "Netherbotdistance2Button", frame, "ActionButtonTemplate")
|
|
distance2Button:SetPoint("LEFT", distance1Button, "RIGHT", 5, 0)
|
|
distance2Button:SetSize(50, 25)
|
|
local distance2ButtonText = distance2Button:CreateFontString(nil, "OVERLAY")
|
|
distance2ButtonText:SetFont("Fonts\\FRIZQT__.TTF", 10, "OUTLINE") -- Use the "OUTLINE" flag for text outline
|
|
distance2ButtonText:SetText(i18n("Medium"))
|
|
distance2ButtonText:SetPoint("CENTER", 0, 0)
|
|
distance2ButtonText:SetTextColor(1, 1, 0) -- Set text color (yellow in this case)
|
|
|
|
local distance2Texture = distance2Button:CreateTexture(nil, "BACKGROUND")
|
|
distance2Texture:SetTexture("Interface\\Icons\\Inv_misc_punchcards_red")
|
|
distance2Texture:SetAllPoints()
|
|
distance2Button:SetNormalTexture(distance2Texture)
|
|
local distance2pushedTexture = distance2Button:CreateTexture(nil, "BACKGROUND")
|
|
distance2pushedTexture:SetTexture("Interface\\Icons\\Inv_misc_punchcards_red")
|
|
distance2pushedTexture:SetAllPoints()
|
|
distance2Button:SetPushedTexture(distance2pushedTexture)
|
|
|
|
-- Distance3 Button
|
|
local distance3Button = CreateFrame("Button", "Netherbotdistance3Button", frame, "ActionButtonTemplate")
|
|
distance3Button:SetPoint("LEFT", distance2Button, "RIGHT", 5, 0)
|
|
distance3Button:SetSize(50, 25)
|
|
local distance3ButtonText = distance3Button:CreateFontString(nil, "OVERLAY")
|
|
distance3ButtonText:SetFont("Fonts\\FRIZQT__.TTF", 11, "OUTLINE") -- Use the "OUTLINE" flag for text outline
|
|
distance3ButtonText:SetText(i18n("High"))
|
|
distance3ButtonText:SetPoint("CENTER", 0, 0)
|
|
distance3ButtonText:SetTextColor(1, 1, 0) -- Set text color (yellow in this case)
|
|
|
|
local distance3Texture = distance3Button:CreateTexture(nil, "BACKGROUND")
|
|
distance3Texture:SetTexture("Interface\\Icons\\Inv_misc_punchcards_red")
|
|
distance3Texture:SetAllPoints()
|
|
distance3Button:SetNormalTexture(distance3Texture)
|
|
local distance3pushedTexture = distance3Button:CreateTexture(nil, "BACKGROUND")
|
|
distance3pushedTexture:SetTexture("Interface\\Icons\\Inv_misc_punchcards_red")
|
|
distance3pushedTexture:SetAllPoints()
|
|
distance3Button:SetPushedTexture(distance3pushedTexture)
|
|
|
|
|
|
|
|
|
|
local adminButton = CreateFrame("Button", "NetherbotAdminButton", frame, "UIPanelButtonTemplate")
|
|
adminButton:SetSize(60, 20)
|
|
adminButton:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -10, 10) -- position the button in the bottom right of the frame
|
|
adminButton:SetText(i18n("Admin"))
|
|
adminButton:GetNormalTexture():SetVertexColor(0.10,1.00,0.10)
|
|
|
|
local raidButton = CreateFrame("Button", "NetherbotRaidButton", frame, "UIPanelButtonTemplate")
|
|
raidButton:SetSize(70, 20)
|
|
raidButton:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -120, 10) -- position the button in the bottom right of the frame
|
|
raidButton:SetText("RaidFrame")
|
|
raidButton:GetNormalTexture():SetVertexColor(0.10,1.00,0.10)
|
|
|
|
-- Add Revive Button
|
|
local reviveButton = CreateFrame("Button", "NetherbotReviveButton", frame, "UIPanelButtonTemplate")
|
|
reviveButton:SetSize(50, 20)
|
|
reviveButton:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -70, 10) -- Position between RaidFrame and Admin
|
|
reviveButton:SetText("Revive")
|
|
reviveButton:GetNormalTexture():SetVertexColor(0.10,1.00,0.10)
|
|
|
|
-- Revive Button Function
|
|
reviveButton:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot revive", "SAY")
|
|
end)
|
|
|
|
-- Adjust the position of the Admin button to accommodate the new Revive button
|
|
adminButton:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -10, 10) -- position the button in the bottom right of the frame
|
|
|
|
|
|
-- Create Admin Buttons
|
|
local buttonAdd = CreateFrame("Button", "NetherbotButtonAdd", adminFrame, "UIPanelButtonTemplate")
|
|
buttonAdd:SetSize(56, 22)
|
|
buttonAdd:SetPoint("TOPLEFT", adminFrame, "TOPLEFT", 10, -35)
|
|
buttonAdd:SetText(i18n("Add"))
|
|
buttonAdd:GetNormalTexture():SetVertexColor(0.10,1.00,0.10)
|
|
|
|
local buttonRemove = CreateFrame("Button", "NetherbotButtonRemove", adminFrame, "UIPanelButtonTemplate")
|
|
buttonRemove:SetSize(65, 22)
|
|
buttonRemove:SetPoint("TOP", buttonAdd, "BOTTOM", 25, -5)
|
|
buttonRemove:SetText(i18n("Remove"))
|
|
buttonRemove:GetNormalTexture():SetVertexColor(0.10,1.00,0.10)
|
|
|
|
local buttonRecall = CreateFrame("Button", "NetherbotButtonRecall", adminFrame, "UIPanelButtonTemplate")
|
|
buttonRecall:SetSize(59, 22)
|
|
buttonRecall:SetPoint("LEFT", buttonAdd, "RIGHT", 3, 0)
|
|
buttonRecall:SetText(i18n("Recall"))
|
|
buttonRecall:GetNormalTexture():SetVertexColor(0.10,1.00,0.10)
|
|
|
|
local buttonBotinfo = CreateFrame("Button", "NetherbotButtonBotInfo", adminFrame, "UIPanelButtonTemplate")
|
|
buttonBotinfo:SetSize(62, 22)
|
|
buttonBotinfo:SetPoint("LEFT", buttonRecall, "RIGHT", 2, 0)
|
|
buttonBotinfo:SetText(i18n("Bot-Info"))
|
|
buttonBotinfo:GetNormalTexture():SetVertexColor(0.10,1.00,0.10)
|
|
|
|
local buttonMove = CreateFrame("Button", "NetherbotButtonMove", adminFrame, "UIPanelButtonTemplate")
|
|
buttonMove:SetSize(65, 22)
|
|
buttonMove:SetPoint("LEFT", buttonRemove, "RIGHT", 5, 0)
|
|
buttonMove:SetText(i18n("Move"))
|
|
buttonMove:GetNormalTexture():SetVertexColor(0.10,1.00,0.10)
|
|
|
|
local buttonDelete = CreateFrame("Button", "NetherbotButtonDelete", adminFrame, "UIPanelButtonTemplate")
|
|
buttonDelete:SetSize(60, 22)
|
|
buttonDelete:SetPoint("BOTTOMRIGHT", adminFrame, "BOTTOMRIGHT", -10, 10)
|
|
buttonDelete:SetText(i18n("Delete"))
|
|
buttonDelete:GetNormalTexture():SetVertexColor(0.10,1.00,0.10)
|
|
|
|
local redemptionButton = CreateFrame("Button", "NetherbotRedemptionButton", adminFrame, "SecureActionButtonTemplate")
|
|
redemptionButton:SetSize(30, 30)
|
|
redemptionButton:SetPoint("BOTTOMLEFT", adminFrame, "BOTTOMLEFT", 10, 10)
|
|
|
|
local redemptionIcon = redemptionButton:CreateTexture(nil, "BACKGROUND")
|
|
redemptionIcon:SetAllPoints()
|
|
redemptionIcon:SetTexture(select(3, GetSpellInfo(7328)))
|
|
|
|
redemptionButton:SetNormalTexture(redemptionIcon)
|
|
|
|
redemptionButton:SetAttribute("type", "spell")
|
|
redemptionButton:SetAttribute("spell", 7328)
|
|
|
|
-- Create the "botLookupButton" button
|
|
local botLookupButton = CreateFrame("Button", "NetherbotBotLookupButton", adminFrame, "UIPanelButtonTemplate")
|
|
botLookupButton:SetSize(65, 22)
|
|
botLookupButton:SetPoint("BOTTOM", adminFrame, "BOTTOM", 0, 10)
|
|
botLookupButton:SetText(i18n("Lookup"))
|
|
botLookupButton:GetNormalTexture():SetVertexColor(0.10,1.00,0.10)
|
|
|
|
|
|
-- Main Frame Button Functions:
|
|
followButton:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot command follow", "SAY")
|
|
end)
|
|
|
|
|
|
standstillButton:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot command standstill", "SAY")
|
|
end)
|
|
|
|
fullstopButton:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot command stopfully", "SAY")
|
|
end)
|
|
|
|
|
|
distance1Button:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot distance 30", "SAY")
|
|
end)
|
|
|
|
distance2Button:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot distance 50", "SAY")
|
|
end)
|
|
|
|
distance3Button:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot distance 85", "SAY")
|
|
end)
|
|
|
|
ShowNPCButton:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot unhide", "SAY")
|
|
end)
|
|
HideNPCButton:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot hide", "SAY")
|
|
end)
|
|
|
|
RecallNPCButton:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot recal teleport", "SAY")
|
|
end)
|
|
followOnlyButton:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot command follow only", "SAY")
|
|
end)
|
|
|
|
|
|
adminButton:SetScript("OnClick", function()
|
|
if adminFrame:IsShown() then
|
|
adminFrame:Hide()
|
|
else
|
|
adminFrame:Show()
|
|
end
|
|
end)
|
|
|
|
-- Admin Frame Button Functions
|
|
|
|
buttonAdd:SetScript("OnClick", function()
|
|
local target = UnitName("target")
|
|
if target then
|
|
-- Target is selected, run command ".npcbot add target"
|
|
ChatFrame1:AddMessage(".npcbot add " .. target)
|
|
SendChatMessage(".npcbot add ", "SAY")
|
|
else
|
|
-- Target is not selected, prompt input and run command ".npcbot add (input value)"
|
|
StaticPopupDialogs["ADD_NPC"] = {
|
|
text = "Enter NPCBOT ID:",
|
|
button1 = "Ok",
|
|
button2 = "Cancel",
|
|
hasEditBox = true,
|
|
timeout = 0,
|
|
whileDead = true,
|
|
hideOnEscape = true,
|
|
OnAccept = function(self)
|
|
local npc = self.editBox:GetText()
|
|
ChatFrame1:AddMessage(".npcbot add " .. npc)
|
|
SendChatMessage(".npcbot add " .. npc, "SAY")
|
|
end,
|
|
}
|
|
StaticPopup_Show("ADD_NPC")
|
|
end
|
|
end)
|
|
|
|
buttonRemove:SetScript("OnClick", function()
|
|
local target = UnitName("target")
|
|
if target then
|
|
-- Target is selected, run command ".npcbot remove target"
|
|
ChatFrame1:AddMessage(".npcbot remove " .. target)
|
|
SendChatMessage(".npcbot remove ", "SAY")
|
|
else
|
|
-- Target is not selected, prompt input and run command ".npcbot remove (input value)"
|
|
StaticPopupDialogs["REMOVE_NPC"] = {
|
|
text = "Enter NPCBOT ID:",
|
|
button1 = "Ok",
|
|
button2 = "Cancel",
|
|
hasEditBox = true,
|
|
timeout = 0,
|
|
whileDead = true,
|
|
hideOnEscape = true,
|
|
OnAccept = function(self)
|
|
local npc = self.editBox:GetText()
|
|
ChatFrame1:AddMessage(".npcbot remove " .. npc)
|
|
SendChatMessage(".npcbot remove " .. npc, "SAY")
|
|
end,
|
|
}
|
|
StaticPopup_Show("REMOVE_NPC")
|
|
end
|
|
end)
|
|
|
|
buttonRecall:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot recall", "SAY")
|
|
end)
|
|
|
|
buttonBotinfo:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot info", "SAY")
|
|
DoEmote("BONK")
|
|
end)
|
|
|
|
buttonMove:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot move", "SAY")
|
|
end)
|
|
|
|
buttonDelete:SetScript("OnClick", function()
|
|
StaticPopupDialogs["CONFIRM_DELETE"] = {
|
|
text = "Are you sure you want to delete?",
|
|
button1 = "Yes",
|
|
button2 = "No",
|
|
timeout = 0,
|
|
whileDead = true,
|
|
hideOnEscape = true,
|
|
OnAccept = function()
|
|
local target = UnitName("target")
|
|
if target then
|
|
-- Target is selected, run command ".npcbot delete target"
|
|
ChatFrame1:AddMessage(".npcbot delete " .. target)
|
|
SendChatMessage(".npcbot delete ", "SAY")
|
|
else
|
|
-- Target is not selected, prompt input and run command ".npcbot delete (input value)"
|
|
StaticPopupDialogs["DELETE_NPC"] = {
|
|
text = "Enter NPCBOT ID:",
|
|
button1 = "Ok",
|
|
button2 = "Cancel",
|
|
hasEditBox = true,
|
|
timeout = 0,
|
|
whileDead = true,
|
|
hideOnEscape = true,
|
|
OnAccept = function(self)
|
|
local npc = self.editBox:GetText()
|
|
ChatFrame1:AddMessage(".npcbot delete " .. npc)
|
|
SendChatMessage(".npcbot delete " .. npc, "SAY")
|
|
end,
|
|
}
|
|
StaticPopup_Show("DELETE_NPC")
|
|
end
|
|
end,
|
|
}
|
|
StaticPopup_Show("CONFIRM_DELETE")
|
|
end)
|
|
|
|
|
|
redemptionButton:SetScript("OnClick", function()
|
|
ChatFrame1:AddMessage(".npcbot revive")
|
|
SendChatMessage(".npcbot revive", "SAY")
|
|
end)
|
|
|
|
redemptionButton:SetScript("OnEnter", function(self)
|
|
GameTooltip:SetOwner(self, "ANCHOR_RIGHT")
|
|
GameTooltip:SetText(i18n("Revive Bots"))
|
|
GameTooltip:Show()
|
|
end)
|
|
|
|
redemptionButton:SetScript("OnLeave", function(self)
|
|
GameTooltip:Hide()
|
|
end)
|
|
|
|
-- Create the lookup frame
|
|
local lookupFrame = CreateFrame("Frame", "NetherbotLookupFrame", UIParent)
|
|
lookupFrame:SetSize(200, 200)
|
|
lookupFrame:SetPoint("CENTER", UIParent, "CENTER")
|
|
lookupFrame:SetBackdrop({
|
|
bgFile = "Interface/Tooltips/UI-Tooltip-Background",
|
|
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
|
|
tile = true, tileSize = 16, edgeSize = 16,
|
|
insets = { left = 4, right = 4, top = 4, bottom = 4 }
|
|
})
|
|
lookupFrame:SetBackdropColor(0, 0, 1, 0.3)
|
|
lookupFrame:SetBackdropBorderColor(0, 0, 1,1)
|
|
lookupFrame:Hide()
|
|
|
|
local lookupTitle = lookupFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
lookupTitle:SetPoint("TOPLEFT", lookupFrame, "TOPLEFT", 10, -10)
|
|
lookupTitle:SetText(i18n("Select class:"))
|
|
|
|
|
|
-- Create the scrollframe for the list
|
|
local lookupScrollFrame = CreateFrame("ScrollFrame", "NetherbotLookupScrollFrame", lookupFrame, "UIPanelScrollFrameTemplate")
|
|
lookupScrollFrame:SetPoint("TOPLEFT", lookupFrame, "TOPLEFT", 4, -25)
|
|
lookupScrollFrame:SetPoint("BOTTOMRIGHT", lookupFrame, "BOTTOMRIGHT", -4, 4)
|
|
|
|
-- Create the list frame
|
|
local lookupList = CreateFrame("Frame", "NetherbotLookupList", lookupScrollFrame)
|
|
lookupList:SetSize(lookupScrollFrame:GetWidth(), lookupScrollFrame:GetHeight())
|
|
lookupScrollFrame:SetScrollChild(lookupList)
|
|
|
|
-- Create the key-value store
|
|
local classTable = {
|
|
["Warrior"] = 1,
|
|
["Paladin"] = 2,
|
|
["Hunter"] = 3,
|
|
["Rogue"] = 4,
|
|
["Priest"] = 5,
|
|
["Death Knight"] = 6,
|
|
["Shaman"] = 7,
|
|
["Mage"] = 8,
|
|
["Warlock"] = 9,
|
|
["Druid"] = 11,
|
|
["Blademaster"] = 12,
|
|
["Sphynx"] = 13,
|
|
["Archmage"] = 14,
|
|
["Dreadlord"] = 15,
|
|
["Spellbreaker"] = 16,
|
|
["DarkRanger"] = 17,
|
|
["Necromancer"] = 18,
|
|
["SeaWitch"] = 19
|
|
}
|
|
|
|
-- Create the buttons for the list items
|
|
for key, value in pairs(classTable) do
|
|
local button = CreateFrame("Button", "NetherbotLookupButton"..value, lookupList, "UIPanelButtonTemplate")
|
|
button:SetSize(180, 25)
|
|
button:SetPoint("TOPLEFT", lookupList, "TOPLEFT", 10, -10 - (value-1)*30)
|
|
button:SetText(i18n(key))
|
|
button:GetNormalTexture():SetVertexColor(0.10,1.00,0.10)
|
|
|
|
-- Handle the button's click event
|
|
button:SetScript("OnClick", function()
|
|
SendChatMessage(".npcbot lookup " .. value, "SAY")
|
|
-- You can add your custom functionality here like running a command or doing some other action
|
|
end)
|
|
end
|
|
|
|
-- Create the "hideLookup" button
|
|
local hideLookupButton = CreateFrame("Button", "NetherbotHideLookupButton", lookupFrame, "UIPanelButtonTemplate")
|
|
hideLookupButton:SetSize(21, 20)
|
|
hideLookupButton:SetPoint("TOPRIGHT", lookupFrame, "TOPRIGHT", -10, -8)
|
|
hideLookupButton:SetText(i18n("X"))
|
|
hideLookupButton:GetNormalTexture():SetVertexColor(0.10,1.00,0.10)
|
|
|
|
|
|
-- Create the spawnFrame
|
|
local spawnFrame = CreateFrame("Frame", "NetherbotSpawnFrame", lookupFrame)
|
|
spawnFrame:SetSize(200, 60)
|
|
spawnFrame:SetPoint("BOTTOM", lookupFrame, "BOTTOM", 0, -70)
|
|
spawnFrame:SetBackdrop({
|
|
bgFile = "Interface/BUTTONS/WHITE8X8",
|
|
edgeFile = "Interface/BUTTONS/WHITE8X8",
|
|
edgeSize = 1,
|
|
insets = {left = 0, right = 0, top = 0, bottom = 0}})
|
|
spawnFrame:SetBackdropColor(0, 0, 1, 0.3)
|
|
spawnFrame:SetBackdropBorderColor(0, 0, 1,1)
|
|
|
|
-- Create the title
|
|
local spawnTitle = spawnFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
spawnTitle:SetPoint("TOPLEFT", spawnFrame, "TOPLEFT", 10, -10)
|
|
spawnTitle:SetText(i18n("Spawn BOT ID:"))
|
|
|
|
|
|
-- Create the "buttonSpawnBot" button
|
|
local buttonSpawnBot = CreateFrame("Button", "NetherbotButtonSpawnBot", spawnFrame, "UIPanelButtonTemplate")
|
|
buttonSpawnBot:SetSize(80, 25)
|
|
buttonSpawnBot:SetPoint("BOTTOMLEFT", spawnFrame, "BOTTOMLEFT", 10, 10)
|
|
buttonSpawnBot:SetText(i18n("Spawn Bot"))
|
|
buttonSpawnBot:GetNormalTexture():SetVertexColor(0.10,1.00,0.10)
|
|
|
|
-- Create the "classInput" input box
|
|
local classInput = CreateFrame("EditBox", "NetherbotClassInput", spawnFrame, "InputBoxTemplate")
|
|
classInput:SetSize(80, 25)
|
|
classInput:SetPoint("BOTTOMLEFT", buttonSpawnBot, "BOTTOMRIGHT", 10, 0)
|
|
classInput:SetAutoFocus(false)
|
|
|
|
-- Handle the buttons click event
|
|
buttonSpawnBot:SetScript("OnClick", function()
|
|
local input = classInput:GetText()
|
|
if input ~= "" then
|
|
SendChatMessage(".npcbot spawn "..input, "GUILD")
|
|
classInput:SetText(i18n(""))
|
|
classInput:ClearFocus()
|
|
else
|
|
print("Please enter an ID:")
|
|
end
|
|
end)
|
|
|
|
-- Handle Lookup buttons click event
|
|
hideLookupButton:SetScript("OnClick", function()
|
|
lookupFrame:Hide()
|
|
end)
|
|
|
|
-- Handle the Lookup buttons click event
|
|
botLookupButton:SetScript("OnClick", function()
|
|
if lookupFrame:IsShown() then
|
|
lookupFrame:Hide()
|
|
else
|
|
lookupFrame:Show()
|
|
end
|
|
end)
|
|
|
|
-- Handle lookupframe movement
|
|
-- Make the frame movable
|
|
lookupFrame:SetMovable(true)
|
|
lookupFrame:EnableMouse(true)
|
|
|
|
lookupFrame:SetScript("OnMouseDown", function(self, button)
|
|
if button == "LeftButton" then
|
|
self:StartMoving()
|
|
end
|
|
end)
|
|
|
|
-- Stop lookupframe movement.
|
|
lookupFrame:SetScript("OnMouseUp", function(self, button)
|
|
if button == "LeftButton" then
|
|
self:StopMovingOrSizing()
|
|
end
|
|
end)
|
|
|
|
-- Slash command to show-hide netherbot.
|
|
SLASH_NETHERBOT1 = "/netherbot"
|
|
function SlashCmdList.NETHERBOT(msg, editbox)
|
|
if msg == "show" then
|
|
frame:Show()
|
|
elseif msg == "hide" then
|
|
frame:Hide()
|
|
adminFrame:Hide()
|
|
lookupFrame:Hide()
|
|
end
|
|
end
|
|
|
|
-- RAID FRAMES:
|
|
|
|
-- Create main frame
|
|
local TeamFrame = CreateFrame("Frame", "TeamFrame", UIParent)
|
|
TeamFrame:SetSize(350, 600)
|
|
TeamFrame:SetPoint("CENTER")
|
|
|
|
-- Make the frame draggable
|
|
TeamFrame:SetMovable(true)
|
|
TeamFrame:EnableMouse(true)
|
|
TeamFrame:RegisterForDrag("LeftButton")
|
|
TeamFrame:SetScript("OnDragStart", TeamFrame.StartMoving)
|
|
TeamFrame:SetScript("OnDragStop", TeamFrame.StopMovingOrSizing)
|
|
TeamFrame:Hide()
|
|
|
|
-- Create tables to store information
|
|
local memberFrames = {}
|
|
local healthBars = {}
|
|
local manaBars = {}
|
|
local nameTexts = {}
|
|
local groupFrames = {}
|
|
|
|
-- Initialize frames and bars
|
|
local function initializeFramesAndBars()
|
|
|
|
-- Check if the necessary data is ready
|
|
if not RAID_CLASS_COLORS then
|
|
return -- Data is not ready, exit the function
|
|
end
|
|
|
|
-- Clear old frames and bars
|
|
for i = 1, #memberFrames do
|
|
memberFrames[i]:Hide()
|
|
end
|
|
memberFrames = {}
|
|
healthBars = {}
|
|
manaBars = {}
|
|
nameTexts = {}
|
|
|
|
-- Loop over the raid members
|
|
local numRaidMembers = GetNumRaidMembers()
|
|
for i = 1, numRaidMembers do
|
|
-- Calculate the group (1-8) and position within the group (1-5) of this member
|
|
local group = math.ceil(i / 5)
|
|
local position = i - ((group - 1) * 5)
|
|
|
|
-- If this is the first member of the group, create a group frame with a title
|
|
if position == 1 then
|
|
local groupFrame = CreateFrame("Frame", nil, TeamFrame)
|
|
groupFrame:SetSize(80, 20) -- Adjust as needed
|
|
|
|
-- Calculate the column (0-1) and row (0-7) of the group
|
|
local column = (group - 1) % 2
|
|
local row = math.floor((group - 1) / 2)
|
|
groupFrame:SetPoint("TOPLEFT", TeamFrame, "TOP", 175 * (column - 1), 10 - row * 230)
|
|
|
|
-- Set border to the frame
|
|
groupFrame:SetBackdrop({
|
|
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
|
|
tile = true, tileSize = 16, edgeSize = 16,
|
|
insets = { left = 4, right = 4, top = 4, bottom = 4 }
|
|
})
|
|
|
|
TeamFrame:SetBackdropBorderColor(1, 0, 0, 0.5)
|
|
|
|
-- Add group title
|
|
local groupTitle = groupFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
groupTitle:SetPoint("TOP", 0, -3)
|
|
groupTitle:SetText("Group: "..group)
|
|
groupTitle:SetTextColor(1, 1, 1) -- White color
|
|
|
|
-- Store the group frame
|
|
groupFrames[group] = groupFrame
|
|
end
|
|
|
|
-- Calculate the column (0-1) and row (0-7) of the group
|
|
local column = (group - 1) % 2
|
|
local row = math.floor((group - 1) / 2)
|
|
|
|
-- Create a subframe for each raid member
|
|
local memberFrame = CreateFrame("Button", nil, TeamFrame, "SecureUnitButtonTemplate")
|
|
memberFrame:SetSize(150, 42) -- Adjust size to better fit the new layout
|
|
memberFrame:SetPoint("TOPLEFT", TeamFrame, "TOPLEFT", 10 + 175 * column, -10 - ((row * 230) + (position - 1) * 42)) -- Adjusted offset to better fit the new layout
|
|
memberFrame:SetAttribute("unit", "raid"..i)
|
|
memberFrame:RegisterForClicks("AnyUp")
|
|
SecureUnitButton_OnLoad(memberFrame, "raid"..i)
|
|
|
|
-- Set border to the frame
|
|
memberFrame:SetBackdrop({bgFile = "Interface/Tooltips/UI-Tooltip-Background",
|
|
edgeFile = "Interface/Tooltips/UI-Tooltip-Border",
|
|
tile = true, tileSize = 16, edgeSize = 16,
|
|
insets = { left = 4, right = 4, top = 4, bottom = 4 }
|
|
})
|
|
local playerClass, charClass, classIndex = UnitClass("raid"..i)
|
|
local classColor = RAID_CLASS_COLORS[charClass] or { r = 1, g = 1, b = 1 } -- Use a default color if characterClass is not found in RAID_CLASS_COLOR - Workaround for the delay of bots spawning
|
|
memberFrame:SetBackdropBorderColor(classColor.r, classColor.g, classColor.b, 0.8) -- Set the border color to class color
|
|
memberFrame:SetBackdropColor(classColor.r, classColor.g, classColor.b, 0.2)
|
|
|
|
|
|
-- Add the player's name
|
|
local playerName, playerRealm = UnitName("raid"..i)
|
|
local playerClass, charClass, classIndex = UnitClass("raid"..i)
|
|
local classColor = RAID_CLASS_COLORS[charClass] or { r = 1, g = 1, b = 1 }
|
|
local nameText = memberFrame:CreateFontString(nil, "OVERLAY", "GameFontNormal")
|
|
nameText:SetPoint("TOP", 5, -5)
|
|
nameText:SetText(playerName)
|
|
nameText:SetTextColor(classColor.r, classColor.g, classColor.b)
|
|
|
|
-- Add the health bar
|
|
local healthBar = CreateFrame("StatusBar", nil, memberFrame)
|
|
healthBar:SetStatusBarTexture("Interface\\TARGETINGFRAME\\UI-StatusBar")
|
|
healthBar:SetPoint("TOP", nameText, "BOTTOM", 0, -2)
|
|
healthBar:SetSize(100, 8)
|
|
healthBar:SetMinMaxValues(0, UnitHealthMax("raid"..i))
|
|
healthBar:SetValue(UnitHealth("raid"..i))
|
|
|
|
-- Add the mana bar
|
|
local manaBar = CreateFrame("StatusBar", nil, memberFrame)
|
|
manaBar:SetStatusBarTexture("Interface\\TARGETINGFRAME\\UI-StatusBar")
|
|
manaBar:SetStatusBarColor(0, 0, 1)
|
|
manaBar:SetPoint("TOP", healthBar, "BOTTOM", 0, 0)
|
|
manaBar:SetSize(100, 8)
|
|
manaBar:SetMinMaxValues(0, UnitPowerMax("raid"..i))
|
|
manaBar:SetValue(UnitPower("raid"..i))
|
|
|
|
-- Add frames, bars, and texts to the tables
|
|
memberFrames[i] = memberFrame
|
|
healthBars[i] = healthBar
|
|
manaBars[i] = manaBar
|
|
nameTexts[i] = nameText
|
|
end
|
|
end
|
|
|
|
-- Event handler for unit health and mana changes
|
|
local function updateHealthAndMana(self, event, unit)
|
|
for i = 1, #healthBars do
|
|
if unit == "raid"..i then
|
|
healthBars[i]:SetMinMaxValues(0, UnitHealthMax(unit))
|
|
healthBars[i]:SetValue(UnitHealth(unit))
|
|
manaBars[i]:SetMinMaxValues(0, UnitPowerMax(unit))
|
|
manaBars[i]:SetValue(UnitPower(unit))
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Event handler for raid composition changes
|
|
local function updateRaidComposition(self, event, ...)
|
|
initializeFramesAndBars()
|
|
end
|
|
|
|
-- Event handler for BotSpawn delay
|
|
local function OnEvent(self, event, ...)
|
|
if event == "PLAYER_ENTERING_WORLD" or event == "RAID_ROSTER_UPDATE" or event == "ADDON_LOADED" then
|
|
initializeFramesAndBars()
|
|
else
|
|
updateHealthAndMana(self, event, ...)
|
|
end
|
|
end
|
|
|
|
-- Register events
|
|
TeamFrame:RegisterEvent("UNIT_HEALTH")
|
|
TeamFrame:RegisterEvent("UNIT_POWER_UPDATE")
|
|
TeamFrame:RegisterEvent("RAID_ROSTER_UPDATE")
|
|
TeamFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
TeamFrame:SetScript("OnEvent", function(self, event, ...)
|
|
if event == "PLAYER_ENTERING_WORLD" or event == "RAID_ROSTER_UPDATE" then
|
|
initializeFramesAndBars()
|
|
else
|
|
updateHealthAndMana(self, event, ...)
|
|
end
|
|
end)
|
|
TeamFrame:SetScript("OnEvent", OnEvent)
|
|
|
|
raidButton:SetScript("OnClick", function()
|
|
if TeamFrame:IsShown() then
|
|
TeamFrame:Hide()
|
|
else
|
|
initializeFramesAndBars()
|
|
TeamFrame:Show()
|
|
end
|
|
end)
|