eluna-scripts-ornfelt/lua/NetherBot/netherbot.lua
2024-09-23 07:59:23 +02:00

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)