Приветствуем вас на форуме проекта WoW Circle. Если вы читаете это, значит не зарегистрировались у нас. Для того, чтобы получить доступ к расширенным возможностям нашего форума нажмите сюда и пройди регистрацию, которая не займет у вас много времени. После регистрации будут доступны новые, более расширенные, возможности.
[Guide] oUF (Otravi Unit Frames)

Упомянутые в теме пользователи:

Показано с 1 по 12 из 77

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Старожил Аватар для Alt
    Регистрация
    05.01.2012
    Адрес
    43° 7' 131° 54'
    Сообщений
    156
    Поблагодарил(а)
    44
    Получено благодарностей: 170 (сообщений: 83).
    Репутация: 157
    Код:
    local SetColors = setmetatable({
    Та самая metatable, она будет использоваться не только для хп или мана бара, а так же для цветов текста маны, энергии, ярости.
    	power = setmetatable({
    		["MANA"] = {0.31, 0.45, 0.63},
                    Цвет маны, для кастеров :3
    		["RAGE"] = {0.69, 0.31, 0.31},
                    Для воинов и мобов.
    		["FOCUS"] = {0.71, 0.43, 0.27},
    		["ENERGY"] = {0.65, 0.63, 0.35},
                    Энергия разбойников и друидов.
    		["HAPPINESS"] = {0.19, 0.58, 0.58},
    		["RUNES"] = {0.55, 0.57, 0.61},
    		["RUNIC_POWER"] = {0, 0.82, 1},
                     РП для дк. Ну и так далее.
    	}, {__index = oUF.colors.power}),
    	reaction = setmetatable({
    		[1] = {0.85, 0.27, 0.27}, 	-- Hated (Цвет ненависти)
    		[2] = {0.85, 0.27, 0.27}, 	-- Hostile (Неприязнь)
    		[3] = {0.85, 0.27, 0.27}, 	-- Unfriendly(Недружелюбие)
    		[4] = {0.85, 0.77, 0.36}, 	-- Neutral(Нейтральное отношение)
    		[5] = {0.33, 0.59, 0.33}, 	-- Friendly(Дружеское)
    		[6] = {0.33, 0.59, 0.33}, 	-- Honored(Почти Уважение)
    		[7] = {0.33, 0.59, 0.33}, 	-- Revered(Уважение)
    		[8] = {0.33, 0.59, 0.33}, 	-- Exalted(Превознесение)
    Это для фракций, какой цвет будет у хп баров для мобов и НПС.	
    	}, {__index = oUF.colors.reaction}),
    }, {__index = oUF.colors})
    Код:
    local ShortValue = function(value)
    	Это нужно для точных вычислений значений, 
            к слову, с помощью этого формата числа уменьшаются в 10млн. раз с точностью до 1(!) знака.
    	if value >= 10000000 then
    		return string.format('%.1fm', value / 1000000)
    	elseif value >= 1000000 then
    		return string.format('%.2fm', value / 1000000)
    	elseif value >= 100000 then
    		return string.format('%.0fk', value / 1000)
    	elseif value >= 10000 then
    		return string.format('%.1fk', value / 1000)
    	else
    		return value
    	end
    end
    
    local PostUpdateHealthBar = function(health, unit, min, max)
    	if not UnitIsConnected(unit) or UnitIsGhost(unit) or UnitIsDead(unit) then
    		if not UnitIsConnected(unit) then
    			health.value:SetText("|cffD7BEA5".."Offline".."|r")
    			Тут цвет когда юнит оффлайн.
    		elseif UnitIsDead(unit) then
    			health.value:SetText("|cffD7BEA5".."Dead".."|r")
    			Серенький цвет для тех, кто не очень жив.
    		elseif UnitIsGhost(unit) then
    			health.value:SetText("|cffD7BEA5".."Ghost".."|r")
    			По-серее цвет для тех кто бежит с кладбища.
    		end
    	else
    	
    		local r, g, b
    		
    		if min ~= max then
    			r, g, b = oUF.ColorGradient(min/max, 0.69, 0.31, 0.31, 0.65, 0.63, 0.35, 0.33, 0.59, 0.33)
    			Цветовой градиент для значений на 100% хп будет зеленый, на половине желтый, >30% будет красный.
    			if unit == "player" and health:GetAttribute("normalUnit") ~= "pet" then
    				health.value:SetFormattedText("|cffAF5050%d|r |cffD7BEA5-|r |cff%02x%02x%02x%s%%|r", min, r * 255, g * 255, b * 255, math.floor(min /max*100+.5))
    				SetFormattedText очень сильная и эффективная штука, намного экономней чем ***:SetText(text), но есть минус, это временный файл, то есть нельзя использовать как FontString.
    				Описание есть в интернете. Здесь я поставил разделитель текста символ "-", тут же и сокращаются цифры.
    			elseif unit == "pet" then
    				health.value:SetFormattedText("|cff%02x%02x%02x%s|r", r * 255, g * 255, b * 255, ShortValue(min))
    			else
    				health.value:SetFormattedText("|cffAF5050%s|r |cffD7BEA5-|r |cff%02x%02x%02x%s%%|r", ShortValue(min), r * 255, g * 255, b * 255, math.floor(min /max*100+.5))
    			end
    		else
    			if unit ~= "player" and unit ~= "pet" then
    				health.value:SetText("|cff559655"..ShortValue(max).."|r")
    			else
    				health.value:SetText("|cff559655"..max.."|r")
    			end
    		end
    	end
    end
    
    PreUpdatePower = function(power, unit)
    	local _, pType = UnitPowerType(unit)
    	local color = SetColors.power[pType]
    	Тут прописываем что бы цвет текста мп был по типу маны, или энергии, опять же зависит от класса.
    	if color then
    		power:SetStatusBarColor(color[1], color[2], color[3])
    	end
    end
    
    PostUpdatePower = function(power, unit, min, max)
            Тут аналогично с PostUpdateHealthBar,
             смотрим там же. 
             Но все же есть некоторые косметические правки, 
             не показывать ману у мертвых, не показывать ману для духов и прочее.
    	local self = power:GetParent()
    	local pType, pToken = UnitPowerType(unit)
    	local color = SetColors.power[pToken]
    
    	if color then
    		power.value:SetTextColor(color[1], color[2], color[3])
    	end
    
    	if not UnitIsPlayer(unit) and not UnitPlayerControlled(unit) or not UnitIsConnected(unit) then
    		power.value:SetText()
    	elseif UnitIsDead(unit) or UnitIsGhost(unit) then
    		power.value:SetText()
    	else
    		if min ~= max then
    			if pType == 0 then
    				if unit == "target" then
    					power.value:SetText(ShortValue(min))
    				elseif unit == "player" and power:GetAttribute("normalUnit") == "pet" or unit == "pet" or unit == 'arena' then
    					power.value:SetFormattedText("%%s%%", math.floor(min /max*100+.5))
    				elseif unit == "player" then
    					power.value:SetFormattedText("%s%% |cffD7BEA5-|r %d", math.floor(min /max*100+.5), min)
    				else
    					power.value:SetText(min)
    				end
    			else
    				power.value:SetText(min)
    			end
    		else
    			if unit == "player" or unit == 'arena' then
    				power.value:SetText(min)
    			else
    				power.value:SetText(ShortValue(min))
    			end
    	end	end
    end
    Что такое metatable читаем тут.

  2. 5 пользователей сказали cпасибо Alt за это полезное сообщение:

    •Pervyi•™ (15.03.2016),Error (05.01.2012),haikulolz (12.01.2012),Leecat (20.01.2013),ДядькаЗмей (07.09.2012)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •