view Config.lua @ 12:ad6dff5d31c7 Release

Note: The latest updates changed some of the settings. If you are encountering an error with Bloodhound2 please exit the game and delete the "bloodhound2.lua" and "bloodhound2.lua.bak" files from the SavedVariables folder. Removed Quest completion detection from Troves. Will add this detection back in a later patch. Until then Trove rubies will not disappear if you have already looted one for the week. Added Dark Soil Nodes to the DB. Dark Soil is not lootable unless you have completed the "Learn and Grow V: Halfhill Market" quest in Vot4W.
author only1yzerman
date Fri, 28 Jun 2013 04:02:50 -0400
parents 61b30721d4cf
children
line wrap: on
line source
-------- YOU'RE ON YOUR OWN HERE, THIS IS A FRIKKIN MESS - Osmium
-------- Challenge Accepted - Whyzerman

local element;
local frame;

Settings = {};
Settings.MultiZoneMode = 0;
Settings.HerbFilter = {};
Settings.OreFilter = {};
Settings.MiscFilter = {};
Settings.ZoneFilter = {{}, {}, {}, {}, {}};
Settings.InspectionRadius = 60;

local function Title(text)
	local str = frame:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge");
	str:SetPoint("TOPLEFT", element, "TOPLEFT", 16, -16);
	str:SetJustifyH("LEFT");
	str:SetJustifyV("TOP");
	str:SetText(text);
	element = str;
end

local function Column2(offset)
	local str = frame:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge");
	str:SetPoint("TOPLEFT", element, "TOPRIGHT", -offset, -16);
	str:SetText(" ");
	element = str;
end

local function Heading(text)
	local str = frame:CreateFontString(nil, "OVERLAY", "GameFontHighlight");
	str:SetPoint("TOPLEFT", element, "BOTTOMLEFT", 0, -8);
	str:SetText(text);
	element = str;
end

local ddCount = 0;

local function DropDown(settings, key, width, init)
	ddCount = ddCount + 1;
	local dd = CreateFrame("Frame", "dropDown"..ddCount, frame, "UIDropDownMenuTemplate");
	dd:EnableMouse(true);
	dd:SetPoint("TOPLEFT", element, "BOTTOMLEFT", 0, -8);
	dd.State = {};
	UIDropDownMenu_Initialize(dd, init);
	UIDropDownMenu_SetWidth(dd, width);
	UIDropDownMenu_JustifyText(dd, "LEFT");
	UIDropDownMenu_SetSelectedValue(dd, settings[key]);
	element = dd;
end

function AddButton(settings, key, menu, label, value)
	local info = UIDropDownMenu_CreateInfo();
	info.text = label;
	info.value = value;
	info.owner = menu;
	info.func = function()
		UIDropDownMenu_SetSelectedValue(menu, value);
		settings[key] = value;
		Bloodhound2.UpdateMinimap();
	end;
	UIDropDownMenu_AddButton(info);
end

local cbCount = 0;

function CheckBox(label, value, relative, anchor, dx, dy, state)
	cbCount = cbCount + 1;
	local cb = CreateFrame("CheckButton", "checkBox"..cbCount, frame, "UICheckButtonTemplate");
	cb:SetWidth(16);
	cb:SetHeight(16);
	cb:SetPoint("TOPLEFT", relative, anchor, dx, dy);
	local text = getglobal(cb:GetName() .. "Text");
	text:SetText(label);
	cb:SetChecked(not state[value]);
	cb:SetScript("OnClick", function(self)
		if (self:GetChecked()) then
			state[value] = nil;
		else
			state[value] = 1;
		end
		Bloodhound2.UpdateMinimap();
	end);
	element = cb;
	return text:GetWidth();
end

function ContinentName()
	return select(GetCurrentMapContinent(), GetMapContinents());
end

