• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. đź”—Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!
Tasyen
Reaction score
1,643

Profile posts Latest activity Postings Experience Media Albums Resources About

  • Hello Tasyen

    I try for a map to move and change thesize of hp text and mana text.

    I arrived to move it and the text keeps his default size, but the text is really small when I try to rezise it with a "BlzFrameSetScale".
    I tried to change the frame Parent, change the frame size with BlzFrameSetSize

    Once I us BlzFrameSetScale the text becomes really small.
    Have you got an idea how to fix that?
    • Like
    Reactions: maddeem
    Tasyen
    Tasyen
    for portrait text you can use BlzFrameSetFont.
    BlzFrameSetFont(BlzGetOriginFrame(ORIGIN_FRAME_PORTRAIT_HP_TEXT, 0), SkinManagerGetLocalPath("MasterFont"), 0.011 + x, 0)
    Dark-Zalor
    Dark-Zalor
    Ok because the current font does not allow to change the scale?
    The x value is the size to increase?
    Thanks for your very precious help.
    Tasyen
    Tasyen
    y, x for the how much bigger, i wrote it that way so you know the default value and expected values.
    Hey, sorry for the bother. Do you have any idea if it's possible to edit icon colour hues via the editor similar to how you can do it with models in the object editor? I'm specifically interested in items but I guess the inventory is redundant when you can use custom UI and stuff.
    Tasyen
    Tasyen
    I dont know how to change the color for item Icons over the editor.

    Custom Ui has feature to recolor an image but not for inventory button. Best I can suggest is to have an colored-Filter over it but then one would need to know the current hold item.
    normal warcraft 3 inventory still has something to it, it is simple and is built in, can't say that about custom UI.
    deepstrasz
    deepstrasz
    Thank you, so the key or easier thing to do is add some sort of filter UI element/frame over an icon's position?
    • Like
    Reactions: Tasyen
    Hey Tasyen,
    In your tutorial, it is mentioned that you can specify height for an MenuItem in the fdf, but is it possible to specify the alignment so that it is centered within the popupmenu box?
    Tasyen
    Tasyen
    I dont know how to align the text in the popupmenu.
    The GlueTextButton supports text align, but that is only for the Text in the button of the current choosen.
    Lt_Hawkeye
    Lt_Hawkeye
    Unfortunate, but in that case, how would I go about changing the text size of the Menu items that are not chosen?
    Tasyen
    Tasyen
    Inside MENU you use FrameFont & MenuItemHeight
    Code:
    Frame "POPUPMENU" "CustomCommandsPopup" INHERITS WITHCHILDREN "MyPopupTemplate" {
        PopupMenuFrame "CustomCommandsPopupMenu",
        Frame "MENU" "CustomCommandsPopupMenu" INHERITS WITHCHILDREN "EscMenuPopupMenuMenuTemplate" {
            DecorateFileNames,
            FrameFont "MasterFont",0.014,"",
            MenuItemHeight 0.016,
            MenuItem "COLON_GOLD",     -2,
            MenuItem "COLON_LUMBER",     -2,
            MenuItem "COLON_FOOD",     -2,
           
        }
    }
    Hello Taysen
    Thanks for your precious tutorial.
    I've realized a cooldown with a simplestatusbar using your code. And thats works really well.

    I've another question.
    How to make the SimpleButtons glow like other Butttons, I use on them that heritage "ScoreScreenTabButtonTemplate"

    But when I declared it on my fdf it says that "Error, cannot find frame "ScoreScreenTabButtonTemplate" for "PokeBarButton-1-1" to inherit from!"

    I start by including these 2 files:
    IncludeFile "UI\FrameDef\Glue\StandardTemplates.fdf",
    IncludeFile "UI\FrameDef\UI\EscMenuTemplates.fdf",

    Do you know if I need to include an other file?
    • Like
    Reactions: deepstrasz
    Tasyen
    Tasyen
    simplebutton are a different thing. It can not inherit (glue)button. Checkout "UpperButtonBarButtonTemplate" from ui/framedef/UI/UpperButtonBar.fdf.
    The fdf-action to set the highlight texture for simplebutton is

    UseHighlight "TexturePath", or
    UseHighlight "TextureBlueprintName",

    normaly you use:
    UseHighlight "TextureBlueprintName",
    because you want to set some values for the texture. like alphamod

    I also copied it in my system UnitInfoPanels, in the 4x3 and 4x2 panel each stat is a simplebutton and can be clicked and it uses the highlight from upperbuttonbarbutton.

    I made a "web-doc" in github for fdf actions. its easier to look for fdf actions than my big tutorial.

    Good Luck
    Tasyen
    Tasyen
    if you dont want to search for the fdf file.

    Texture "UpperMenuButtonBackground" {
    File "UpperMenuButtonTexture",
    TexCoord 0.0, 0.6640625, 0.0, 0.171875,
    }
    Texture "UpperMenuButtonPushedBackground" {
    File "UpperMenuButtonTexture",
    TexCoord 0.0, 0.6640625, 0.25, 0.421875,
    }
    Texture "UpperMenuButtonDisabledBackground" {
    File "UpperMenuButtonTexture",
    TexCoord 0.0, 0.6640625, 0.5, 0.671875,
    }
    Texture "UpperMenuButtonHighlight" {
    File "UpperMenuButtonTexture",
    TexCoord 0.0, 0.6640625, 0.75, 0.921875,
    AlphaMode "ADD",
    }

    Frame "SIMPLEBUTTON" "UpperButtonBarButtonTemplate" {
    DecorateFileNames,
    Width 0.085,
    Height 0.022,
    ButtonPushedTextOffset 0.001 -0.001,
    NormalTexture "UpperMenuButtonBackground",
    PushedTexture "UpperMenuButtonPushedBackground",
    DisabledTexture "UpperMenuButtonDisabledBackground",
    UseHighlight "UpperMenuButtonHighlight",
    }
    Hi Taysen,
    Do you know how to change the size of the cooldown loader. The blue square that shows the loading time of a spell casted.
    Thanks and have a nice day.
    • Like
    Reactions: deepstrasz
    Dark-Zalor
    Dark-Zalor
    The direct children of the command buttons frame child are 2, but none of them changed the size of the cooldown frame when I changed the scale.
    Tasyen
    Tasyen
    it did for me: for one frame than it become unchange able.
    Dark-Zalor
    Dark-Zalor
    You tried with the children, of the button child?
    • Like
    Reactions: deepstrasz
    emperor_d3st
    emperor_d3st
    Love ya!
    emperor_d3st
    emperor_d3st
    Sir, I think I'm retarded. I spent 2 hours debugging why my silly frame buttons didn't work. Of course I forgot to add the actions to my trigger :') This is your brain on WorldEdit. Helluva drug. WorldEditor: not even once!
    Tasyen
    Tasyen
    Happened to me often enough :hohum: , hence for new code i print to the screen that the function runs, the function finished and the action runs, even more important when using Lua.
    hi in your tutorial you mention how to play animations with an example:

    JASS:
     -- play death animation
        -- birth = 0
        -- death = 1
        -- stand = 2
        -- morph = 3
        -- alternate = 4
        BlzFrameSetSpriteAnimate(model, 1, 0)

    for the model "Abilities\Weapons\RockBoltMissile\RockBoltMissile.mdl"
    How did you get these indices since the editor only shows a Stand and Death animation.
    Are these special predefined indices?
    I am trying to the the index for the talk animations for portraits.
    In the model editor I find:
    Footman/Captain:
    Portrait = 0
    Portrait 2 = 1
    Portrait 3 = 2
    Portrait Talk = 3
    Portrait Talk 2 = 4

    but none of these indices do anything for the portrait model.

    It would be awesome if I could play the talk animation and even better if it would work with
    JASS:
    BlzGetOriginFrame(ORIGIN_FRAME_PORTRAIT, 0)
    .
    Do you have any idea how to achieve this?
    Tasyen
    Tasyen
    Index 0, 1, 2 I got by random tries. 3 & 4 I took from TriggerHappy.
    I have not tested playing animations with the Portrait. It might be that the game enforces, the portrait to play what the game wants and that non stop (at least 10fps). Giving you less power over it.
    • Like
    Reactions: Barade
    Barade
    Barade
    I think it just does not work for the origina frame portrait. It works fine for a custom unit portrait sprite. I will have to create a fake one on top to trigger animations.
    Hey man!

    I have a bug to report regarding you vJass HoverOriginButton system:

    I'm using the latest version of Warcraft III.

    Take a completely empty map.
    Inject your system into the triggers of the map.
    Start the map.
    Do a quicksave.
    Load the quicksave.
    After it loads and you press the ANY key, Warcraft III will crash.
    Hello man.
    I have a question about frames. Is it possible to create a simple frame that contains a sprite. Because I'm on the left of the screen and my
    sprites are not visible.

    Thanks for your advises.
    • Like
    Reactions: deepstrasz
    Dark-Zalor
    Dark-Zalor
    Ok you have already answered questions below.
    Your advises are really useful as always! :infl_thumbs_up:
    Hello there. Any chance for a fancy looking custom race pick system? :)
    That would be huge for a custom melee creators.
    Hello. I want to put a sprite(Frame Border Effects) on the icons displayed next to the hero's names in the multiboard. In this case, where should I refer? Origin frame names related to multiboards all seem unrelated. Thank you for your efforts.
    Tasyen
    Tasyen
    hero buttons are often outside of the screen 4:3. For non simpleframes you need to create them in a layer started by a frame that can leave 4:3. Like
    BlzGetFrameByName("Leaderboard", 0)
    ("Multiboard", 0)
    ("ConsoleUIBackdrop", 0)

    "ConsoleUIBackdrop" is below simpleframes so might be a bad choice for a hero button overlay or you make it bigger than the hero button.
    "Multiboard" & "Leaderboard" only exist when you used the non frame api to create & show one of them.

    creation line would be one of them
    call BlzCreateFrameByType("SPRITE", "MyHeroButtonSprite", BlzGetFrameByName("ConsoleUIBackdrop", 0), "", 0)
    call BlzCreateFrameByType("SPRITE", "MyHeroButtonSprite", BlzGetFrameByName("Leaderboard", 0), "", 0)
    tlstkwjr
    tlstkwjr
    Thanks to your kind reply, I thought I was close to the answer, but the scaling of the sprites is bothering me. I don't even know what rule the size is being adjusted(
    BlzFrameSetSize & BlzFrameSetScale)
    , and even if I try to adjust the size of the model itself, I can't fit it. Because some sizes don't show up at all in game.
    Tasyen
    Tasyen
    I create such autocast sprites that way:

    local button = BlzGetOriginFrame(ORIGIN_FRAME_HERO_BUTTON, 0)
    -- requies Leaderboard created and shown using the non frame api
    local model = BlzCreateFrameByType("SPRITE", "SpriteName", BlzGetFrameByName("Leaderboard", 0), "", 0)
    BlzFrameSetAllPoints(model, button)
    -- apply the model
    BlzFrameSetModel(model, "UI\\Feedback\\Autocast\\UI-ModalButtonOn.mdl", 0)
    -- Models don't care about Frame Size, to resize them one needs to scale them. The default CommandButton has a Size of 0.039.
    BlzFrameSetScale(model, BlzFrameGetWidth(button)/0.039)
    Hello Taysen
    Thanks for your previous answer.

    I have an other problem.
    I've crteated a sprite frame. with the auto-cast animation. And I show/hide it when an element is selected.

    And the cycles show/hide produces a bug the animation runs faster and faster each time.
    I've tried to not change the scale, set model to "" when it is hidden..

    What do you think about that?
    • Like
    Reactions: deepstrasz
    Tasyen
    Tasyen
    I encountered that when I changed the parent of SPRITE/Highlight frames.
    Just create the sprite in a higher layer and set position, no need to change parent.
    Dark-Zalor
    Dark-Zalor
    hoo good, I changed it too
    You're very experimented in frames :D
    First of all thanks for your great tutorial.
    I uses it very often.
    I have a small question. Is it possible to remove the hover of the in game clock.
    • Like
    Reactions: deepstrasz
    Tasyen
    Tasyen
    According to my notes it should be possible to remove the mouse listener of the day night circle.
    BlzFrameSetVisible(BlzFrameGetChild(BlzFrameGetChild(BlzFrameGetChild(BlzGetOriginFrame(ORIGIN_FRAME_GAME_UI, 0), 5), 0),0), false)
    Dark-Zalor
    Dark-Zalor
    Thanks man,
    Your answer is really helpful.
    hello, would you please help me?
    im trying to turn off Attack Type tooltip so when i hover mouse over it i want it to not show the attack type description etc
    or perhaps turning off the icon?
    im a gui user and have no understanding of JASS or Lua.

    this crashes:
    • on 0s
      • Events
        • Time - Elapsed game time is 0.00 seconds
      • Conditions
      • Actions
        • Custom script: call BlzFrameSetFont(BlzGetFrameByName("SimpleInfoPanelIconArmor", 2),"", 0.0, 0)
    Tasyen
    Tasyen
    Overlay the icon with an invisible button which takes the mouse input. Works also in V1.31
    JASS:
    call BlzCreateSimpleFrame("UpperButtonBarButtonTemplate", BlzGetFrameByName("SimpleInfoPanelIconDamage",0), 0)
    call BlzFrameSetAllPoints(BlzGetFrameByName("UpperButtonBarButtonTemplate",0), BlzGetFrameByName("InfoPanelIconBackdrop",0))
    call BlzFrameSetLevel(BlzGetFrameByName("UpperButtonBarButtonTemplate",0), 8)
    call BlzFrameSetAlpha(BlzGetFrameByName("UpperButtonBarButtonTemplate",0), 0)

    in current Version this should disable the attack InfoPanel Tooltip
    call BlzFrameSetVisible(BlzFrameGetChild(BlzGetFrameByName("SimpleInfoPanelIconDamage",0), 0), false)
    Hello Tasyen, How can I increase or decrease its height? I can't find any command(like
    BlzGetOriginFrame(ORIGIN_FRAME_UBERTOOLTIP, 0))
    related to this

    Tasyen
    Tasyen
    The height of ORIGIN_FRAME_UBERTOOLTIP should be automatic. You only should place one point of ORIGIN_FRAME_UBERTOOLTIP.
    All TEXT frames do that when you don't limit the ySize.
    1 point + BlzFrameSetSize(frame, width, 0)
    I'm sure you've been hounded numerous times on what i'm going to ask but i've abused the search button enough that i'm obligated to marry it soon.
    Have you been able to modify the status bars in game to achieve something like this?Attached below
    Adding a "Resource" bar that follows the same rules as the vanilla mana & health bar? (ex. shrinking when zooming in, hidden when holding alt, etc)
    status-bar-tinkering-png.424098
    Hi, very helpful list here TasAbilityField Test Do you know how to set the fields by changing the ability level for item abilities or is there no way to do this for the abilities which are marked with 0 for "Set works Directly"?
    Barade
    Barade
    call IncUnitAbilityLevel(hero, abilityId)
    call DecUnitAbilityLevel(hero, abilityId)

    seems to work for damage nice.
    Barade
    Barade
    Only the Claw damage abilities don't work but Orb and Ring of Protection etc. but maybe I made a mistake registering them.
    Tasyen
    Tasyen
    I changed the amount of attack damage gained by Claw damage skills.
    Hello Tasyen.
    I've read your The Big UI-Frame Tutorial , which is very helpful. :thumbs_up:
    I encounter some problems, thinking you can help me out.

    Is it possible to set simple Texture's border as BACKDROP ?

    1. This is the war3 tooltip-like BACKDROP (which works fine):
    JSON:
    Frame "BACKDROP" "zTipBg" {
        Width 0.1,
        Height 0.1,
        BackdropTileBackground,
        BackdropBackground  "UI\Widgets\ToolTips\Human\human-tooltip-background.blp",
        BackdropCornerFlags "UL|UR|BL|BR|T|L|B|R",
        BackdropCornerSize  0.008,
        BackdropBackgroundInsets 0.002 0.002 0.002 0.002,
        BackdropEdgeFile  "UI\Widgets\ToolTips\Human\human-tooltip-border.blp",
        BackdropBlendAll,
    }

    2. This is the simple Texture version (which doesn't work):
    JSON:
    Frame "SIMPLEFRAME" "zsTipFrame" {
        Width 0.1,
        Height 0.1,
        Texture "zsTipTexture" {
            // ... same as BACKDROP(zTipBg) ...
        }
    }
    Tasyen
    Tasyen
    I also once thought they could be childs in fdf, But they are not. They do not follow the parent-Child Frame rules (normaly a Child would take over the alpha when one sets the parent alpha/scale, and the child would require visibility of the parent). All this things did not happen in my test. And the get Parent Frame for them returns someone else.

    But maybe it was changed since Warcraft 3 V1.31.
    • Like
    Reactions: Av3n
    Av3n
    Av3n
    Ah, I see. Yeah, I definitely knows this works on patches 1.33 and 1.34. So that may explain it
    InsaneMonster
    InsaneMonster
    I can confirm Av3n. It works in 1.35, just tested. Amazing discovery, very useful if you want to replace the main menu buttons (like I wanted to).
    Hi Tasyen. When I was going to hide the bottom UI on a map, I used your tutorial The Big UI-Frame Tutorial, and came across this line:
    Lua:
    BlzFrameSetAbsPoint(BlzGetFrameByName("ConsoleUI", 0), FRAMEPOINT_BOTTOM, 0.4, -0.18)
    Which did "hide" the UI, but not completely, it still showed a bit of the "workers idle frame". And I also noticed some side effects such as
    ORIGIN_FRAME_UNIT_MSG and
    ORIGIN_FRAME_CHAT_MSG frames being moved out of place. I want these two frames to be on their usual place. So I tried

    Lua:
    BlzFrameSetAbsPoint(BlzGetFrameByName("ConsoleUI", 0), FRAMEPOINT_BOTTOM, 0.4, -0.22)
    BlzFrameClearAllPoints(BlzGetOriginFrame(ORIGIN_FRAME_UNIT_MSG, 0))
    BlzFrameSetAbsPoint(BlzGetOriginFrame(ORIGIN_FRAME_UNIT_MSG, 0), FRAMEPOINT_BOTTOMLEFT, 0.0515, 0.2305)
    BlzFrameSetSize(BlzGetOriginFrame(ORIGIN_FRAME_UNIT_MSG, 0), 0.5, 0.25)
    BlzFrameSetSize(BlzGetOriginFrame(ORIGIN_FRAME_CHAT_MSG, 0), 0.9, 0.3)
    It does work, but when I alt tabbed out to do something, and afterwards alt tab in, the game crashed.
    I figured it out that ORIGIN_FRAME_CHAT_MSG seemed to be the culprit.

    So I'm still a bit confused and not sure how to solve this exactly.
    Tasyen
    Tasyen
    For me the Game crashed when ORIGIN_FRAME_UNIT_MSG has to much y-Size (0.255+).

    Alt + tab might have restored the frame positions. BlzEnableUIAutoPosition(false) stops some of that.
    • Like
    Reactions: Wrda
    Wrda
    Wrda
    Solved the issue, thanks!
    Hey man! I've been reading the [JASS/AI] - The Big UI-Frame Tutorial and experimented with RUID, but ended up writing my own code based on a RUID design. This didn't really work in RUID either so it could be that I fail with layering or something. I thought you could give stuff any parent and it children would be shown on top of parents.

    I'm having issues with simple status bars should be "on top of" the "base UI" and also I want text on top of that.
    To make it even more interesting, I'm one of those 1.31 people, so I don't have access to the latest tech.

    The problem is that only the "empty bar" is shown.
    Tasyen
    Tasyen
    Frames are most times on a higher layer than simpleframes (your bar). SimpleFrames can also not be childs of Frames. And Frames not childs of SimpleFrames.
    If you want a SIMPLESTATUSBAR over a Frame you need to create the Frame in a lower layer, by using a parent like ORIGIN_FRAME_WORLD_FRAME. (Which has the downside that it is lower than HP Bars.

    You could try to use "STATUSBAR" for the bar instead, it displays a warcraft 3 model and belongs to the Frame group. There are some pre built bar models in the game. Would remove the Frame/SimpleFrame problem but adds the SetSize not changing size problem. The Tutorial linked includes an example with the modelpaths.
    ThompZon
    ThompZon
    Alright, thanks. Will try it out!
    ThompZon
    ThompZon
    I tried it out but failed. I continue in the tutorial thread to make it more searchable for others in the future. Hopefully I might be able to help others after this mini-mapping contest :p
    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.
  • Loading…
  • Loading…
  • Loading…
  • Loading…
  • Loading…
  • Loading…
  • Loading…
Top