Возникла проблема. В фреймах я прям нубасик. У меня не получается никак сделать локальные тултипы для игроков. Сам же фрейм, при наведении на которого и появляется описание, какой-то сломанный – он не скрывается. А если и каким-то образом и скрывается, то не меняется описание. Что не так?
BoxedText.fdf
// -- LOCAL TEMPLATES -------------------------------------------------------
Frame "BACKDROP" "BoxedTextBackgroundTemplate" {
		DecorateFileNames, //Look-Up Names in some String table (for example gameinterface)
        BackdropTileBackground, //Tile mode enabled
		BackdropBackground  "ToolTipBackground", //BackgroundFile
        BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
        BackdropCornerSize  0.008, //higher numbers make the corners bigger.
        BackdropBackgroundInsets 0.0022 0.0022 0.0022 0.0022, //makes the background smaller, from the outside.
        BackdropEdgeFile  "ToolTipBorder", //the border File
        BackdropBlendAll,
}
// -- Frames -------------------------------------------------------
Frame "BACKDROP" "BoxedText" INHERITS "BoxedTextBackgroundTemplate" {
	UseActiveContext,
	
	Frame "TEXT" "BoxedTextTitle_Player1" {
		UseActiveContext,
		DecorateFileNames,
		SetPoint TOPLEFT, "BoxedText", TOPLEFT, 0.005, -0.005, //Positionate "BoxedTextSimpleTitle"'s TOPLEFT to "BoxedText"'s TOPLEFT with an offset
		SetPoint TOPRIGHT, "BoxedText", TOPRIGHT, -0.005, -0.005,
		FontFlags "FIXEDSIZE",
		FrameFont "MasterFont", 0.014, "",
		FontColor 1.0 1.0 1.0 1.0, //Red Green Blue Alpha 0.0 to 1.0
		FontShadowColor 0.0 0.0 0.0 0.9,
		FontShadowOffset 0.001 -0.001,
	}
	
	Frame "TEXT" "BoxedTextValue_Player1" {
		UseActiveContext,
		DecorateFileNames,
		SetPoint TOPLEFT, "BoxedText", TOPLEFT, 0.005, -0.02,
		SetPoint BOTTOMRIGHT,  "BoxedText", BOTTOMRIGHT, -0.005, 0.005,
		FontFlags "FIXEDSIZE",
		FrameFont "MasterFont", 0.01, "",
		FontColor 1.0 1.0 1.0 1.0,
		FontShadowColor 0.0 0.0 0.0 0.9,
		FontShadowOffset 0.001 -0.001,
	}
}

Frame "BACKDROP" "BoxedText" INHERITS "BoxedTextBackgroundTemplate" {
	UseActiveContext,
	
	Frame "TEXT" "BoxedTextTitle_Player2" {
		UseActiveContext,
		DecorateFileNames,
		SetPoint TOPLEFT, "BoxedText", TOPLEFT, 0.005, -0.005, //Positionate "BoxedTextSimpleTitle"'s TOPLEFT to "BoxedText"'s TOPLEFT with an offset
		SetPoint TOPRIGHT, "BoxedText", TOPRIGHT, -0.005, -0.005,
		FontFlags "FIXEDSIZE",
		FrameFont "MasterFont", 0.014, "",
		FontColor 1.0 1.0 1.0 1.0, //Red Green Blue Alpha 0.0 to 1.0
		FontShadowColor 0.0 0.0 0.0 0.9,
		FontShadowOffset 0.001 -0.001,
	}
	
	Frame "TEXT" "BoxedTextValue_Player2" {
		UseActiveContext,
		DecorateFileNames,
		SetPoint TOPLEFT, "BoxedText", TOPLEFT, 0.005, -0.02,
		SetPoint BOTTOMRIGHT,  "BoxedText", BOTTOMRIGHT, -0.005, 0.005,
		FontFlags "FIXEDSIZE",
		FrameFont "MasterFont", 0.01, "",
		FontColor 1.0 1.0 1.0 1.0,
		FontShadowColor 0.0 0.0 0.0 0.9,
		FontShadowOffset 0.001 -0.001,
	}
}

Frame "BACKDROP" "BoxedText" INHERITS "BoxedTextBackgroundTemplate" {
	UseActiveContext,
	
	Frame "TEXT" "BoxedTextTitle_Player3" {
		UseActiveContext,
		DecorateFileNames,
		SetPoint TOPLEFT, "BoxedText", TOPLEFT, 0.005, -0.005, //Positionate "BoxedTextSimpleTitle"'s TOPLEFT to "BoxedText"'s TOPLEFT with an offset
		SetPoint TOPRIGHT, "BoxedText", TOPRIGHT, -0.005, -0.005,
		FontFlags "FIXEDSIZE",
		FrameFont "MasterFont", 0.014, "",
		FontColor 1.0 1.0 1.0 1.0, //Red Green Blue Alpha 0.0 to 1.0
		FontShadowColor 0.0 0.0 0.0 0.9,
		FontShadowOffset 0.001 -0.001,
	}
	
	Frame "TEXT" "BoxedTextValue_Player3" {
		UseActiveContext,
		DecorateFileNames,
		SetPoint TOPLEFT, "BoxedText", TOPLEFT, 0.005, -0.02,
		SetPoint BOTTOMRIGHT,  "BoxedText", BOTTOMRIGHT, -0.005, 0.005,
		FontFlags "FIXEDSIZE",
		FrameFont "MasterFont", 0.01, "",
		FontColor 1.0 1.0 1.0 1.0,
		FontShadowColor 0.0 0.0 0.0 0.9,
		FontShadowOffset 0.001 -0.001,
	}
}
function CustomStatsUI takes nothing returns nothing
    
    local framehandle StatIconPlayer1
    local framehandle StatFramePlayer1
    local framehandle StatTextPlayer1
    local framehandle StatIconPlayer2
    local framehandle StatFramePlayer2
    local framehandle StatTextPlayer2
    local framehandle StatIconPlayer3
    local framehandle StatFramePlayer3
    local framehandle StatTextPlayer3
    
    
    call BlzLoadTOCFile("war3mapimported\\BoxedText.toc")

    set StatIconPlayer1 = BlzCreateFrameByType("BACKDROP", "StatIconPlayer1", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
    set StatFramePlayer1 = BlzCreateFrameByType("FRAME", "StatFramePlayer1", StatIconPlayer1,"", 0)
    set StatTextPlayer1 = BlzCreateFrame("BoxedText", StatIconPlayer1, 0, 0)
    call BlzFrameSetAllPoints(StatFramePlayer1,StatIconPlayer1)
    call BlzFrameSetTooltip(StatFramePlayer1,StatTextPlayer1)
    call BlzFrameSetSize(StatIconPlayer1, 0.03, 0.03)
    call BlzFrameSetAbsPoint(StatIconPlayer1, FRAMEPOINT_CENTER, 0.480, 0.034)
    call BlzFrameSetAbsPoint(StatTextPlayer1, FRAMEPOINT_BOTTOMRIGHT, 0.798, 0.165)
    call BlzFrameSetSize(StatTextPlayer1, 0.295, 0.09)
    call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue_Player1",0), "1")
    call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle_Player1",0), "Дополнительные характеристики")
    call BlzFrameSetTexture(StatIconPlayer1,"ATTSpell_Nature_CrystalBall.blp",0, true)
    
    set StatIconPlayer2 = BlzCreateFrameByType("BACKDROP", "StatIconPlayer2", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
    set StatFramePlayer2 = BlzCreateFrameByType("FRAME", "StatFramePlayer2", StatIconPlayer2,"", 0)
    set StatTextPlayer2 = BlzCreateFrame("BoxedText", StatIconPlayer2, 0, 0)
    call BlzFrameSetAllPoints(StatFramePlayer2,StatIconPlayer2)
    call BlzFrameSetTooltip(StatFramePlayer2,StatTextPlayer2)
    call BlzFrameSetSize(StatIconPlayer2, 0.03, 0.03)
    call BlzFrameSetAbsPoint(StatIconPlayer2, FRAMEPOINT_CENTER, 0.480, 0.034)
    call BlzFrameSetAbsPoint(StatTextPlayer2, FRAMEPOINT_BOTTOMRIGHT, 0.798, 0.165)
    call BlzFrameSetSize(StatTextPlayer2, 0.295, 0.09)
    call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue_Player2",0), "2")
    call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle_Player2",0), "Дополнительные характеристики")
    call BlzFrameSetTexture(StatIconPlayer2,"ATTSpell_Nature_CrystalBall.blp",0, true)

    set StatIconPlayer3 = BlzCreateFrameByType("BACKDROP", "StatIconPlayer3", BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), "", 0)
    set StatFramePlayer3 = BlzCreateFrameByType("FRAME", "StatFramePlayer3", StatIconPlayer2,"", 0)
    set StatTextPlayer3 = BlzCreateFrame("BoxedText", StatIconPlayer3, 0, 0)
    call BlzFrameSetAllPoints(StatFramePlayer3,StatIconPlayer3)
    call BlzFrameSetTooltip(StatFramePlayer3,StatTextPlayer3)
    call BlzFrameSetSize(StatIconPlayer3, 0.03, 0.03)
    call BlzFrameSetAbsPoint(StatIconPlayer3, FRAMEPOINT_CENTER, 0.480, 0.034)
    call BlzFrameSetAbsPoint(StatTextPlayer3, FRAMEPOINT_BOTTOMRIGHT, 0.798, 0.165)
    call BlzFrameSetSize(StatTextPlayer3, 0.295, 0.09)
    call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue_Player3",0), "3")
    call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle_Player3",0), "Дополнительные характеристики")
    call BlzFrameSetTexture(StatIconPlayer3,"ATTSpell_Nature_CrystalBall.blp",0, true)

    
    set StatIconPlayer1 = null
    set StatFramePlayer1 = null
    set StatTextPlayer1 = null
    
    call TimerStart(CreateTimer(),0.05,true,function CustomStatsUIsystem_Actions)
endfunction
Код, который активируется при инициализации карты.
function SelectUnitPlayerNumber takes nothing returns boolean
    return IsUnitSelected(GetFilterUnit(),Player(udg_SelectUnitPlayerNumber)) and GetUnitState(GetFilterUnit(),UNIT_STATE_LIFE) > 0
endfunction

function ReplaceDotToComma takes string s returns string
    local integer i = 0
    local string exm = ""
    
    loop
        exitwhen i > StringLength(s)
        if SubString(s,i,i+1) == "." then
            set exm = exm + ","
        else
            set exm = exm + SubString(s,i,i+1) 
        endif
        set i = i + 1
    endloop
    
    return exm
endfunction

function GetTextTooltipFromUnit takes unit u returns string
    local integer h = GetHandleId(u)
    local integer criticaldamage_chance = LoadInteger(udg_Hash,'A00A',StringHash(I2S(h) + "_criticaldamage_chance"))
    local integer criticaldamage_power = LoadInteger(udg_Hash,'A00A',StringHash(I2S(h) + "_criticaldamage_power"))
    local integer spellpower = LoadInteger(udg_Hash,'A00A',StringHash(I2S(h) + "_spellpower"))
    local integer spelldef = LoadInteger(udg_Hash,'A00A',StringHash(I2S(h) + "_spelldef"))
    local real regeneration_health
    local real regeneration_mana
    local string s
    local string rgh
    local string rgm
    
    set criticaldamage_power = criticaldamage_power + 200
    set regeneration_health = BlzGetUnitRealField(u,UNIT_RF_HIT_POINTS_REGENERATION_RATE)
    set regeneration_mana = BlzGetUnitRealField(u,UNIT_RF_MANA_REGENERATION)
    set rgh = R2SW(regeneration_health,2,2)
    set rgm = R2SW(regeneration_mana,2,2)
    set rgh = ReplaceDotToComma(rgh)
    set rgm = ReplaceDotToComma(rgm)
    
    //другие элементы отслеживания, которые я ещё не добавил, но не суть.
    
    set s = "Шанс критического урона: |cffffcc00" + I2S(criticaldamage_chance) + "%|r|nКритический урон: |cffffcc00" + I2S(criticaldamage_power) + "%|r|nСила способностей: |cffffcc00" + I2S(spellpower) + "%|r|nСопротивление магии: |cffffcc00" + I2S(spelldef) + "%|r|nРегенерация здоровья: |cffffcc00" + rgh + "|r ед./сек.|nРегенерация маны: |cffffcc00" + rgm + "|r ед./сек."
    set u = null
    return s
endfunction

function CustomStatsUIsystem_Actions takes nothing returns nothing
    local group g
    local unit u 
    local boolexpr b
    local integer i
    local unit ex_u
    local string s
    
    //player 1
    
    set i = 0
    set udg_SelectUnitPlayerNumber = 0
    set b = Filter(function SelectUnitPlayerNumber)
    set g = CreateGroup()
    call GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,b)
    loop
        set u = FirstOfGroup(g)
        if u != null then
            set ex_u = u
            set i = i + 1
            call GroupRemoveUnit(g,u)
            set u = null
        else
            exitwhen u == null
        endif
    endloop
    call DestroyGroup(g)
    call DestroyBoolExpr(b)
    set g = null
    set b = null
    if i == 1 then
        call BlzFrameSetSize(BlzGetFrameByName("StatIconPlayer1",0),0.03, 0.03)
        set s = GetTextTooltipFromUnit(ex_u)
        call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue_Player1",0), s)
        call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle_Player1",0), "Дополнительные характеристики")
    else
        call BlzFrameSetSize(BlzGetFrameByName("StatIconPlayer1",0),0,0)
    endif
    
    set ex_u = null
    set u = null
    set s = null
    
    
    
endfunction
Сам код по обновлению описаний. Там видно, что я пытался уже даже уменьшить фрейм, чтобы он исчез, но он не уменьшился.
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
27
3 недели назад
Отредактирован MpW
1
Я немного не понял ваш вопрос.
Сначала я думал, что вам нужно скрыть дефолт тултип
Как скрыть / убрать дефолтный tooltip
Посмотрел, и понял в чем проблема. Вы кажется использовали пример 1 на backdrop
У StatIconPlayer1 (backdrop) не может быть подсказок, ни событии, это особый фрейм с изобрвжением. Чтобы у этого фрейма была какая реакция, сверху на этом фрейме создают пустышку StatFramePlayer1 (FRAME), тип frame можно накинуть tooltip, мы как раз и прикрепляем подсказку
BlzFrameSetTooltip(StatFramePlayer1,StatTextPlayer1)
Чтобы отключить показ подсказки, достаточно выключить StatFramePlayer1 (frame), а вы прячете иконку StatIconPlayer1 (см. код ниже), с этого ничего не будет. сам фрейм-виновник SetFramePlayer1 невидим, но еще существует, его то и надо выключить.
BlzFrameSetSize(BlzGetFrameByName("StatIconPlayer1",0),0,0)

Теперь надо понять почему у вас текст не меняетс

Возможно потому что дело в этом
call BlzFrameSetText(BlzGetFrameByName("BoxedTextValue_Player1",0), s)
call BlzFrameSetText(BlzGetFrameByName("BoxedTextTitle_Player1",0), "Дополнительные характеристики")
Ты сначало меняет описание на строку s, а потом повторно меняешь на "доп характеристики"
Чтобы оставить комментарий, пожалуйста, войдите на сайт.