Tasyen
Reaction score
1,153

Profile posts Latest activity Postings Experience Media Albums Resources About

  • The Big UI-Frame Tutorial
    In V1.31.1 the mouseclicking onto the Minimap then becomes broken as the game interprets the click relative to the default Minimap position.
    somehow the following code work without mouse click issue
    warcraft 3 V1.31.1.12164
    move the minimap UI
    JASS:
    scope minimap initializer init
    private function init takes nothing returns nothing
        local framehandle frame = BlzGetOriginFrame(ORIGIN_FRAME_MINIMAP, 0)
        call BlzFrameClearAllPoints(frame)
        call BlzFrameSetAbsPoint(frame, FRAMEPOINT_BOTTOMLEFT, 0.4, 0.3)
        call BlzFrameSetAbsPoint(frame, FRAMEPOINT_TOPRIGHT, 0.6, 0.5)
    endfunction
    endscope
    (waiting approval so i can post another 1k+ words in comments)
    • Like
    Reactions: Tasyen
    Tasyen
    Tasyen
    You are right. This code moves, resizes the minimap and even the clicking event is working correctly. I think it is because your code runs earlier (map init) while i tested most UI code after 0s game time passed. Cause when moved after 0s passed the buggy behaviours is encountered.

    Edit: Changed the text to:

    When one moves the minimap in V1.31.1 after 0s game timepassed the mouseclicking onto the Minimap becomes broken. It interprets the click relative to the default Minimap position. (Move it at Map init or earlier, then the minimap can even be resized)

    Thank you
    sotzaii_shuen
    sotzaii_shuen
    this works too
    move the minimap UI(bypass 4:3)
    JASS:
    scope minimap initializer init
    private function delayed_init takes nothing returns nothing
        local framehandle frame
        local framehandle bypass
        call CreateLeaderboardBJ(bj_FORCE_ALL_PLAYERS, "title")
        set frame = BlzGetFrameByName("Leaderboard", 0)
        call BlzFrameSetSize(frame, 0, 0)
        call BlzFrameSetVisible(BlzGetFrameByName("LeaderboardBackdrop", 0), false)
        call BlzFrameSetVisible(BlzGetFrameByName("LeaderboardTitle", 0), false)
        set bypass = frame
        set frame = BlzGetOriginFrame(ORIGIN_FRAME_MINIMAP, 0)
        call BlzFrameSetParent(frame, bypass)
        call BlzFrameClearAllPoints(frame)
        call BlzFrameSetAbsPoint(frame, FRAMEPOINT_BOTTOMLEFT, -0.1, 0.3)
        call BlzFrameSetAbsPoint(frame, FRAMEPOINT_TOPRIGHT, 0.1, 0.5)
        call DestroyTimer(GetExpiredTimer())
        set bypass = null
        set frame = null
    endfunction
    private function init takes nothing returns nothing
        call BlzFrameClearAllPoints(BlzGetOriginFrame(ORIGIN_FRAME_MINIMAP, 0))
        call TimerStart(CreateTimer(), 0, false, function delayed_init)
    endfunction
    endscope
    • Like
    Reactions: Tasyen
    Tasyen
    Tasyen
    Nice, so one has to clear the points at map init/ initializer, then the first position will be used.

    A second move seems to not work again.
    I tried to clear the points at map init. Moved it at 0s and another time at 2s. At 2s the minimap treated the 0s position as its center for mouse click position. I also tried clear at map init and move at 2s which worked without problems. Also with map init clear and move at 5s it behaved as wanted.

    "In V1.31.1 one should BlzFrameClearAllPoints(BlzGetOriginFrame(ORIGIN_FRAME_MINIMAP, 0)) at map init. Then the first postions placed is treated correctly as map center. This position placing can happen at a Later time. A second position placing afterwards will bug the minimap (The mouse click will be treated as relative to the first position which is mostlikely the edge of the minimap)."
    Hello Tasyen, sorry to bother you again, hmm. How to resize the cooldown border?. I had a problem when I tried to resize the button command.


    dddddddd.png
    Tasyen
    Tasyen
    The frame access for cooldown is bad. It is a child of the command buttons but only after the game showed a cooldown.

    I suggest to rescale the cooldown model in a model tool.
    dhguardianes
    dhguardianes
    thank for feedback me xD maybe i will use a small cooldown model
    Hi Taysen

    I've been searching for guides in modding stat files in W3 Reforged and I saw your reply on one of the post about modding in this forum, here's the thread:

    Noob questions about modding

    The part on the Object editor works (units, abilities items etc) on the custom triggers however, I'm a bit confused..

    For how I understand it, I copied this script and pasted it somewhere on Blizzard.j then placed it in the retail\scripts...

    JASS:
    //
    //*  Blizzard.j Initialization
    
    function EndlessGold takes nothing returns boolean
        local unit f
        local group g = CreateGroup()
        local integer id
        call GroupEnumUnitsInRange(g, 0,0, 300000, null)
        loop
            set f = FirstOfGroup(g)
            exitwhen f == null
            set id = GetUnitTypeId(f)
            if id == 'ugol' or id == 'egol' or id == 'ngol' then
                call SetResourceAmount( f, 1000000 )
            endif
            call GroupRemoveUnit(g,f)
        endloop
        call DestroyGroup(g)
        set g = null
        set f = null
        return false
    endfunction


    bit it didn't worked..

    Am I doing it right?

    Thank you in advance
    hello tasyen, i want to move Unit name to this location. I can't find the frame to move them. pls help :(
    GoOEeHj.png
    Tasyen
    Tasyen
    BlzGetFrameByName("SimpleNameValue", 0) in single Unit selection (most likely what you want)

    ("SimpleHoldNameValue", 2) in transporter
    ("SimpleBuildingNameValue", 1) in trainer
    ("SimpleItemNameValue", 3) item on ground
    ("SimpleDestructableNameValue", 4) selectable gate/tree/
    dhguardianes
    dhguardianes
    thank you support me ^^
    Hi Tasyen,

    Excuse me for bothering You!
    I'm working on a project and I would like to hide the UI from the main menu and campaign screens so only the background animations stay, but unfortunately, I'm a newbie at modding, and don't know how to achieve this. This is what I'm looking for.

    I've looked through Your tutorials and I see that Your knowledge is incredible.
    And that is why I'm asking You: Is this possible to do? And if so, how can I hide the UI from the menus?

    Thank You in advance!
    Tasyen
    Tasyen
    Hi.

    I might be the wrong person when you want to mod the WebUI Menu from V1.32+. But here what I have to say to this subject:

    The menu in V1.32+ is in javascript and html. Unlike the ingame/match UI which is in fdf. You can find this javascript file when you open the game using CascView. Inside Cascview while browsing the game data there is a Folder, webui. It contains stuff for the V1.32+ Menu webui\gluemanager.js is the mentioned javascript file, webui\index.html might also be a file to consider, The backgrounds are in webui\webms\.
    One can then have a custom menu (webui\gluemanager.js) by a Local files .

    Should also be the way w3champions does their custom menu.

    Good Luck
    Blaston
    Blaston
    Thank You for the advice!

    Using the CascView and exporting the .webm content technically solved my issue. Now I have all the background animations!
    Does this method also work with pre-reforged Warcraft III? If I would like to have those old background animations as well, is CascView the way to go?
    Tasyen
    Tasyen
    Warcraft 3 uses casc for its game data since Version V1.30. Before that version the data was stored in mpqs they can be read by some other tool.

    But only V1.32+ has this webm backgrounds. The old backgrounds are warcraft 3 models.

    You should not open the game data by that tools and play warcraft/world editor at the same time.
    Hi Tasyen,
    I really liked what you did with the Frame, I used your Resources Bar in my map, it worked well and made a novelty. You can follow and play it as "Heroic Origins: Galaxy - TD v11.1".

    The bad thing is that I'm a GUI writer, I'm confused and don't know how to use your resources to my liking.

    I have a request for you to help me create a map similar to your "HeroScoreFrame", which will show that player's towers instead (showing the equipment that tower is carrying).

    It would be nice if the map I got this resource you can ignore this message.
    Thank you, View!
    Tasyen
    Tasyen
    Might be not needed but anyway:
    One can change the target of a slot of HeroScoreFrame or make HeroScoreFrame have multiple slots per player each with different units. On default 24 slots are created. Which is
    AutoCreateCount = GetBJMaxPlayers()

    HeroScoreFrameSetTargetUnit(integer createContext, unit u) is the function to set the target of a slot, after the autosetup has run.
    For createContext use 0 to 23 (default setup) 0 is the first 23 the last.
    I am not sure, if one can set the target async, Hopefuly you don't need to.

    Good luck
    trinhtieuvu91
    trinhtieuvu91
    Thanks for your answer. I want when player 1 hold Tab will show all information of unit belonging to that player. I don't know how to edit.
    Tasyen
    Tasyen
    k, you want that only the own units are shown. That is async for that you need the new HeroScoreFrame version at least 1.5c. Because before that version I did not expect that one would use it with async targets hence some Frame got no handleId reserved which produces dc in async usage.

    To display only own units turn 2 options to false
    AutoSearchTarget
    FillByTeam

    Now when an unit enters the game, which should be displayed call
    HeroScoreFrameSetTargetPlayer(createContext, player)
    HeroScoreFrameSetTargetUnit(createContext, unit)
    in GetLocalPlayer() block

    Beaware that when you set the targets async that your code in the events also is based on async data means no create/destroy based on current unit/player.

    Also be aware that you need to clear the targets unit/player for HeroScoreFrame before the units are removed from the game (Async usage).
    Hello Tasyen,

    I asked about creating a custom named expiration timer in the 'World Editor Help Zone' and was told that it is impossible through "standard" means.
    How to name an expiration timer?

    Is it possible to create a custom UI expiration timer which can be named freely overlaying the original one? If yes, can you direct me to a tutorial as I have no experience with custom UI creation. I was directed to you regarding this topic.

    Many thanks, Iovilius
    Tasyen
    Tasyen
    The frame BlzGetFrameByName("SimpleClassValue", 0) is used to display the text. But it updates often: when the player selects, tries to target something , opens the menu or gains a buff. Therefore just setting the text glitches/not enough. if you are fine with some small glitches you could have a fast timer (every 0.0xs) in which you check if the current selected unit has a visible expiration bar and if it needs a custom text then update the text.

    BlzFrameIsVisible(BlzGetFrameByName("SimpleProgressIndicator", 0))
    BlzFrameSetText(BlzGetFrameByName("SimpleClassValue", 0), "TestText")

    if you don't want glitches, you would make the text of ("SimpleClassValue",0) unseeable (by giving its parent 0 alpha "SimpleUnitStatsPanel", 0) and create a custom Text which displays the current wanted one. Beaware that "SimpleClassValue" also displays hero/creep level and unit class.

    BlzFrameSetAlpha(BlzGetFrameByName("SimpleUnitStatsPanel", 0), 0)
    BlzFrameSetAlpha(BlzGetFrameByName("SimpleUnitStatsPanel", 0), 255)

    I made a resource that plays with this "SimpleClassValue" to display Levels for non creeps: ShowUnitLevel
    Iovilius
    Iovilius
    Will see where I get with that, thank you for your reply.
    Hello, Tasyen. How to click through STATUSBAR :psmile:
    lanchengkai
    lanchengkai
    how to set enable in FDF, thank u :psmile:
    lanchengkai
    lanchengkai
    hi,
    this function seems to only work on buttons, not on STATUSBAR, it still prevents clicks from penetrating :psmile:
    • Like
    Reactions: Tasyen
    Tasyen
    Tasyen
    Size might be ignored when you set 2 framepoints, which RUID does from the code I saw.

    No idea, how to disable/enable in fdf.
    JASS:
            set udg_MaxGold[GetConvertedPlayerId(GetTriggerPlayer())] = ( "|cffff0000" + ( I2S(GetPlayerState(GetTriggerPlayer(), PLAYER_STATE_RESOURCE_GOLD)) + "|r" ) )
            if GetLocalPlayer() == GetTriggerPlayer() then
            call BlzFrameSetText(BlzGetFrameByName("ResourceBarGoldText" , 0), udg_MaxGold[GetConvertedPlayerId(GetTriggerPlayer())])
            endif

    hello. I am studying and watching your ui frame tutorial. I'm trying to change the text color, but this code doesn't work. The color does not change, just the color code is written as it is. Can you tell me what's the problem?
    Tasyen
    Tasyen
    "ResourceBarGoldText" only supports a limited amout of chars (8 according to resourcebar.fdf).
    Might instead try to use BlzFrameSetTextColor instead (only V1.32+)
    BlzFrameSetTextColor(frame, BlzConvertColor(255, 255, 0, 0))
    tlstkwjr
    tlstkwjr
    Thank you. Your answer has been of great help.
    Hello

    To find the desyncs I've displayed on every screen all the frames from every players. And the vews are the same. The only difference is for input, the typed content is not updated in real time... So I'm a bit lost I think it's a proof that no code is executed in GetLocalPlayer bloc

    I've noticed that when it desync the portrait image keeps it's height but takes full with of the screen... Do you have an idea about the bug?
    Tasyen
    Tasyen
    That graphical error happend to me often on desync. I don't tested much about it.

    To share Input-Data of UI-Frames you should use the events and save the value of the Event getters in a global (probably array to have it for each player).

    BlzGetTriggerFrame returns framehandle
    BlzGetTriggerFrameEvent returns frameeventtype
    BlzGetTriggerFrameValue returns real
    BlzGetTriggerFrameText returns string
    GetTriggerPlayer returns player


    the current value of the none Event Frame Getters will most likely differ for the players.
    BlzFrameGetText(frame)
    BlzFrameGetValue(frame)
    Dark-Zalor
    Dark-Zalor
    hello, I was just thinking... is it possible to have random bugs due to the save of a globals vJass variable for each player that store the localPlayer

    I just put in a function the line set LOCAL_PLAYER = GetLocalPlayer() because it creates different datas stored in each player's man variable LOCAL_PLAYER

    Do you think it can be responsible of the bug?
    thank your faor your answers
    Tasyen
    Tasyen
    the variable saving itself is no problem. The problems/bugs can start as soon you use the variable LOCAL_PLAYER or any variable/feature that was set based on LOCAL_PLAYER.

    In Warcraft 3 all users simulate and execute all code/orders by themself. When an unit attacks all users run the attack trigger on their machine. When everything goes right, it results into the same and they can continue playing together. Normaly this works fine. To know that the users still play the same match the computers calc multiple checksums and share them.

    By using GetLocalPlayer() you can stop some users from executing the code or make them execute different code/data. This stuff has to be carefully be used as it is not allowed to alter the game nor the checksums.
    Their are other such that can be different like UnitName, GetLocalizedString ...
    Hello man,

    I have a new problem.

    I've stored some frames in a struct. And when I get them it returns null with a method or with the attributes. Is it normal?

    Thanks you for your future help.
    Dark-Zalor
    Dark-Zalor
    Thanks for your precious advise, it works as usual ;)

    I don't execute trigger in GetLocalPlayer()

    I only show/hide if player is the LocalPlayer

    Is there a limit of frames on the screen per player, cause I create a big number of frame for 2 players (240 for 2 players) the creation is done for P1 and after that for P2 and it seems that P2 can acces to frames from P1...
    Each of theses frames are stored in array so I don't need to get them by name.. Have you got an idea about that?
    Dark-Zalor
    Dark-Zalor
    Can it be a problem with the names If 2 frames with same name can have conflict with their handles.. even if they have different context.

    If I have a lot of simple frames to create (and each one have a texture frame), and there is too much names to write it in the fdf file do you think it's possible too spawn them without conflicts and dynamic names.

    Other question:
    Do I need to DestroyChild frames too when I Destroy the parent. Because some frames launch correcty once but when I re-launch them or the other player launch them after I have a crash

    Sorry for that big amount of question, But I'm a bit lost, my map works well but I still have some crush for frames and I don't know the reason.
    Thank you for your help
    Tasyen
    Tasyen
    there can't be to many Names, I made a fdf with 11mb 528126 lines. Takes some time to load and ram but it works.
    Inside the FrameName you can use space, numbers or other stuff.

    I am not aware of a problem when you have Frames using the same name. Outside of fdf SetPoint when you use UseActiveContext wrongly.

    You can not have dynamic Names when you have String/Texture children and want dynamic content. That would require BlzCreateFrame with inherit, but then you lose access to the children, because BlzFrameGetChild ignores Texture/String and they lose their name.

    String/Texture crash for many Frame natives used onto them, do not destroy them.

    I didn't test Destroy that much. I think it is wrong to use Frames like single-use ware. They have a static nature, a limit how many you can use at one time anyway (screen space) and can be reused quite easy show/hide.
    Hello Tasyen, saw your tutorials about UI and I have a question.

    Is it possible to hide backdrops when you move the mouse over them and bring them back when the mouse is somewhere else?. I want to create icons and place them above the hero's abilities, it's very important that the player can click on the original hero's abilities so I need to hide the created backdrops.

    I'm trying to find a workaround and make it possible to replace ability icons in the game

    Thanks in advance for any possible help!
    • Like
    Reactions: deepstrasz
    Tasyen
    Tasyen
    For Backdrops itself, no.
    But it is possible for Ability Buttons. They don't use the Frame Tooltip system. Give them a SIMPLEFRAME-Tooltip check visibility inside a fast timer so you know when the local user points at a command button. There is still a problem what ability/command the button uses. Give ORIGIN_FRAME_COMMAND_BUTTON the tooltip not the name version.
    I described it in the ui tutorial:
    and made a system to execute code for it, such a system is useful because Every Frame can have only one Tooltip with a system that does it one can have many such actions as long they all use the system:
    xaosan
    xaosan
    I will try. Thanks a lot for your help!
    hello man

    I've created some SIMPLEBUTTONS because I want to go outside the 4:3 ratio of the screen. But when I click on them in the trigger I can't have the
    BlzFrameGetName on the clicked frame. I checked in my trigger the BlzGetTriggerFrame() is not null.

    But the function BlzFrameGetName returns a null value....

    Is it normal?
    Thanks for your help.

    PS: Each simpleButton is described in an fdf file. and the parent of my buttons is ORIGIN_FRAME_GAME_UI

    BTW with your help you can see some of my work on my albums :D (I would never be that far without your help, so thank you a lot man)
    • Like
    Reactions: deepstrasz
    Tasyen
    Tasyen
    For some reason a simpleframe does not know it's own name.

    non simple Frames can leave 4:3 too, I just weren't aware of it for a while. You need to create the Frames as child/inside a (sub)layer started by for one of them: BlzGetFrameByName("Leaderboard", 0), BlzGetFrameByName("Multiboard", 0), BlzGetFrameByName("ConsoleUIBackdrop",0)
    Leaderboard/Multiboard would have to be created with the none frame api first.
    ConsoleUIBackdrop is only for Warcraft V1.32+

    Nice work, good luck.
    Dark-Zalor
    Dark-Zalor
    HO MY GOD, simples frames are ZANPAKUTO!! you must know their names with effort :D

    what? ho shit I changed a lot of things to do that.
    BTW thanks for your precious experience end knowledge man
    Hey, sorry for the bother.
    Is there a way to remove "Move, attack, patrol, hold, stop" from the UI without making them a small white dot like here?
    hi there, i want to show status bar(image), because i hidden all UI and i don't know how to so that. cloud you help me? thank you.
    zvHt9Y0.png
    Tasyen
    Tasyen
    The status bar is a child of the single unit Selection Frame. It either requires that you show that again (any version) or change parent of the buff bar (only V1.32.6+). If you only want the buff bar change its parent.

    Change parent would be on of them:
    call BlzFrameSetParent(BlzGetOriginFrame(ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR, 0), BlzGetFrameByName("ConsoleUI", 0))
    call BlzFrameSetParent(BlzGetOriginFrame(ORIGIN_FRAME_UNIT_PANEL_BUFF_BAR, 0), BlzGetFrameByName("CommandBarFrame", 0))
    Tasyen
    Tasyen
    if you can't do the one above:
    To show the single Unit again you would show its parent again, which shows all of the center bottom UI (alot of features).
    call BlzFrameSetVisible(BlzFrameGetParent(BlzGetFrameByName("SimpleInfoPanelUnitDetail", 0)), true)

    or change the parent of single Unit selection and hide all of its content except for buff bar. By creating a hidden "SIMPLEFRAME" which you choose as new parent for all that single selection frames.
    call BlzFrameSetParent(BlzGetFrameByName("SimpleInfoPanelUnitDetail", 0), BlzGetFrameByName("ConsoleUI", 0))
    Then as shown in The Big UI-Frame Tutorial Hide BuffBar

    BlzGetFrameByName("SimpleInfoPanelIconDamage",0)
    "SimpleInfoPanelIconDamage",1
    "SimpleInfoPanelIconArmor",2
    "SimpleInfoPanelIconRank",3
    "SimpleInfoPanelIconFood",4
    "SimpleInfoPanelIconGold",5
    "SimpleInfoPanelIconHero",6

    "SimpleHeroLevelBar",0
    "SimpleProgressIndicator",0
    "SimpleUnitStatsPanel",0
    call BlzFrameSetFont(BlzGetFrameByName("SimpleNameValue", 0), "", 0, 0)
    dhguardianes
    dhguardianes
    Thank you feedback me :)
    Hello man

    I have a few more questions:

    First of all about the local players.

    I create a frame for the local player to set a unit name. To display the frame and get the triggers I only launch it for the local Player. So what happens to other players?
    They will have different names in function of the players.
    same problem I'm working on a system to allow the player to custom his spells. But the spellpack will be different in function of the player, so how Warcraft 3 will manage that in multi.

    Second problem I have is to recolor icons It does not works for frames (I used BlzCreateSimpleFrame). And when I try to create a Simple Frame it does not display it...
    I set the frame in the .fdf

    like that
    Frame "SIMPLEFRAME" "SimpleTexture" {
    }

    Have you got some ideas to help me?
    Thanks a lot
    Tasyen
    Tasyen
    When you create the frame only for one player the game will desync and the multiplay ends, because of mismatching handleId blocks.
    You should create it for all and hide it for the players not using the frame. It is safe to set different scale/alpha/image/text/points/... for the frames by using GetLocalPlayer().

    Make sure that all PCs will do the same thing for the buttons clicked. When player RED presses Firebolt all players need to know that RED clicked Firebolt with the same Result. They don't need to see the button nor the button has to look the same. But for all it needs to result into the same thing when RED clicks it.

    SIMPLEFRAME can not display images, like FRAME can not. Use Texture (fdf) or a SIMPLESTATUSBAR. SIMPLESTATUSBAR can be created by code only UI: Creating a Bar.
    Dark-Zalor
    Dark-Zalor
    Hello man.

    You wrote that line in the section "Change Text in Resource Lumber" of the big UI FRAME TUTORIAL
    "Using BlzGetFrameByName for only one player can desync the game, hence it is recommended to set it to variable before the GetLocalPlayer Block and using that variable inside the Local Block."

    But if I hide for every player some UI default elements I won't have desync right?

    Have a nice day
    Tasyen
    Tasyen
    The first time your map's script accesses a frame it gets an unique number (handleId). When this happens in a local player block it desyncs. BlzGetFrameByName is fine async as long the frame already got an handleId for all players.
    Hiding a frame for one player is no desync reason by itself. It can if you do something based on the visibility of the frame.

    You could call a frame access without doing anything with it, to reserve a handleId for it to allow async usage of the frame.
    call BlzGetFrameByName("ConsoleUI", 0)
    Hello thanks for your fast and complete answer.

    I created and loaded a TOC file I have now the error: Error (UI\FrameDef\UI\CommandBar.fdf:66): Expected ",", but found "}"

    Is there an other way with the natives to creates my frames than using FDF file because it seems laborious, difficult and not user friendly, compared to the native code. What do you think?

    And what happend if the frames has various number of items, for exemple if the content is dynamic (nbr heroes changed..)

    Btw your tutorial is great and Gave me instantly the desire to creates frames but all that files system end templates cooled me a bit.
    Tasyen
    Tasyen
    SimpleFrames of Type String/Texture don't support some ui-frame functions. They crash the game when you use such unsupported onto it.
    BlzFrameSetVisible
    BlzFrameIsVisible
    BlzFrameSetAlpha
    BlzFrameSetLevel
    BlzFrameSetEnable
    BlzFrameSetScale
    BlzFrameSetParent

    Instead use hide/alpha onto their parent.
    Tasyen
    Tasyen
    When you want to hide the damage, armor ... displays. The game shows repos them frequently, hence it is smarter to hide them by giving them a new parent which is hidden.

    call BlzFrameSetVisible(BlzCreateFrameByType("SIMPLEFRAME", "SimpleFrameHideParent", BlzGetFrameByName("ConsoleUI",0), "", 0), false)
    call BlzFrameSetParent(BlzGetFrameByName("SimpleInfoPanelIconDamage",0), BlzGetFrameByName("SimpleFrameHideParent",0))
    call BlzFrameSetParent(BlzGetFrameByName("SimpleInfoPanelIconDamage",1), BlzGetFrameByName("SimpleFrameHideParent",0))
    call BlzFrameSetParent(BlzGetFrameByName("SimpleInfoPanelIconArmor",2), BlzGetFrameByName("SimpleFrameHideParent",0))
    call BlzFrameSetParent(BlzGetFrameByName("SimpleInfoPanelIconRank",3), BlzGetFrameByName("SimpleFrameHideParent",0))
    call BlzFrameSetParent(BlzGetFrameByName("SimpleInfoPanelIconFood",4), BlzGetFrameByName("SimpleFrameHideParent",0))
    call BlzFrameSetParent(BlzGetFrameByName("SimpleInfoPanelIconGold",5), BlzGetFrameByName("SimpleFrameHideParent",0))
    call BlzFrameSetParent(BlzGetFrameByName("SimpleInfoPanelIconHero",6), BlzGetFrameByName("SimpleFrameHideParent",0))
    call BlzFrameSetParent(BlzGetFrameByName("SimpleInfoPanelIconAlly",7), BlzGetFrameByName("SimpleFrameHideParent",0))
    Dark-Zalor
    Dark-Zalor
    Thanks man it is really good how you answer to my questions so fast.
    A big thanks
    My UI-Systems moved from the Spell section to Skins - UI. It was discussed on discord, that they fit more into that section.
    hey, Tasyen can you quick watch this picture of my Ui Frame and maybe you can tell me what im missing
    the button for the Hero is a Simpleglowbutton.. why is the button behind the BoxFrame? even when i set it to Parent before...
    im thankful for evry anwser :)

    Tasyen
    Tasyen
    That should be String-SimpleFrames disallows many frame calls for them. I would suggest to set their fontSize to 0 with
    BlzFrameSetFont(BlzGetOriginFrame(ORIGIN_FRAME_PORTRAIT_HP_TEXT, 0), "", 0, 0)

    to revert the effect you would set the font to default (SkinManagerGetLocalPath is recommented because languages have different fonts and it will pick the right one for the users language)
    BlzFrameSetFont(BlzGetOriginFrame(ORIGIN_FRAME_PORTRAIT_HP_TEXT, 0), SkinManagerGetLocalPath("MasterFont"), 0.011, 0)

    but this frames have a bad behaviour that they are created with the first selection (can be enforced by trigger selection)
    Pwnica
    Pwnica
    ok seems like a lot of work... and knowledge..
    what about the color of the string can that be changed?
    i managed to add the hp bars into the default ui (without numbers)
    the only problem is the green color of the hp numbers and the blue of the mana numbers...
    can that be changed into white?

    im sorry for taking your time tasyen but you are the god of UI Frames..
    thanks for evry help :)
    Tasyen
    Tasyen
    the text color is updated frequently, you will have to do that alot of times, I don't recomment that.

    It is not difficult, you create an unit, share vision for it to everyone on, use select unit, wait shortly 0s then do setfont.

    BlzFrameSetTextColor(BlzGetOriginFrame(ORIGIN_FRAME_PORTRAIT_HP_TEXT, 0), BlzConvertColor(255, 255, 255, 255))

    But yeah it is big nonsense that the portrait texts don't exist on default and one has to do such work arounds.
    Hello, I am a developer mainly active in the Korean community. I did data mining based on version 1.28.5 of what keywords are available in fdf, and although Blizzard didn't use them, a lot of keywords that could actually be used were found. (I have not tested all keywords) If you are interested in this, I can provide you with the information.
    • Like
    Reactions: Tasyen
    BlacklightsC
    BlacklightsC
    Here is intel(.xlsx, Google Drive), it may contain unnecessary intel, i recommended that you filter it yourself.
    ps. your thread was very helpful. I hope that intel i am providing will help you in your research.
    Tasyen
    Tasyen
    Thank you, I'll check it out.
    Tasyen
    Tasyen
    Did some small Tests. I missed out some really good Frame-stuff, Thanks again.

    FrameType "STATUSBAR" has features many wanted, as it allows to display models and set the current animation time with BlzFrameSetValue.
    ControlStyle "CLICKONMOUSEDOWN" controlClick on click instead of release
    Hello, are you still investigating the issue of imported mp3 in custom music lists? It really bothers me a lot. I tried matching the bitrate but it doesn't do a difference. The file from warcraft 3 is encoded as Joint Stereo M/S Stereo whereas mine is Joint Stereo. But since both are literally the same thing, I don't think it would make a difference. Any solutions?
    Holy farm animals.
    I hope you'll use some spoiler/hidden tags for that humongous post:
    deepstrasz
    deepstrasz
    I dunno. Just think of a way to make it easier to read and scroll through.
    Tasyen
    Tasyen
    I now put every chapter-content into a Spoiler tag, Makes it indeed easier to scroll and load but it is not so compatiple with the current jumps to subchapters.
    Tasyen
    Tasyen
    I think I will just clone this subchapter jumps to each ChapterContent. But not now :| .
    Hey, I see that you did many systems with custom UI using the frame natives. Could you maybe create a minimal system for custom idle buttons? I would like to add something like idle warrior or idle building etc. to my maps. It is really useful when you have a big army and games like Age of Empires II have it as shortcut. From my understanding you have to create a frame from parent or base frame. I have no idea what the name of the idle worker icon is. There could be a whole list of idle icons in a row and a minimize button for all of them and also hotkeys. I also like your big tutorial on frame natives. It should be sticky in the trigger forum. I guess creating an idle button would be like "IconButton without custom FDF". I would also like to know how you can overwrite the UI of a race with another race's UI. Maybe you can add stuff like that to the tutorial. This would help to use custom UIs from other races like Demon etc. when still using one of the standard races of Warcraft. Some maps have more than the 4 standard races.
    Tasyen
    Tasyen
    The System does not change the spell area effect texture, Cursor, Music and also Sounds are not done by it.
    Edit: It updates the Idle worker button's Icon but by doing that it loses the on click shrinking feedback.
    Barade
    Barade
    How is the shrinking effect done? Is it part of the FDF file or a custom animation using the mouse events? I am trying to recreate the effect for an idle button system.
    Tasyen
    Tasyen
    I do the shrinking effect by making the backdrop in the pushed state smaller, with BackdropBackgroundInsets.

    Last time I checked: the Frame Mouse Click Events didn't work, only the Frame release Mouse Events which make it more complex to do, now one would have to do mouse enter events + playerable ground mouse down if one would want to do that by code.
    Hi Tasyen, would you have time to check the questions in your 2 systems please?
    hello sir, can i request a simple UI like dota 2
    Tasyen
    Tasyen
    Are you sure you want such?
    Which version you make maps for?
    What features you want from that UI?
    Hi,

    I'm trying to utilize these custom stats you made here: UI: 3x3 Custom Unit Stats

    I'm working in typescript and a friend helped me rewrite some lines to adapt your code to ts.

    However, it seems to be causing desync in my map. Do you have any ideas on what could be causing the issue?

    Love your stuff btw!
    Tasyen
    Tasyen
    Make sure that you create warcraft 3 objects (handles, like frames, units, locations ...) in function main or later, not inside the root before the game has started.
    If you do stuff for one player only make sure that you do not add/create or destroy things. BlzGetFrameByName BlzGetOriginFrame, BlzFrameGetChild, BlzFrameGetParent can add new handles.

    Good luck in finding the cause.
    Willson
    Willson
    Thanks for the reply.

    We've been at it for 4 hours and it seems to be the use of GetLocalPlayer in CustomStatUpdate who is the sole cause for the desync. Don't know if there's anything can be done at this point as it also seems to be crucial for everything to display proper values.
    Willson
    Willson
    Alright, final update in case you or anyone that happens on this wants to know.

    We seem to have fixed it by basically calculating all values we want to display before calling GetLocalPlayer.

    So we loop through all players in the game and store our data in local variables in the update function. Then we store the ID from GetLocalPlayer and display our data to only that player.
    • Like
    Reactions: Tasyen
    hi tasyen.
    i create a gluecheckbox,how to define it checked in defalut?
    i couldn't find any method to slove it.
    Tasyen
    Tasyen
    No idea. I suggest to reverse the meaning of the checkbox.
    FBICirno
    FBICirno
    so i use button and backdrop to do this work
    Tasyen
    Tasyen
    Nah, when you checkbox currently means hide x. Instead let it show x. The reversed action but still quite similiar.
    Hi Tasyen - you seem to be really knowledgeable about manipulating UI in Warcraft 3, so I was wondering if you could help me with something. My end goal is to hide the UI/HUD from the main and campaign "glue" menu screens. If you are curious why: this will allow me capture those scenes in their purest form for my ambient YouTube project.

    I am running Reign of Chaos v1.27 (also own Reforged if that's easier). I have the Allow Local Files registry key set up, and I've managed to modify the cursor on the main menu (by playing around with BLP files) as a basic sanity-check that it works.

    What I've read about WC3 UI has led me to the FDF files; to achieve my goal I've been trying to modify CampaignMenu.fdf. However, nothing I do seems to have any effect. Maybe I'm in the wrong file? Or maybe Allow Local Files does not support FDF edits? Or maybe I'm on the wrong track altogether - I do have some scripting and World Editor experience, so all ideas are welcome!

    Thank you,
    - skyboxeye
    Tasyen
    Tasyen
    One can change the menu by placing custom fdfs in the game folder with the same relative path. ui\framedef\glue\campaignmenu.fdf.

    Though removing interactive UI is something the game does not like. I once tried to remove the Battle.net Button. The game didn't wanted to start after that anymore. I ended with only taking it's Textures, Size, Position and TabFocus reference. From an user view same result, but technically it is still there just not reachable.

    Though if you only want to see the background models without anything else you also could just create a map in Reforged in which you hide all UI and create a "SPRITE"-Frame which model you set to the menu models. Does not require any fdf, though might take effort to make them look the same.
    pyf
    pyf
    @skyboxeye: maybe you could request it as a novelty feature, in the WFE thread?
    For the record, it comes with a 'UI Hide/Show' hotkey toggle since v2.19, but I do not think it was designed to include the main and campaign glue menu screens as well.
    pyf
    pyf
    As a reminder, one can run the game with an executable that allows to load more modified files than allowlocalfiles does. This is (for example) how the subtitles of the FMVs can be fixed. This is also how one can run the game with some modified local fdf files that would not have loaded otherwise, like UI\FrameDef\GlobalStrings.fdf
    Reputation (+1):
    (Post) How would I go about using your FdfCreator system to recreate all the systems showcased in this thread?: https://www.hiveworkshop.com/threads/ancients-wrath-orpg.326604/
    Reputation (+1):
    (Post) What do you have in store regarding UI? Or do you something totally different in mind for your next project? Mind giving a peek?
    Hello Tasyen, I am testing around with CustomUI and quite satisfied that it works almost perfectly in old 1.31. However, when I am importing the system to my map, I realized that there are no Console Texture 5 and 6 in my World Editor. Is there any solution around this (Except replacing original textures and import the replaced textures for system)? :(


    EDIT: I completely forgot about MPQ Editor and after I tried it. It works perfectly now. Thanks for your system, sir! Can you also please create Race Selector UI system? I've seen recent one but it's in Lua sadly..
    Tasyen
    Tasyen
    World Editor data can be moded.
    V1.31 don't get any patches you can mod World Editor data and teach your world editor to be able to change it (this does not require any programming or hacking). Less smart to do in a Version still getting patches.

    ConsoleUITexture 6 & 5 can be added into game interface by placing a custom "ui\skinmetadata.slk" into your warcraft 3 game folder with that Allow Local Files feature.

    If you wana do that you add 2 entries and increase the total yCount (at the top of the slk)
    the new entries have for X2 the wanted stringKey to write onto.
    C;X2;Y856;K"ConsoleTexture05"
    C;X2;Y857;K"ConsoleTexture06"

    You also need to add the other fields correctly, I suggest copying ConsoleTexture01 and just change the y values, the number in field X2 and the unqiue ID.
    GaLaxY_256
    GaLaxY_256
    Thanks! This is what I needed! Can you please make more UI related systems in the future? :)
    Reputation (+2):
    (Post) This was the exact thing I needed, thanks!
    "select unit (shop ability that select the buyinging unit)"
  • Loading…
  • Loading…
  • Loading…
  • Loading…
  • Loading…
  • Loading…
  • Loading…
Top