Для создания пользовательских дополнений, в которых отображаются иконки заклинаний и предметов, лучше всего использовать универсальный виджет - UniSlot.
UniSlot - это упрощенный вариант универсального слота, который разработчики используют в интерфейсе игры и его внешний вид максимально приближен (за некоторыми исключениями, вызванными техническими ограничениями пользовательских дополнений) к слоту, используемому разработчиками игры.
Ресурсы слота находятся в папке ResourceSystem в архиве UniSlot.zip
Имеет три дочерних виджета:
SlotCount
SlotLocked
SlotIcon
Содержит иконку предмета или заклинания
function SetIcon( texture ) wtIcon:SetBackgroundTexture( texture ) end
При включении иконка становится красной, сигнализирует о недоступности для использования.
Его нужно либо показывать, либо скрывать при необходимости.
Подключите к пользовательскому дополнению следующую текстовую группу ../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
Слой представляет из себя рамку, но при этом рамка "распилена" по диагонали для отображения проклятых предметов.
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
Это кнопка.
slot_over - наведение
slot_pressed - клик левой
slot_pressed_rmb - клик правой / двойной
Слой служит единому делу - привлечение внимания к слоту
function Toggle( state ) wtBlink:Show( state ) end
Слот который может служить разным целям, например включенная аура.
function Init() wtAutocast:SetBackgroundColor( { a = 1, r = 1, g = 0.8, b = 0 } ) wtAutocast:Show( false ) end function Toggle( state ) wtAutocast:Show( state ) end