Beginner
Hello community!
Im new to Ouf and i want to start learning and write my own unit frames. Can you help me to get started? I need some examples of Addon structure (toc/lua files), and if possible the code to create player frame and clickable overlay over the player frame,with their own width and height. |
I would check out some existing ones.
oUF P3lim / oUF Simple are good ones to help you start. Look here at all the layouts. |
well... i did that 10 times... i just cannot understand what there is.
|
I would highly recommend oUF_p3lim or oUF_Phanx over oUF_Simple.
If you are up to it, you could also try oUF_Layout, which is a layout planned for learning purposes. However it is still work in progress and it lacks review, but most of the planned stuff is already in there. I'm planning a small code guide but am not sure when I'll have the time to finish it. Maybe parts of the code will change and some could get rebased to get a smoother learning curve based on feedback. You could just follow the commits to see how the layout evolved. The prerequisites are that you know the Lua basics and get along with Github. Just ask here if you have trouble understanding something. |
Seems interesting. So i have to work only in settings.lua? How do i change the color of a bar? The bar are black, and i want to get then from green 100% of HP to red 0% of hp.
I just do not understand how the framework makes everything easier for me? |
The idea is to follow the commit order and recreate the changes locally for yourself.
For example the first commit shows that a file named oUF_Layout.toc was created and some content added to it. You place this file in a folder named oUF_Layout, and this folder itself resides in your WoW addons folder (World of Warcraft\Interface\AddOns). This is the same for every addon and is required for it to be loaded by WoW. Every commit in Git holds a diff of the current state (the one introduced by the commit) of the repository compared to the previous one. So viewing a commit on Github shows you exactly what was added (green) and removed (red) and where. There is also a short commit message that explains the reason for it. This however means that you should follow the commits in order, if you want to learn and are a beginner. From the fifth commit onward you will start to see the layout in-game (or rather parts of it). Feel free to change the code and reload the interface to view your changes. Breaking it is part of learning how it works. Quote:
Quote:
Quote:
Quote:
|
Please keep in mind that creating a new oUF layout from scratch could be a lot of work, especially if you lack understanding of Lua and how addons in WoW work. It is easier to find a layout you like and try to alter its code to suit your needs.
However, if you want to learn, here are some links that might prove helpful: The Lua 5.1 Manual Getting started with writing addons Also install addons that catch and display Lua errors like !BugGrabber and BugSack. |
i saw them all, but none of them has Texture frames. My idea was to use Texture for the Units.
Like player are black only texture, target, focus etc depends on unitclassification, if rare then silver texture, if elite then gold. I did my whole interface with WA + many custom code. But very hard to understand how to implement this on native addon. The reason i want to start doing this, is huge lags causing because of WA.:( For some reason, i always get stuttering, if there are many ads spawning. |
You have to invest the time in it, because nobody will do it for you. If you don't like that or don't have the time, then just use a layout of your liking. There is no other way around it :)
|
Quote:
As for oUF.. It's a framework that you have to build off of. If you want your very own layout you're going to have to do exactly what Rainrider suggested and put time into learning how to either build your own from scratch or figure out how things are done by a layout created by someone else. |
Quote:
|
Don't be so quick to blame WoW itself for the reasoning you lag or run into fps issues. Just because people release addons or create WA strings doesn't mean they're flawless. I bet if you did a trial and error of loading WoW with 1 addon enabled each time you would find the culprit causing the issues. WA could very well be the offending addon due to once again, improper coding within WA strings.
|
Quote:
I just not understand how can it be laggy, if there are ZERO errors... |
Quote:
|
Quote:
|
If everyone got lag and stuttering there would be a lot more complaints on the forums and the game wouldn't be nearly as popular.
I would disable ALL addons and test from there. Some other info would help, what are you machine specs? What settings are you running at? Have you tried resetting your video settings in game to stock? |
I have tried to disable every aura, one by one, but still lags. Tried to disable the addons one by one. Doesen't help.
So i think it's WA (but what auras?) I have around 700 auras. In raid are ~80 enabled. My specs are just fine: i7 6700k @4.60 GTX 1080 16 GB RAM SSD |
No I mean literally all your addons not all your auras. I assume you're using more than a single addon. So press esc, click on addons and uncheck all of them.
and dude 700 auras? wtf. |
Quote:
But 700 are not at the same time enabled. Without any addons it work flawlessly. But disabling everything isn't a solution. |
My guess is doing your whole interface with WA is going to be the issue for sure. Wow man. I don't think that was the original intention of WA hehe. That seems a bit excessive. Well that was easy.
Now the hard part is going to be recreating what you need from your old interface to another addon either oUF as the framework and create your own layout. I would start by grabbing one layout that uses the oUF framework and start messing with it and learning how it works. That's what I did with mine. I started with oUF P3lim and oUF Lumen and I've basically created a whole new layout from using those as starter baseline. Just get one element/unit working and go from there. Out of curiosity could you post a screen shot of your UI? |
Quote:
I tried some weeks to create one frame, but i just not understand how to do it with or without oUF :( Here are screenshots: https://imgur.com/a/AvT2j https://imgur.com/a/3uiTo https://imgur.com/a/vnaGG https://imgur.com/a/xdd6t https://imgur.com/a/GiSGW https://imgur.com/a/lU8cs https://imgur.com/a/47pKe It has icons, locale flags, raid/group targeting count. HP bar changes the color, if there dispellable debuff on a player, like poison (green) disease (brown) etc... All frames are clickable. In group shows role icon. Party frames are set to alpha 0.6 if too far away. Else set on 1 |
Love the interface. You could reproduce most of that with just about any units addon though; without having to make your own layout in oUF.
Although if you like doing a bit of coding it's more fun with oUF and it will perform better in WoW that having to do it all in wa. Have you done any coding at all in any language? If not it's going to make it a bit harder for you to do a layout with oUF. Here is a basic screenshot of what I've done with my layout for oUF. All the bottom panels are frames created with basic lua with a basic texture applied to them. My minimal layout. |
unfortenately, i have never messed with any language.
|
Troubleshooting
This is a good list of steps for troubleshooting addons. Give it a look and see if anything can help you locate the source of your lag (unless it is 700 Weak Auras). Your whole UI is made from Weak Auras? <mind blown>
|
Quote:
I think i know what can be cause laggs. Many auras has the same code on init, like: local char local string_byte = string.byte local sub = sub local function chsize(char) if not char then return 0 elseif char > 240 then return 4 elseif char > 225 then return 3 elseif char > 192 then return 2 else return 1 end end function aura_env.custom_utf8sub(str, startChar, numChars) if not str then return "" end local startIndex = 1 while startChar > 1 do local char = string_byte(str, startIndex) startIndex = startIndex + chsize(char) startChar = startChar - 1 end local currentIndex = startIndex while numChars > 0 and currentIndex <= #str do local char = string_byte(str, currentIndex) currentIndex = currentIndex + chsize(char) numChars = numChars -1 end return str:sub(startIndex, currentIndex - 1) end function aura_env.utf8len(str) if not str then return 0 end local len = 0 local currIndex = 1 while currIndex <= #str do local char = string_byte(str, currIndex) currIndex = currIndex + chsize(char) len = len + 1 end return len end But normally it should be loaded only one time. Or for example if i have the same code for color box, that loads twice, like player and target. That can be the issue, but im not at 100% sure. |
You are using WA for **way** more than it was originally intended. You are putting tons of strain on WA, and your code is inefficient because you are working within the constraints of WA. This is why you are having performance problems.
You should find addons that do what you want (or write your own), rather than abusing WA. I understand that is the purpose for your thread here. If you need help with oUF, that is what this forum section is for. If you need help with learning how to write addons, there is the IRC channel and these forum sections. Be sure to check out the stickied threads. But let's get you away from WA for everything but what it's original purpose is. ;) |
I don't want to beat the dead horse but ye, I think you answered what your problem is when you use WA for way more than it was intended.
This kinda reminds me of this XKCD: https://xkcd.com/1172/ :D |
Is there any Discord channel for UI creating?
|
There is an irc mirror afaik but most people just hang out at irc.freenode.net#wowuidev
|
Quote:
i don't know why it's not working |
Works for me using HexChat. What client are you using?
|
Can some one show me please, how to anchor a texture to clickable panel (like making texture clickable)?
|
Quote:
Im disappointed...:( |
The reason they're not being very helpful in the manner you seek is bc that chat is not there for you to just ask for people to code this and that for you. They've directed you to oUF in hopes you would teach yourself how to create your own oUF layout and go from there.
|
Learn some basic lua and how to create your own addon first. It will help you understand what to do.
|
What has been said and get to look at someone else's code. Pick a simple addon and see how things are done.
This should help you out: https://us.battle.net/forums/en/wow/topic/20742244205 http://wowwiki.wikia.com/wiki/AddOn_...l/Introduction http://wowprogramming.com/ https://wow.gamepedia.com/World_of_Warcraft_API Then take a look at some addons, you can explore what Roth in his addons for instance: https://github.com/zorker/rothui/tree/master/wow7.0 |
If you've never done any lua nor made any addons yourself before, going straight into making your own oUF layout may be a bit over-ambitious. If you aren't able to understand the tutorial layout Rainrider linked you, you're probably better off starting by making more basic addons until you get a better grasp for it.
If you don't want to learn, then you'll probably be better served by using someone else's layout that they uploaded on here or on Curse (or any other UI addons; it doesn't have to be oUF.) A custom UI doesn't have to be self-made, if you're just wanting to replace all your WeakAuras. |
Or i just rent some coder :p
|
Quote:
|
If you hire someone, keep in mind that with the next expansion stuff might change and you might have to look for somebody to fix your layout again.
|
Hey guys, why my health color are not refreshing automatically if entering AFK?
local function UpdateHealthColor(health, unit, cur, max) health:RegisterEvent('PLAYER_FLAGS_CHANGED') local r, g, b, t -- local afk = UnitIsAFK(unit) if(health.disconnected and health.colorDisconnected or UnitIsDeadOrGhost(unit)) then health:SetValue(max) t = colors.disconnected elseif(health.colorTapping and not UnitPlayerControlled(unit) and UnitIsTapDenied(unit)) then t = colors.tapped elseif UnitIsAFK(unit) then r, g, b = 1, 0, 0 health:SetScript('OnEvent', UpdateHealthColor) elseif(health.colorSmooth) then r, g, b = health.__owner.ColorGradient(cur, max, unpack(colors.smooth)) else t = colors.health end if(t) then r, g, b = t[1], t[2], t[3] end if(b) then health:SetStatusBarColor(r, g, b) end end |
Quote:
Here is your code in ghostbin https://ghostbin.com/paste/ukhcu Maybe you need to run Health.PostUpdate = UpdateHealthColor? I don't member really just assuming atm. Going to look into it when I get home though for you. |
All times are GMT -6. The time now is 05:30 PM. |
vBulletin © 2024, Jelsoft Enterprises Ltd
© 2004 - 2022 MMOUI