⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 statusbars.lua

📁 时间太紧了
💻 LUA
📖 第 1 页 / 共 4 页
字号:
-- StatusBars.lua, Daniel Wessl閚 <wesslen@users.sourceforge.net>

-- fixed defaults
local BarSpacing = 18;
local DefaultBGAlpha = 0.35;
local FlashBGAlpha = 0.8;
local FlashDuration = 0.5;
local ComboFlashDuration = 0.25;
local MaxBuffs = 8; 			-- requires StatusBars.php
local FadeInDuration = 0.2;
local FadeOutDuration = 1.5;

-- possible values for the 'enable' setting
local EnableAlways = 'always';
local EnableInCombat = 'combat';
local EnableInCombatOnly = 'combatonly';
local EnableNondefault = 'auto';
local EnableNever = 'never';

-- possible values for the 'percentage' setting
local PercentageLeft = 'left';
local PercentageRight = 'right';
local PercentageNone = 'none';

-- defaults for user-configurable settings
local DefaultEnable = EnableInCombat;
local DefaultWarnLimit = 0.6;
local DefaultText = '&cur / &max';
local DefaultPercentage = PercentageRight;
local DefaultPercentageText = '&frac%';
local DefaultAlpha = 1;

local DefaultTextColor = 'white';
local DefaultPercentageTextColor = 'ffd100';
local DefaultHealthColor = '<25%:red <50%:orange <75%:yellow green';
local DefaultManaColor = 'blue';
local DefaultRageColor = 'red';
local DefaultEnergyColor = 'yellow';
local DefaultFocusColor = 'orange';
local DefaultComboColor = 'red';
local DefaultHappinessColor = '<50%:red <90%:yellow green';

-- bar information containers
local health = {};
local power = {}; -- mana/rage/energy depending on class
local combo = {};
local druid = {};
local buff = {};
local debuff = {};
local targetHealth = {};
local targetPower = {};
local targetBuff = {};
local targetDebuff = {};
local petHealth = {};
local petPower = {};
local happiness = {};
local petBuff = {};
local petDebuff = {};

local bars = {
	health, power, combo, druid, buff, debuff,
	targetHealth, targetPower, targetDebuff, targetBuff,
	petHealth, petPower, happiness, petBuff, petDebuff
};

local playerLogicals = { 'health', 'mana', 'rage', 'energy', 'focus', 'combo', 'druid', 'buff', 'debuff' };
local targetLogicals = { 'thealth', 'tmana', 'trage', 'tenergy', 'tfocus', 'tdebuff', 'tbuff' };
local petLogicals = { 'phealth', 'pmana', 'prage', 'penergy', 'pfocus', 'phappy', 'pbuff', 'pdebuff' };

local groupedBars = {};
local tickingBars = {};

local groupContainers = {
	Player = true,
	Target = true,
	Pet = true,
	Group1 = true,
	Group2 = true,
	Group3 = true,
	Group4 = true,
	Group5 = true
};

-- Settings:
--
--	enable: when the bar should be visible
--	   EnableAlways
--	   EnableInCombat:	when in combat and when the property has a non-default value
--	   EnableNondefault:	when the property has a non-default value
--	   EnableNever
--	flash: if the bar should flash when the property is far from the default value
--	warn: distance from the default value at which the bad will flash (i.e. 0.6 = 40% left)
--	text: if current / max should be written on the bar
--	percentage: percentage display (none/left/right)
--	color: (for health only) if the bar should change color ti illustrate the value
--
StatusBars_Settings5 = {};
StatusBars_locked = false;

local playerName = '';
local variables_loaded = false;
local load_time = 0;
local fully_initialized = false;

-- default settings
local function defaultMana() return {
	flash = true,
	color = DefaultManaColor,
}; end
local function defaultRage() return {
	color = DefaultRageColor,
}; end
local function defaultEnergy() return {
	color = DefaultEnergyColor,
}; end
local function defaultFocus() return {
	color = DefaultFocusColor,
}; end
local function defaultBuff(visible)
	t = {
		text = '',
		ptext = '',
	};
	if visible then
		t.enable = EnableInCombatOnly;
	else
		t.enable = EnableNever;
	end
	return t;
end
local function targetDefaultBuff() return {
	text = '',
	ptext = '',
}; end
local defaultSettings = {
	health = {
		flash = true,
		color = DefaultHealthColor,
	},
	mana = defaultMana(),
	rage = defaultRage(),
	energy = defaultEnergy(),
	focus = defaultFocus(),
	combo = {
		text = '',
		percentage = PercentageNone,
		color = DefaultComboColor,
	},
	druid = {
		color = DefaultManaColor,
		enable = EnableNondefault,
	},
	buff = defaultBuff(false),
	debuff = defaultBuff(),
	thealth = {
		text = '&rank &name',
		color = DefaultHealthColor,
	},
	tmana = defaultMana(),
	trage = defaultRage(),
	tenergy = defaultEnergy(),
	tfocus = defaultFocus(),
	tbuff = targetDefaultBuff(),
	tdebuff = targetDefaultBuff(),
	phealth = {
		text = '&name',
		color = DefaultHealthColor,
	},
	pmana = defaultMana(),
	prage = defaultRage(),
	penergy = defaultEnergy(),
	phappy = {
		text = '&happy',
		flash = true,
		warn = 0.5,
		color = DefaultHappinessColor,
		percentage = PercentageNone,
		enable = EnableNondefault,
	},
	pfocus = defaultFocus(),
	pbuff = defaultBuff(false),
	pdebuff = defaultBuff(),
};

local function consolePrint(msg)
	--DEFAULT_CHAT_FRAME:AddMessage('StatusBars: ' .. msg);
end
local function StatusBars_Enabler(toggle)
	if (toggle == 1) then
		StatusBars_Enable = 1;
		StatusBar.Enable = 1;
		StatusBars_PlayerContainer:Show();
		StatusBars_TargetContainer:Show();
		StatusBars_PetContainer:Show();
		StatusBars_Group1Container:Show();
		StatusBars_Group2Container:Show();
		StatusBars_Group3Container:Show();
		StatusBars_Group4Container:Show();
		StatusBars_Group5Container:Show();
	else
		StatusBars_Enable = 0;
		StatusBar.Enable = 0;
		StatusBars_PlayerContainer:Hide();
		StatusBars_TargetContainer:Hide();
		StatusBars_PetContainer:Hide();
		StatusBars_Group1Container:Hide();
		StatusBars_Group2Container:Hide();
		StatusBars_Group3Container:Hide();
		StatusBars_Group4Container:Hide();
		StatusBars_Group5Container:Hide();
	end
end
local function StatusBars_LOCK(toggle)
	if (toggle == 0) then
		StatusBars_locked  = false;	
	else
		StatusBars_locked  = true;
	end	
end
local function StatusBars_Register()
	if ( StatusBar == nil )then
		StatusBar = {};
	end
	if ( StatusBar.Enable == nil )then
		StatusBar.Enable = 1;
	end
	StatusBars_Enable = StatusBar.Enable;
	if ( StatusBars_Enable == 0 ) then
		StatusBars_PlayerContainer:Hide();
		StatusBars_TargetContainer:Hide();
		StatusBars_PetContainer:Hide();
		StatusBars_Group1Container:Hide();
		StatusBars_Group2Container:Hide();
		StatusBars_Group3Container:Hide();
		StatusBars_Group4Container:Hide();
		StatusBars_Group5Container:Hide();
	end

  gLim_RegisterButton (
	"Status Bars",
	"战斗指示灯",
	"Interface\\AddOns\\StatusBars\\Icon", 
	function()
		gLimModSecBookShowConfig("gLimStatusBars");
	end,
	2,
	3
	);

  gLim_RegisterConfigClass(
	"gLimStatusBars",
	"Status Bars",
	"黑眼圈"
	);
  gLim_RegisterConfigSection(
	"gLimStatusBarsSection",
	"战斗指示灯",
	"战斗指示灯设置",
	"黑眼圈",
	"gLimStatusBars"
	);
  gLim_RegisterConfigCheckBox(
	"gLim_StatusBars_Enable",
	"开启战斗指示灯",
	"选择开启战斗指示灯",
	StatusBars_Enable,
	StatusBars_Enabler,
	"gLimStatusBars"
	);
  local glimStatusBars_locked;
  if (StatusBars_locked == true) then
  	glimStatusBars_locked = 1;
  else
	glimStatusBars_locked = 0;
  end

  gLim_RegisterConfigCheckBox(
	"gLim_StatusBars_LOCKEnable",
	"锁定当前位置",
	"锁定当前位置,如果不锁定你可以按住SHIFT加鼠标左键来定位状态条的位置",
	glimStatusBars_locked,
	StatusBars_LOCK,
	"gLimStatusBars"
	);
end


local function clone(x)
	if type(x) == 'table' then
		local t = {};
		table.foreach(x,
			function(key, val)
				t[key] = clone(val);
			end
		);
		return t;
	else
		return x;
	end
end

-- set global defaults (does not override already set values)
local function setDefault(which, value)
	table.foreach(defaultSettings,
		function(logical, ops)
			if ops[which] == nil then
				ops[which] = value;
			end
		end
	);
end
local function setDefaultGroup(group, logicals)
	table.foreach(logicals,
		function(i, logical)
			defaultSettings[logical]['group'] = group;
		end
	);
end
setDefault('enable', DefaultEnable);
setDefault('text', DefaultText);
setDefault('warn', DefaultWarnLimit);
setDefault('flash', false);
setDefault('alpha', DefaultAlpha);
setDefault('percentage', DefaultPercentage);
setDefault('ptext', DefaultPercentageText);
setDefault('scale', 1);
setDefault('tcolor', DefaultTextColor);
setDefault('pcolor', DefaultPercentageTextColor);
setDefaultGroup('player', playerLogicals);
setDefaultGroup('target', targetLogicals);
setDefaultGroup('pet', petLogicals);

defaultSettings.tbuff.warn = nil;
defaultSettings.tbuff.flash = nil;

local function round(x) return floor(x + 0.5); end
local function trim(text) return string.gsub(text, "%s*(.-)%s*$", "%1", 1); end

-- get option
local function optionT(logical, which)
	local value = nil;
	local t;
	if playerName ~= '' then
		t = StatusBars_Settings5[playerName];
		if t ~= nil then
			t = t[logical];
			if t ~= nil then
				value = t[which];
			end
		end
	end
	if value == nil then
		t = defaultSettings[logical];
		if t == nil then
			return nil;
		elseif (logical == 'thealth' or logical == 'phealth')
			and which == 'text' and MobHealthFrame ~= nil then
			return DefaultText;
		else
			return t[which];
		end
	else
		return value;
	end
end
local function option(vars, which)
	return optionT(vars.logical, which);
end

--set option
local function setOptionT(logical, which, value)
	local char = StatusBars_Settings5[playerName];
	if char == nil then
		char = {};
		StatusBars_Settings5[playerName] = char;
	end
	local l = char[logical];
	if l == nil then
		l = {};
		char[logical] = l;
	end
	l[which] = value;
end

local function assignGroups()
	groupedBars = {};
	table.foreach(groupContainers,
		function(uname, t)
			local lname = string.lower(uname);
			groupedBars[lname] = { n = 0, name = uname };
		end
	);
	table.foreachi(bars,
		function(i, vars)
			local vars = bars[i];
			if vars.logical == nil then
				-- not fully loaded yet
				return;
			end
			local g = option(vars, 'group');
			table.insert(groupedBars[g], vars);
		end
	);
end

-- place the active bars
-- used to remove the empty space where the combo bar would be when in bear form
local function sortBars(gbars, container)
	local pos = 0;
	local cname = 'StatusBars_' .. container .. 'Container';
	local cvar = getglobal(cname);
	table.foreachi(gbars,
		function(i, vars)
			if not vars.never and (vars.visible or (vars.softEnable and not vars.nospace)) then
				vars.frame:SetPoint('TOP', cname, 'TOP', 0, pos);
				pos = pos - BarSpacing;
			end
		end
	);
	cvar:SetHeight(abs(pos)+1);
end
local function sortGroupBars(name)
	local g = groupedBars[name];
	if g then
		sortBars(g, g.name);
	end
end
local function sortNeighborBars(vars)
	sortGroupBars(option(vars, 'group'));
end
local function sortAllBars()
	table.foreach(groupContainers,
		function(uname, t)
			local lname = string.lower(uname);
			sortGroupBars(lname);
		end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -