Для создания пользовательских дополнений, в которых отображаются иконки заклинаний и предметов, лучше всего использовать универсальный виджет - 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