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

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

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

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #5
    Старожил Аватар для Alt
    Регистрация
    05.01.2012
    Адрес
    43° 7' 131° 54'
    Сообщений
    156
    Поблагодарил(а)
    44
    Получено благодарностей: 170 (сообщений: 83).
    Репутация: 157
    Код:
    local CreateStyle = function(self, unit)		
    	Главная функция, основная, запоминаем её название.(CreateStyle)
    	self:RegisterForClicks('AnyUp')							
    	self:SetScript('OnEnter', UnitFrame_OnEnter)
    	self:SetScript('OnLeave', UnitFrame_OnLeave)
    	Делаем фреймы кликабельными.
    	self.colors = SetColors	
    	Прописываем цвета фреймов которые берутся из metatable.
    	self:SetAttribute('type2', 'menu')
    	self.menu = menu					
    	Помните я писал про функцию меню?
            Не забываем прописать.
    	
    	self.Health = CreateFrame('StatusBar', nil, self)
    	Создаем полоску с хп, статусбар.
    	self.Health:SetStatusBarTexture(texture)
    	self.Health:SetHeight(25)														
    	На высоту полоски хп выделим 25 пикселей.
    	self.Health:SetPoint('TOPLEFT')								
    	self.Health:SetPoint('TOPRIGHT')
    	self.Health.PostUpdate = PostUpdateHealthBar									
    	Указываем к чему относятся наши переменные, а то не видать нам текста хп.
    
    	self.Health.frequentUpdates = true
    	Обновление хп по функции OnUpdate, это значит при каждой новой отрисовке фрейма,
            т.е. (ваше фпс) то есть изменению вашего фрейма раз в секунду. 
            Он будет обновляться, не указав это он попросту "забудет" об этом.
            То же самое будет и с маной (задастся в соотв. месте)
    	self.Health.colorTapping = true
    	self.Health.colorClass = true													
    	О чем я и писал где-то, цвет хп бара по цвету класса.
    	self.Health.colorReaction = true												
    	Это для НПС и мобов, делаем цвета по отношению к вам(дружелюбны ли, враждебны и т.д.)
    	
    	self.Health.bg = self.Health:CreateTexture(nil, 'BORDER')						
    	Фон полоски хп.
    	self.Health.bg:SetAllPoints()
    	self.Health.bg:SetTexture(texture)
    	self.Health.bg.multiplier = 0.25												
    	Делаем фон полоски хп по-темнее чем цвет самой полоски.
    	self.Health.background = CreateBackdrop(self.Health)							
    	Прописываем подложку (бэкдроп.)
    	
    	self.Health.value = CreateFontString(self.Health)								
    	(!) важно. Прописываем текст хп, где он будут отображаться,
            как видно тут используется конструкция 
            которую можно посмотреть в блоке моего гайда под названием 'Coding'.
    	if unit == 'player' or unit == 'target'  then
    		self.Health.value:SetPoint('RIGHT', 0, 4)
    	elseif  unit == 'pet' or unit == 'focus' or unit == 'targettarget' then
    		self.Health.value:SetPoint('LEFT', 0, 1)
    	end
    	
    	self.Power = CreateFrame('StatusBar', nil, self)								
    	Создаем полоску маны, статусбар.
    	self.Power:SetStatusBarTexture(texture)
    	self.Power:SetHeight(4)															
    	Делаем её высоту 4 пикселя.
    	self.Power:SetFrameLevel(10)													
    	Устанавливаем её поверх полоски с хп.
    	self.Power:SetPoint('TOPRIGHT', self.Health, 'BOTTOMRIGHT', 0, 0)				
    	Положение полоски.
            Цепляем за нижний правый и нижний левый края полоски со здоровьем.
    	self.Power:SetPoint('TOPLEFT', self.Health, 'BOTTOMLEFT', 0, 0)
    	self.Power.PreUpdate = PreUpdatePower											
    	self.Power.PostUpdate = PostUpdatePower
    	Не забываем указывать к чему относятся наши переменные.
    	
    	self.Power.bg = self.Power:CreateTexture(nil, 'BORDER')							
    	self.Power.bg:SetAllPoints()
    	self.Power.bg:SetTexture(texture)
    	self.Power.bg.multiplier = 0.3
    	self.Power.background = CreateBackdrop(self.Power)	
    	
    	self.Power.frequentUpdates = true
    	Аналогично с хп баром (смотрим туда).
    	self.Power.colorDisconnected = true
    	self.Power.colorTapping = true
    	self.Power.colorPower = true													
    	Делаем цвет полоски маны по цвету маны, энергии, ярости, рун, в зависимости от вашего класса.
    	
    	self.Power.value = CreateFontString(self.Power)
    	if unit == 'player' or unit == 'target' then
    		self.Power.value:SetPoint('RIGHT', 0, 3)
    	end
    	(!) важно. Прописываем текст маны, где он будут отображаться, как видно тут используется конструкция которую можно посмотреть в блоке моего гайда под названием 'Coding'.
    	
    	self.Info = CreateFontString(self.Health)										
    	Прописываем тэги, difficulty и level означают, что на полоске с хп будет отоборажаться уровень цели. Тут же можно задать и сокращение имени.
    	if unit == 'target' then
    		self.Info:SetPoint('LEFT', 0, 4)
    		self:Tag(self.Info, '[difficulty][level][shortclassification] [raidcolor][name]')	
    	 raidcolor, name - Соответственно цвет вашего никнейма по классу.
    	elseif (not unit == 'player') or unit == 'pet' or unit == 'focus' or unit == 'targettarget' then 
    		self.Info:SetPoint('RIGHT', 0, 1)
    		self:Tag(self.Info, '[raidcolor][name]')
    	end
    	
    	if unit == 'player' or unit == 'target' then												
    	Размеры всех фреймов, 205 это ширина player и target фреймов.
    		self:SetAttribute('initial-height', 25)
    		self:SetAttribute('initial-width', 205)
    	elseif unit == 'pet' or unit == 'focus' or unit == 'targettarget' then
    		self:SetAttribute('initial-height', 15)
    		self:SetAttribute('initial-width', 130)													
    		 Аналогично только с фреймами пэта, ТоТ и фокуса.
    		self.Health:SetHeight(15)																
    		Отводим 15 пикселей под высоту их хп бара.
    		self.Power:SetHeight(2)																	
    		Точно так же, но с мана баром.
    	end
    	
    	if unit == 'player' then																	
    	Блок аур, тут уже жестко прописываем их положение, размер и их обновление.
    		self.Buffs = CreateFrame("Frame", nil, self)
    		self.Buffs:SetPoint('TOPRIGHT', UIParent, 'TOPRIGHT', -150, -9)
    		self.Buffs.initialAnchor = 'TOPRIGHT'
                    Привязка фрейма баффов идёт к верхнему правому углу.
    		self.Buffs["growth-y"] = 'DOWN'
                    Расти будем вниз
    		self.Buffs["growth-x"] = 'LEFT'
                    И влево...
    		self.Buffs:SetHeight(55)
                    Максимальная высота бара с баффами.
     		self.Buffs:SetWidth(450)
                    Максимальная ширина бара с баффами.
    		self.Buffs.spacing = 3																	
    		Расстояние между аурами.
    		self.Buffs.size = 26																	
    		Размер аур.
    		self.Buffs.num = 32																		
    		Количество аур (баффы).
    		self.Buffs.disableCooldown = true														
    		Отключаем спиральку на эффектах об их окончании.
    		self.Buffs.PostCreateIcon = PostCreateAuraIcon
    		self.Buffs.PostUpdateIcon = PostUpdateBuff
    		Указываем переменные.
    
    		self.Debuffs = CreateFrame("Frame", nil, self)
    		self.Debuffs:SetPoint('TOPRIGHT', UIParent, 'TOPRIGHT', -150, -116)
    		self.Debuffs.initialAnchor = 'TOPRIGHT'
    		self.Debuffs["growth-x"] = 'LEFT'
    		self.Debuffs["growth-y"] = 'DOWN'
    		self.Debuffs:SetHeight(55)
    		self.Debuffs:SetWidth(450)
    		self.Debuffs.spacing = 3
    		self.Debuffs.size = 26
    		self.Debuffs.num = 32
    		self.Debuffs.disableCooldown = true
    		self.Debuffs.PostCreateIcon = PostCreateAuraIcon
    		self.Debuffs.PostUpdateIcon = PostUpdateDebuff
    	end
    	
    	if unit == 'target' then
    		self.Auras = CreateFrame("Frame", nil, self)
    		self.Auras:SetPoint('BOTTOMLEFT', self, 'TOPLEFT', 0, 3)
    		self.Auras.initialAnchor = 'BOTTOMLEFT'
    		self.Auras["growth-x"] = 'RIGHT'
    		self.Auras["growth-y"] = 'UP'
    		self.Auras.numDebuffs = 16
    		self.Auras.numBuffs = 32
    		self.Auras:SetHeight(165)
    		self.Auras:SetWidth(221)
    		self.Auras.spacing = 3
    		self.Auras.size = 23
    		self.Auras.gap = true
    		self.Auras.disableCooldown = true
    		self.Auras.PostCreateIcon = PostCreateAuraIcon
    		self.Auras.PostUpdateIcon = PostUpdateBuff
    	end
    	
    	self.Castbar = CreateFrame("StatusBar", nil, self)												
    	Создаем простенький кастбар.  
    	self.Castbar:SetStatusBarTexture(texture)
    	self.Castbar:SetStatusBarColor(0.31, 0.45, 0.63)												
    	Цвет кастбара когда мы кастуем.
    	self.Castbar.bg = CreateBackdrop(self.Castbar)													
    	Прописываем подложку (бэкдроп.)
    	
    	self.Castbar.Text = CreateFontString(self.Castbar)
    	self.Castbar.Text:SetPoint('LEFT', 0, 1)														
    	Положение на кастбаре текста заклинания.
    	
    	self.Castbar.Time = CreateFontString(self.Castbar)
    	self.Castbar.Time:SetPoint('RIGHT', 0, 1)														
    	Положение на кастбаре времени сколько произносится заклинание.
    
    	self.Castbar.Button = CreateFrame('Frame', nil, self.Castbar)
            Добавляем иконку заклинания.
    	self.Castbar.Button:SetHeight(18)
    	self.Castbar.Button:SetWidth(18)
    	if unit == 'player' then
    		self.Castbar.Button:SetPoint('BOTTOMRIGHT', self.Castbar, 'BOTTOMLEFT', -3, 0)
    	elseif unit == 'target' then
    		self.Castbar.Button:SetPoint('BOTTOMLEFT', self.Castbar, 'BOTTOMRIGHT', 3, 0)
    	end
    	self.Castbar.Button.bg = CreateBackdrop(self.Castbar.Button)
    
    	self.Castbar.Icon = self.Castbar.Button:CreateTexture(nil, 'ARTWORK')
    	self.Castbar.Icon:SetAllPoints(self.Castbar.Button)
    	self.Castbar.Icon:SetTexCoord(0.08, 0.92, 0.08, 0.92)
    	
    	if unit == 'player' or unit == 'target' then													
    	Условия для player и target фреймов, размер кастбара и его положение.
    		self.Castbar:SetWidth(205)
    		self.Castbar:SetHeight(15)
    		self.Castbar:SetPoint('BOTTOM', self.Health, 0, -22)
    	end
    Специально не пользовался библиотекой UTF-8 для вывода тэгов на наши хп и мп бары, выигрываем с этого неплохую долю памяти, приятно всё-таки.

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

    Error (05.01.2012),haikulolz (12.01.2012),Leecat (20.01.2013),Parkan_vdv (28.04.2012),ДядькаЗмей (07.09.2012)

Ваши права

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