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

📄 damagemeters.lua

📁 时间太紧了
💻 LUA
📖 第 1 页 / 共 5 页
字号:
				itemText:SetPoint("LEFT", itemButton:GetName(), "LEFT", 0, 0);
				itemText:SetPoint("TOP", itemButton:GetName(), "TOP", 0, 0);
				itemText:SetPoint("RIGHT", itemButton:GetName(), "RIGHT", 0, 0);
				itemText:SetPoint("BOTTOM", itemButton:GetName(), "BOTTOM", 0, 0);

				-- Justify text
				if (DMVIEW_MIN == DamageMeters_viewMode or DamageMeters_flags[DMFLAG_justifyTextLeft]) then
					itemText:SetJustifyH("LEFT");
				else
					itemText:SetJustifyH("CENTER");
				end
			end
		end
	end

	DamageMeters_SetBackgroundColor();

	DamageMeters_frameNeedsToBeGenerated = false;
	DamageMeters_firstGeneration = false;
end

function DamageMetersFrame_SetBarInfo(barIndex, tableIndex, totalValue, maxValue, isMax, playerValue)
	if (DM_Bypass["SetBarInfo All"] == true) then
		return;
	end

	--DMPrintD("DamageMetersFrame_SetBarInfo, barIndex = "..barIndex..", totalValue = "..totalValue..", maxValue = "..maxValue);

	local red = 0.00;
	local green = 0.00;
	local blue = 0.00;
	local barString = "";

	local tableEntry = DamageMeters_tables[DMT_VISIBLE][tableIndex];
	local player = tableEntry.player;
	local dmi = DamageMeters_GetQuantityDMI(DamageMeters_quantity);
	local age;
	if (DamageMeters_Quantity_TIME == DamageMeters_quantity) then
		age = GetTime() - tableEntry.lastTime;
	elseif (dmi ~= nil) then
		age = GetTime() - tableEntry.dmiData[dmi].lastQuantTime;
	else
		-- This case covers quantities without dmis (and hence no last times).
		-- Could put a system in for calculating it, but I doubt we really care.
		age = 60;
	end

	local relationship = tableEntry.relationship;
	if (DMVIEW_MIN == DamageMeters_viewMode) then
		local color = DamageMeters_quantityColor[DamageMeters_quantity];
		red = color[1];
		green = color[2] 
		blue = color[3];
	else
		if (DamageMeters_colorScheme == 1) then
			if (DamageMeters_Relation_SELF == relationship) then
				green = 1.00;
			elseif (DamageMeters_Relation_PET == relationship) then
				green = 0.80;
			elseif (DamageMeters_Relation_PARTY == relationship) then
				blue = 1.00;
			elseif (DamageMeters_Relation_FRIENDLY == relationship) then
				red = 1.00;
				green = 0.50;
			end
		else
			local class = tableEntry.class;
			if (class) then
				local color = DamageMeters_GetClassColor(class);
				red = color.r;
				green = color.g;
				blue = color.b;
			elseif (DamageMeters_Relation_PET == relationship) then
				red = 0.00;
				green = 0.80;
				blue = 0.00;
			else
				red = 0.70;
				green = 0.70;
				blue = 0.70;
			end
		end
	end

	-- Bar color pulse magnitude.
	local pulseMag = 0.00;
	if (DamageMeters_flags[DMFLAG_constantVisualUpdate]) then
		if (age < DamageMeters_PULSE_TIME) then
			pulseMag = 1.00 - age / DamageMeters_PULSE_TIME;
		end
	end

	-- Calc value
	local value;
	local dmi = DamageMeters_GetQuantityDMI(DamageMeters_quantity);
	if (DamageMeters_quantity == DamageMeters_Quantity_TIME) then
		value = age;
	else
		value = DamageMeters_GetQuantityValue(DamageMeters_quantity, DMT_VISIBLE, tableIndex);
	end


	-- TEXT --
	local stateAge = GetTime() - DamageMeters_textStateStartTime;
	local barAge = stateAge - (barIndex / DamageMeters_barCount) * (DamageMeters_BARFADEINMINTIME + DamageMeters_BARFADEINTIME * DamageMeters_barCount);

	if ((barAge > 0) or (not DamageMeters_flags[DMFLAG_constantVisualUpdate])) then
		-- DamageMeters_Text_MAX many entries.
		local rankString = nil;
		local nameString = nil;
		local totalPercentString = nil;
		local leaderPercentString = nil;
		local valueString = nil;
		local deltaString = nil;

		-- Rank
		if (DMVIEW_MIN == DamageMeters_viewMode or
			((DamageMeters_textState > 0 and DamageMeters_textState == DamageMeters_Text_RANK) or
			(DamageMeters_textState <= 0 and DamageMeters_textOptions[DamageMeters_Text_RANK]))) then
			rankString = tostring(tableIndex);
		end

		-- Name
		if (not (DMVIEW_MIN == DamageMeters_viewMode)) then
			if ((DamageMeters_textState > 0 and DamageMeters_textState == DamageMeters_Text_NAME) or
				(DamageMeters_textState <= 0 and DamageMeters_textOptions[DamageMeters_Text_NAME])) then
				nameString = player;
			end
		end

		-- Total Percentage
		if (DamageMeters_Quantity_TIME ~= DamageMeters_quantity and totalValue ~= nil and (not DamageMeters_IsQuantityPS(DamageMeters_quantity) or (not DamageMeters_flags[DMFLAG_showFightAsPS]))) then
			if ((DamageMeters_textState > 0 and DamageMeters_textState == DamageMeters_Text_TOTALPERCENTAGE) or
				(DamageMeters_textState <= 0 and DamageMeters_textOptions[DamageMeters_Text_TOTALPERCENTAGE])) then
				local percent = (totalValue > 0) and ((value / totalValue) * 100) or 0;
				totalPercentString = string.format("%.2f%%", percent);
			end
		end

		-- Leader Percentage
		if (DamageMeters_Quantity_TIME ~= DamageMeters_quantity and totalValue ~= nil and (not DamageMeters_IsQuantityPS(DamageMeters_quantity) or (not DamageMeters_flags[DMFLAG_showFightAsPS]))) then
			if ((DamageMeters_textState > 0 and DamageMeters_textState == DamageMeters_Text_LEADERPERCENTAGE) or
				(DamageMeters_textState <= 0 and DamageMeters_textOptions[DamageMeters_Text_LEADERPERCENTAGE])) then
				local percent = (maxValue > 0) and ((value / maxValue) * 100) or 0;
				leaderPercentString = format("%.2f%%", percent);
			end
		end

		-- Value
		local buildValueString = false;
		if (DamageMeters_textState > 0 and DamageMeters_textState == DamageMeters_Text_VALUE) then
			buildValueString = true;
		elseif (DamageMeters_textState <= 0 and DamageMeters_textOptions[DamageMeters_Text_VALUE]) then
			buildValueString = true;
		elseif (DamageMeters_textState == 0 and 
				(DamageMeters_quantity == DamageMeters_Quantity_TIME or DamageMeters_IsQuantityPS(DamageMeters_quantity))) then
			buildValueString = true;
		end

		-- Delta
		if (DamageMeters_Quantity_TIME ~= DamageMeters_quantity and totalValue ~= nil and (not DamageMeters_IsQuantityPS(DamageMeters_quantity) or (not DamageMeters_flags[DMFLAG_showFightAsPS]))) then
			if ((DamageMeters_textState > 0 and DamageMeters_textState == DamageMeters_Text_DELTA) or
				(DamageMeters_textState <= 0 and DamageMeters_textOptions[DamageMeters_Text_DELTA])) then
				local delta = value - playerValue;
				deltaString = string.format("%s%d", (delta >= 0 and "+" or ""), delta);
			end
		end
	
		if (buildValueString) then
			if (DamageMeters_quantity == DamageMeters_Quantity_TIME) then
				valueString = string.format("%d:%.2d", value / 60, math.mod(value, 60));
			elseif (DamageMeters_IsQuantityPS(DamageMeters_quantity)) then
				valueString = string.format("%.1f", value);
			else
				valueString = tostring(value);
			end
		end

		-- Concatenate strings.
		local strIx;
		local first = true;
		if (rankString) then
			barString = barString..rankString.." ";
		end
		if (nameString) then
			barString = barString..nameString.." ";
		end
		if (totalPercentString) then
			barString = barString..totalPercentString.." ";
		end
		if (leaderPercentString) then
			barString = barString..leaderPercentString.." ";
		end
		if (valueString) then
			barString = barString..valueString.." ";
		end
		if (deltaString) then
			barString = barString..deltaString;
		end
		if (string.sub(barString, -1) == " ") then
			barString = string.sub(barString, 1, -2);
		end
	end

	if (DamageMeters_flags[DMFLAG_constantVisualUpdate]) then
		-- Apply pulse.
		if (red == 1.00 and green == 1.00 and blue == 1.00) then
			red = 0.5 + 0.5 * (1.0 - pulseMag);
			green = red;
			blue = red;
		else
			red = pulseMag > red and pulseMag or red;
			green = pulseMag > green and pulseMag or green;
			blue = pulseMag > blue and pulseMag or blue;
		end
	end

	-------

	if (DamageMeters_flags[DMFLAG_constantVisualUpdate]) then
		if (barAge > 0) then
			local charsToShow = floor(barAge / DamageMeters_BARCHARTIME);
			local strLen = string.len(barString);
			if (strLen > charsToShow) then
				local charsToRemove = strLen - charsToShow;
				local leftToRemove, rightToRemove;
				if (DMVIEW_MIN == DamageMeters_viewMode) then
					leftToRemove = 0;
					rightToRemove = charsToRemove;
				else
					leftToRemove = floor(charsToRemove / 2);
					rightToRemove = charsToRemove - leftToRemove;
				end

				barString = string.sub(barString, leftToRemove, -rightToRemove);
			end
		end
	end

	if (DMVIEW_MIN == DamageMeters_viewMode) then
		local titleText = DamageMeters_GetPausedTitleText();
		if (titleText) then
			barString = titleText.." "..barString;
		end
	end

	DamageMeters_bars[barIndex]:Show();
	DamageMeters_bars[barIndex]:SetStatusBarColor(red, green, blue);
	DamageMeters_bars[barIndex]:SetValue(value);
	DamageMeters_text[barIndex]:SetText(barString);
	-- After 1300 patch text wouldn't appear without this.
	DamageMeters_text[barIndex]:Show();
end

-------------------------------------------------------------------------------

function DamageMeters_Clear(leave, silent)
	-- Clear contributor list full: on a partical clear it is impossible to
	-- tell who contributed what.
	DamageMeters_contributorList = {};
	DamageMeters_flags[DMFLAG_haveContributors] = false;

	DamageMetersPlugin_Clear();

	DamageMeters_DoClear(DMT_ACTIVE, leave, silent)
	DamageMeters_DoClear(DMT_FIGHT, 0, true)
end

function DamageMeters_DoClear(tableIndex, leave, silent)
	--DMPrintD("DamageMeters_DoClear("..tableIndex..")");

	DamageMeters_tablesDirty = true;

	-- In case we get a clear call between ticks.
	DamageMeters_queuedChainHealCount = 0;

	local last = table.getn(DamageMeters_tables[tableIndex]);
	if (last == 0) then
		-- This line just to ensure its really wiped out.
		DamageMeters_tables[tableIndex] = {};
		return;
	end

	local first = 1;
	if (leave ~= nil) then
		--DMPrint("leave = '"..leave.."'");
		local c = tonumber(leave);
		if (c) then
			first = leave + 1;
			if (first < 1) then
				first = 1;
			end
		end
	end

	if (not silent) then
		DMPrint(format(DM_MSG_CLEAR, first, last));
	end

	local i;
	for i = last,first,-1 do
		if (DamageMeters_flags[DMFLAG_constantVisualUpdate]) then
			if (tableIndex == DMT_VISIBLE) then
				if (DamageMeters_bars[i]) then
					DamageMeters_bars[i]:SetValue(0);
					DamageMeters_text[i]:SetText("");
				end
			end
		end

		table.remove(DamageMeters_tables[tableIndex]);
	end

	--if (not silent) then
	--	DMPrint(format(DM_MSG_REMAINING, table.getn(DamageMeters_tables[DMT_ACTIVE])));
	--end
end


function DamageMeters_Test(countArg)
	DamageMeters_Clear();

	local count = DamageMeters_barCount;
	if (countArg) then
		count = tonumber(countArg);
		if (not count) then
			count = DamageMeters_barCount
		end

		if (count > DamageMeters_barCount) then
			count = DamageMeters_barCount;
		end
	end

	DamageMeters_lastEvent = {};

	DMPrintD("Adding "..count.." test entries...");
	local index;
	local groupMembersOnlySave = DamageMeters_flags[DMFLAG_groupMembersOnly];
	DamageMeters_flags[DMFLAG_groupMembersOnly] = false;
	for index = 1,count do
		DamageMeters_AddValue("Test"..index, 1*index, DM_HIT, DamageMeters_Relation_FRIENDLY, DamageMeters_Quantity_DAMAGE, "[Test]");
		DamageMeters_AddValue("Test"..index, 2*index, DM_HIT, DamageMeters_Relation_FRIENDLY, DamageMeters_Quantity_HEALING, "[Test]");
		DamageMeters_AddValue("Test"..index, 3*(count - index), DM_HIT, DamageMeters_Relation_FRIENDLY, DamageMeters_Quantity_DAMAGED, "[Test]");
		DamageMeters_AddValue("Test"..index, 4*(count - index), DM_HIT, DamageMeters_Relation_FRIENDLY, DamageMeters_Quantity_HEALINGRECEIVED, "[Test]");
	end
	DamageMeters_flags[DMFLAG_groupMembersOnly] = groupMembersOnlySave;
end

function DamageMeters_Add(player)
	if (player) then
		DamageMeters_AddDamage(player, 0, DM_HIT, DamageMeters_Relation_FRIENDLY, "[Test]");
	end
end

function DamageMeters_SetSort(sortArg)
	local usage = true;
	if (sortArg) then
		local sort = tonumber(sortArg);
		if (sor

⌨️ 快捷键说明

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