function CheckBoxes(table, state)
	local relative;
	local bottom;
	local height = 1;
	local maxWidth = 0;
	local i = 0;
	local checkboxes = {};

	for k, v in pairs(table) do
		height = height + 1;
	end

	height = floor(height / 2);
	if height > 19 then height = 19; end;

	for k, v in pairs(table) do
		i = i + 1;
		if (i > 1) and (mod(i, height) == 1) then
			width = CheckBox(v, k, relative, "TOPRIGHT", maxWidth + 6, 0, state);	
			relative = element;
			maxWidth = width;
		else
			width = CheckBox(v, k, element, "BOTTOMLEFT", 0, 0, state);
			if (i == 1) then relative = element; end;
			maxWidth = max(width, maxWidth);
		end
		if (i == height) then bottom = element; end;
		checkboxes[k] = element;
	end

	local button = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate");
	button:SetText(L["All"]);
	local allWidth = button:GetTextWidth() + 30;
	button:SetWidth(allWidth);
	button:SetHeight(22);
	button:SetPoint("TOPLEFT", bottom, "TOPLEFT", 0, -20);
	button:SetScript("OnClick", 
		function(self, button, down)
			for k, v in pairs(table) do
				checkboxes[k]:SetChecked(true);
				state[k] = nil;
			end
		end
	);

	element = button;

	local button = CreateFrame("Button", nil, frame, "UIPanelButtonTemplate");
	button:SetText(L["None"]);
	button:SetWidth(button:GetTextWidth() + 30);
	button:SetHeight(22);
	button:SetPoint("TOPLEFT", bottom, "TOPLEFT", allWidth + 20, -20);
	button:SetScript("OnClick", 
		function(self, button, down)
			for k, v in pairs(table) do
				checkboxes[k]:SetChecked(false);
				state[k] = 1;
			end
		end
	);
end

function AddZones(...)
	local table = {};

	for i=1,select("#", ...),1 do
		table[i] = select(i, ...);
	end

	if not Settings.ZoneFilter then
		Settings.ZoneFilter = {{},{},{},{},{}};
	end
	
	local c = GetCurrentMapContinent()
	
	if not Settings.ZoneFilter[c] then
		Settings.ZoneFilter[c] = {}
	end

	CheckBoxes(table, Settings.ZoneFilter[c]);
end

function AddHerbs()
	local table = {};

	for h, v in pairs(Bloodhound2.ContinentHerbs) do
		local name = L[h];
		if not name then name="Herb "..h; end;
		table[h] = name;
	end

	if not Settings.HerbFilter then
		Settings.HerbFilter = {};
	end

	CheckBoxes(table, Settings.HerbFilter);
end

function AddOre()
	local table = {};

	for h, v in pairs(Bloodhound2.ContinentOre) do
		local name = L[h];
		if not name then name="Ore "..h; end;
		table[h] = name;
	end

	if not Settings.OreFilter then
		Settings.OreFilter = {};
	end

	CheckBoxes(table, Settings.OreFilter);
end

function AddMisc()
	local table = {};

	for h, v in pairs(Bloodhound2.ContinentNode) do
		local name = L[h];
		if not name then name="Misc "..h; end;
		table[h] = name;
	end

	if not Settings.MiscFilter then
		Settings.MiscFilter = {};
	end

	CheckBoxes(table, Settings.MiscFilter);
end

local function CopyTable(table)
	local copy = {};
	for k,v in pairs(table) do
		if (type(v) == "table") then
			copy[k] = CopyTable(v);
		else
			copy[k] = v;
		end
	end
	return copy;
end

local configFrame;
local BackupSettings;

local function RefreshConfigFrame()
	if (configFrame) then
		configFrame:Hide();
	end

	BackupSettings = CopyTable(Settings);

	configFrame = CreateFrame("Frame", nil, Bloodhound2.panel);
	configFrame:SetAllPoints(Bloodhound2.panel);
	frame = configFrame;
	element = frame;
	Title(L["Bloodhound2 Options"]);
	Heading(L["Multi-Zone"]);
	DropDown(Settings, "MultiZoneMode", 120, function(menu)
		AddButton(Settings, "MultiZoneMode", menu, L["While flying"], 0);
		AddButton(Settings, "MultiZoneMode", menu, L["Always"], 1);
		AddButton(Settings, "MultiZoneMode", menu, L["Never"], 2);
	end);
	Heading(L["Zones"].." ("..ContinentName()..")");
	AddZones(GetMapZones(GetCurrentMapContinent()));
	element = frame;
	Column2(150);
	Heading(L["Inspection radius"]);
	DropDown(Settings, "InspectionRadius", 70, function(menu)
		AddButton(Settings, "InspectionRadius", menu, 30, 30);
		AddButton(Settings, "InspectionRadius", menu, 35, 35);
		AddButton(Settings, "InspectionRadius", menu, 40, 40);
		AddButton(Settings, "InspectionRadius", menu, 45, 45);
		AddButton(Settings, "InspectionRadius", menu, 50, 50);
		AddButton(Settings, "InspectionRadius", menu, 60, 60);
		AddButton(Settings, "InspectionRadius", menu, 70, 70);
		AddButton(Settings, "InspectionRadius", menu, 80, 80);
		AddButton(Settings, "InspectionRadius", menu, 90, 90);
		AddButton(Settings, "InspectionRadius", menu, 100, 100);
		AddButton(Settings, "InspectionRadius", menu, 120, 120);
	end);
