• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) đź”—Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans đź”—Click here to read the full interview.
  • Create a faction for Warcraft 3 and enter Hive's 19th Techtree Contest: Co-Op Commanders! Click here to enter!
  • Create a void inspired texture for Warcraft 3 and enter Hive's 34th Texturing Contest: Void! Click here to enter!
  • The Hive's 21st Texturing Contest: Upgrade is now concluded, time to vote for your favourite set of icons! Click here to vote!
Tasyen
Reaction score
2,058

Profile posts Latest activity Postings Experience Media Albums Resources About

  • 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)"
    Hey, any idea how to verify if player presses F10? There's an event for game pause but what about F10? I'm asking because singleplayer maps are paused on F10.
    Planetary
    Planetary
    local trig = CreateTrigger()
    BlzTriggerRegisterPlayerKeyEvent(trig, Player(0), OSKEY_F10, 0, true)
    TriggerAddAction(trig, function()
    print("test F10")
    end)
    deepstrasz
    deepstrasz
    Thanks!
    Reputation (+4):
    (Post) +https://www.hiveworkshop.com/threads/feedback-compiled-list-of-bugs-issues-for-1-30-1.308210/page-22#post-3449973
    I recently got blackmailed by the moose army into tending for the tutorial section, I am working from oldest to newest as that seems fair but I am giving you a heads up since you have so many tutorials pending approval.
    I think it would be very useful for you have a collection of links between your UI tutorials so you can easily navigate between them as I suspect if you are interested in one, you will also read the others sooner or later.

    Not a demand, as I said I have not properly gone through it yet. It was just an easy addition I think would be nice to add when/if you get the time.
    Chaosy
    Chaosy
    The tag is helpful, no doubt.
    But let's put it this way, I did not even know you could search by tag, so I am not sure if that is as good of a solution as something that is actually in the thread.

    I don't think a completely new tutorial is needed either.

    What I am thinking is to simply add a section in each of the tutorials like:
    More UI tutorials in the series:
    List1
    List2

    A bit annoying to add but I think it's more useful
    Tasyen
    Tasyen
    I added a List of Links at the end of each of them. Leading to the others.
    Chaosy
    Chaosy
    Nice, I just hope the links don't break if I move them. I think I can put a permanent redirect buuuuut not sure if needed.
    Hi Tasyen, is it possible to use the unit info Panel and show 4 more Attributes with a number under it that is based on a integer.. for example
    First page the default with attack Armor and 3 main attributes and the second one with Textes:
    Spelldamage
    Healing Power
    Attackpower
    Spellcrit/Crit
    And under them the integer?
    It’s something possible?
    Tasyen
    Tasyen
    It is possible. But a page with such a format is not included in the demo map.
    Well I have to update it anyway, therefore I could add some more demos. The Skillpanel is showing some skills it should not, realized that after I tested it in some random maps after the upload.

    If I got you right you want a demo Like this:
    LabelA
    ___textA
    LabelB
    __textB
    LabelC
    __textC
    LabelD
    __textD

    Without any Icons

    Or do you want this
    LabelA___________TextA
    LabelB___________TextB

    I see you probably mean it should look like the normal attributes which would be kinda like the first I thought.
    Reputation (+1):
    (Post) Thank you very much! This camera function by UI is a real evolution in terms of cameras in recent times or the best for Wc3, as I haven't seen anything like it yet.
    Reputation (+1):
    (Post) Thanks for the information. I should take a look at the test map before asking questions, my bad. I was looking at the description and saw only a demo for units.
  • Loading…
  • Loading…
  • Loading…
  • Loading…
  • Loading…
  • Loading…
  • Loading…
Top