UniSlot - универсальный слот

На главную


Общее описание

Для создания пользовательских дополнений, в которых отображаются иконки заклинаний и предметов, лучше всего использовать универсальный виджет - UniSlot.
UniSlot - это упрощенный вариант универсального слота, который разработчики используют в интерфейсе игры и его внешний вид максимально приближен (за некоторыми исключениями, вызванными техническими ограничениями пользовательских дополнений) к слоту, используемому разработчиками игры.

Ресурсы слота находятся в папке ResourceSystem в архиве UniSlot.zip

SlotFrame

Имеет три дочерних виджета:

SlotIcon

Содержит иконку предмета или заклинания

function SetIcon( texture )
    wtIcon:SetBackgroundTexture( texture )
end

SlotLocked

При включении иконка становится красной, сигнализирует о недоступности для использования.
Его нужно либо показывать, либо скрывать при необходимости.

SlotCount

Подключите к пользовательскому дополнению следующую текстовую группу ../UniSlot/SlotTextLabel/SlotCountFormat.(UIRelatedTexts).xdb
Отображает количество штук в стаке и/или количество зарядов в предмете.

function Set( stack, charges )
	local countFormat = stack and charges and "SlotCountFormatExtended" or "SlotCountFormatNormal"
	local countStack = stack and common.FormatInt( stack, "%dK5" ) or common.GetEmptyWString()
	local countCharges = charges and common.FormatInt( charges, "%dK5" ) or common.GetEmptyWString()
	
        local textValues = {
		format = common.GetAddonRelatedGroupText( "UniSlotCountFormat", countFormat ),
		countStack = countStack,
		countCharges = countCharges
	}
	common.SetTextValues( wtCount, textValues )
	
	wtCount:Show( stack ~= nil or charges ~= nil )
end

SlotQuality

Слой представляет из себя рамку, но при этом рамка "распилена" по диагонали для отображения проклятых предметов.

do
	local sysItemQualityClass = {
		[ ITEM_QUALITY_JUNK ] = "Junk",
		[ ITEM_QUALITY_GOODS ] = "Goods",
		[ ITEM_QUALITY_COMMON ] = "Common",
		[ ITEM_QUALITY_UNCOMMON ] = "Uncommon",
		[ ITEM_QUALITY_RARE ] = "Rare",
		[ ITEM_QUALITY_EPIC ] = "Epic",
		[ ITEM_QUALITY_LEGENDARY ] = "Legendary",
		[ ITEM_QUALITY_RELIC ] = "Relic"
	}
	local CSSClassColor = {
		[ "Junk" ] = { a = 1, r = 0.6, g = 0.6, b = 0.6 },
		[ "Goods" ] = { a = 1, r = 0.863, g = 0.863, b = 0.863 },
		[ "Common" ] = { a = 1, r = 0, g = 0.898, b = 0.149 },
		[ "Uncommon" ] = { a = 1, r = 0.125, g = 0.502, b = 1 },
		[ "Rare" ] = { a = 1, r = 0.753, g = 0.251, b = 1 },
		[ "Epic" ] = { a = 1, r = 1, g = 0.502, b = 0 },
		[ "Legendary" ] = { a = 1, r = 0, g = 1, b = 0.588 },
		[ "Relic" ] = { a = 1, r = 0.878, g = 1, b = 0.251 },
	}
	CSSClassColor[ "JunkCursed" ] = CSSClassColor[ "Junk" ]
	CSSClassColor[ "GoodsCursed" ] = CSSClassColor[ "Goods" ]
	CSSClassColor[ "CommonCursed" ] = CSSClassColor[ "Common" ]
	CSSClassColor[ "UncommonCursed" ] = CSSClassColor[ "Uncommon" ]
	CSSClassColor[ "RareCursed" ] = CSSClassColor[ "Rare" ]
	CSSClassColor[ "EpicCursed" ] = CSSClassColor[ "Epic" ]
	CSSClassColor[ "LegendaryCursed" ] = CSSClassColor[ "Legendary" ]
	CSSClassColor[ "RelicCursed" ] = CSSClassColor[ "Relic" ]
	------------------------------------------------------------------------------
	function GetItemQualityCSSClass( itemId )
		local quality, isCursed
		
		if type( itemId ) == "number" then
			local itemQuality = itemLib.GetQuality( itemId )
			quality = itemQuality and itemQuality.quality
			isCursed = itemLib.IsCursed( itemId )
		end
		
		local class = quality and sysItemQualityClass[ quality ]
		
		if class and isCursed then
			class = string.format( "%sCursed", class )
		end
		return class
	end
	------------------------------------------------------------------------------
	function GetItemQualityCSSColor( itemId )
		local class = GetItemQualityCSSClass( itemId )
		return class and CSSClassColor[ class ]
	end
	------------------------------------------------------------------------------
	function GetColorByQuality( quality )
		return CSSClassColor[ sysItemQualityClass[ quality ] ]
	end
end

local TRANSPARENT_BLACK = { a = 0, r = 0, g = 0, b = 0 }
local CURSED = { a = 1, r = 150/255, g = 0, b = 0 }

function Set( quality, isCursed )
	local color = quality and GetItemQualityCSSColor{ quality = quality, isCursed = isCursed } or TRANSPARENT_BLACK
	color.a = color.a * 0.5
	
	wtQuality:SetForegroundColor( color )
	wtQuality:SetBackgroundColor( isCursed and CURSED or color )
end

SlotButton

Это кнопка.

SlotBlink

Слой служит единому делу - привлечение внимания к слоту

function Toggle( state )
	wtBlink:Show( state )
end

SlotAutocast

Слот который может служить разным целям, например включенная аура.

function Init()
	wtAutocast:SetBackgroundColor( { a = 1, r = 1, g = 0.8, b = 0 } )
	wtAutocast:Show( false )
end

function Toggle( state )
	wtAutocast:Show( state )
end

На главную