end

local herbFrame;

local function RefreshHerbs()
	if (herbFrame) then herbFrame:Hide(); end;
	herbFrame = CreateFrame("Frame", nil, Bloodhound2.herbPanel);
	herbFrame:SetAllPoints(Bloodhound2.herbPanel);
	frame = herbFrame;
	element = frame;
	Title(L["Bloodhound2 Options"]);
	Heading(L["Herbs"].." ("..ContinentName()..")");
	AddHerbs();
end

local oreFrame;

local function RefreshOre()
	if (oreFrame) then oreFrame:Hide(); end;
	oreFrame= CreateFrame("Frame", nil, Bloodhound2.orePanel);
	oreFrame:SetAllPoints(Bloodhound2.orePanel);
	frame = oreFrame;
	element = frame;
	Title(L["Bloodhound2 Options"]);
	Heading(L["Minerals"].." ("..ContinentName()..")");
	AddOre();
end

local miscFrame;

local function RefreshMisc()
	if (miscFrame) then miscFrame:Hide(); end;
	miscFrame= CreateFrame("Frame", nil, Bloodhound2.miscPanel);
	miscFrame:SetAllPoints(Bloodhound2.miscPanel);
	frame = miscFrame;
	element = frame;
	Title(L["Bloodhound2 Options"]);
	Heading(L["Misc"].." ("..ContinentName()..")");
	AddMisc();
end

local function RestoreHerbDefaults()
	Settings.HerbFilter = {};
end

local function RestoreOreDefaults()
	Settings.OreFilter = {};
end

local function RestoreMiscDefaults()
	Settings.MiscFilter = {};
end

local function RestoreZoneDefaults()
	Settings.MultiZoneMode = 0;
	Settings.InspectionRadius = 60;
	Settings.ZoneFilter[GetCurrentMapContinent()] = {};
end

Bloodhound2.panel = CreateFrame("FRAME", "Bloodhound2", Bloodhound2.Frame);
Bloodhound2.panel.name = L["Bloodhound2"];
Bloodhound2.panel.default = RestoreZoneDefaults;
Bloodhound2.panel.okay = function() end;
Bloodhound2.panel.cancel = function() Settings = BackupSettings; Bloodhound2.UpdateMinimap(); end;
Bloodhound2.panel.refresh = RefreshConfigFrame;
InterfaceOptions_AddCategory(Bloodhound2.panel);

Bloodhound2.herbPanel = CreateFrame("FRAME", "Bloodhound2_Herbs", Bloodhound2.Frame);
Bloodhound2.herbPanel.name = L["Herbs"];
Bloodhound2.herbPanel.parent = "Bloodhound2";
Bloodhound2.herbPanel.default = RestoreHerbDefaults;
Bloodhound2.herbPanel.okay = function() end;
Bloodhound2.herbPanel.cancel = function() end;
Bloodhound2.herbPanel.refresh = RefreshHerbs;
InterfaceOptions_AddCategory(Bloodhound2.herbPanel);

Bloodhound2.orePanel = CreateFrame("FRAME", "Bloodhound2_Ore", Bloodhound2.Frame);
Bloodhound2.orePanel.name = L["Minerals"];
Bloodhound2.orePanel.parent = "Bloodhound2";
Bloodhound2.orePanel.default = RestoreOreDefaults;
Bloodhound2.orePanel.okay = function() end;
Bloodhound2.orePanel.cancel = function() end;
Bloodhound2.orePanel.refresh = RefreshOre;
InterfaceOptions_AddCategory(Bloodhound2.orePanel);

Bloodhound2.miscPanel = CreateFrame("FRAME", "Bloodhound2_Misc", Bloodhound2.Frame);
Bloodhound2.miscPanel.name = L["Misc"];
Bloodhound2.miscPanel.parent = "Bloodhound2";
Bloodhound2.miscPanel.default = RestoreMiscDefaults;
Bloodhound2.miscPanel.okay = function() end;
Bloodhound2.miscPanel.cancel = function() end;
Bloodhound2.miscPanel.refresh = RefreshMisc;
InterfaceOptions_AddCategory(Bloodhound2.miscPanel);