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

На главную

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

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

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

## SlotFrame

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

-     SlotCount

-     SlotLocked

-     SlotIcon

### 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

Это кнопка.

-     slot_over - наведение

-     slot_pressed - клик левой

-     slot_pressed_rmb - клик правой / двойной

## 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

На главную