If you're already considering performance, you might want to:
1) Loop from 1 to GetNumGroupMembers(), thus preventing you from having to use nil handling code.
2) Not perform this many string concatenations for each unit you parse. Consider building a table of strings you want to display (names[i] .. ": " ..stacks), then using table.concat(t,"\n") to merge them together. table.concat is implemented in C and performs far better than repeated string concatenation (which creates a copy of the original string, then appends the second string, for each operation).
Thx for posting these!
Here's the latest 'revision':
Feel free to scrutinizeCode:function() local names = {} local stacks = {} local info = {} local members = GetNumGroupMembers(); local raidSize; if members > 25 then raidSize = 40; elseif members > 10 then raidSize = 25; else raidSize = 10; end for i = 1,raidSize,1 do local name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId, unitName, unitClass, col, color, r, g, b, r2, g2, b2 unitName = select(1,GetRaidRosterInfo(i)) if unitName ~= nil then unitClass = select(6,GetRaidRosterInfo(i)); col = RAID_CLASS_COLORS[unitClass]; if col then color = string.sub(col.colorStr, 3, 8) else color = "646464" end names[i] = string.format("|cff%s%s", color, unitName) else r,g,b = 100,100,100 unitName = "No Player" unitClass = nil names[i] = string.format("|cff%02x%02x%02x%s", r, g, b, unitName) end if unitName ~= "No Player" then name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId = UnitDebuff(unitName,"Shadowed Soul") end if count ~= nil then if count < 6 then r2,g2,b2 = 0,255,0 elseif count < 11 then r2,g2,b2 = 255,266,0 elseif count < 16 then r2,g2,b2 = 255,128,0 else r2,g2,b2 = 255,0,0 end stacks[i] = string.format("|cff%02x%02x%02x%d", r2, g2, b2, count) else r2,g2,b2 = 15,150,190 count = 0 stacks[i] = string.format("|cff%02x%02x%02x%d", r2, g2, b2, count) end info[i] = names[i] .. ": " .. stacks[i]; if unitName ~= "No Player" then name, rank, icon, count, debuffType, duration, expirationTime, unitCaster, isStealable, shouldConsolidate, spellId = UnitDebuff(unitName, "Soul Fragment") if name then info[i] = info[i].." |cffFF0000(Soul Fragment)" end end end return "|cffFF00FFShadowed Soul:\n\n"..table.concat(info, "\n") end
Last edited by mmoccff0c323bf; 2013-05-09 at 03:44 PM.
If you guys don't mind, can you post the export strings as well. This LUA stuff confuses me lol.
Just get Grid
Seeing this thread was similar to my question, posting here. Is there a way to flash text beyond a certain threshold? Say, less than 7 seconds remaining on a buff, etc?
Secondly: Is it possible to have a dynamic group grow up to five horizontally, and then repeat/move down a row?
Essentially I'm playing with tracking my buffs via dynamic group, but when many things are active, it ends up being a long list of icons with timers.
Last edited by Chult; 2013-05-10 at 01:01 AM.
Okay, making multiple groups is NP. And using presets, I can make them flash. However, I cannot assign a less than 7 second trigger to the flash. When using custom animations, flash isn't even a choice. Any advice?
I'm assuming I'll have to put in some LUA to make them do this only at a certain point of less, however my LUA knowledge is pretty limited.
Last edited by Chult; 2013-05-10 at 02:07 AM.
Well I do have an idea that you could try:
Has 3 different components:Code:dG0nHaqjLQKgfP0PifRIuvVsjyweLBPuzxqu(fjr1WuuhdrltP8mfPPruDnL02ueFdcghjPZbHwhjrmpsI09qPuDqLOfkQ8qquteLcxeeSre0hvQsnsLQiNeeALKQmtLQWnrPODQs)eIQHQuvlfe5Punvr5QOukBvPkXxrPK1Quf1CrPAVs)fKgmQomHfJqpgftMixMYMrjFMeJwu1PH0RvcnBvCBsLDRWVbgoOwUWZrA6Q66ISDscFhImEe48KuRNKOSFOUKnRUOz9RtRtIm5idbKHyDD1LQl1S6gbWIHKj1C1P2H1(a0XxphYZYqoBUhqGWS6cjj0hfmehOFGQOybTz9RhMckyKPg2QReGeC9rsxwGQOybTxY6hGqQz1dWXAwDDPZJ2S(97xhvQEMr)(1zAwVKnREIAbu19oxprTakb9oxNbCarZ6LSeQ62Kv5BiI4S8PRZRRiuw7wN270sOQBtNjNryDv(0PKiozTS2ToTFD1iNflQ99Ut(CDwGWucqAibzWbenRxYEj7DRxYEN2lzVY7LSFDjJk(uiElNGzrLaKgsLyDQqNLze8PWAU6efmlQeG0qcYGdiAwVK9oJS1E36DgzR9oT3zKT2R8ENr2A)6FGQOyrZQtHTZbIs13MSHic1binq(4OU5QddqYIxnS17C9e1GcdqYIxnS1C1zs0hOdAEujR(JQZKQNgMkSXxxKEqDPuiEuWO(A9e1GsHTZ5k0znxDtf24RVK5rbdmNTrfepw9e1GcBbJnEyasw0C1tudkmajlkX6jQbLcBNdeLAU6uy7CUcDwVBt2qeH6jQbnnq)MR(qOZOnRxY67dqYcmNTaHKkbZ98O2rQFDylySXddqYI6Qoxh2cgB8WaKSaka2cXdI6Qu2E)6efmlQeG0qc5SyrTV3T6b4fpky07CDXavN4rbJMvN(I4BwDgWbeqQeQ6esvNSov(S81PtKJGQL1U116IdCErMAyRotI(aD1zahqKReQkciUUnzLCv(KneLpfXYA3606mGdi27s46KvYveMmpVHicYrq(CzTBvEDXboVGW0GPEyFkgyoR0G5rbdTWbqjmkvgMtFr8YWCj78cny9WCmhZX8W(umWC6lIhZxaZ1chaLWOumxFmxYoVqdwpBivprnOIdCErZvprnOmGdikX6WHrTVUsaqQU4aNx07CDkJ4yQ7LSU6ENRtqVZ1LsH4rbJ6R1zahqKPg2Qt)qGQK)Hm4aI6mGdiimnyQh2NIbMZknyEuWqlCaucJsLH5bPmmxHugMtKugMliLH5XMmmxztgMtCtgMl20G1dZX8W(umW8GeZxaZ1chaLWOumxFmxBSH57W8GuJgzyUcjMVaMRfoakHrPyU(yUwLnmFhMRqQrJmmNijMVaMRfoakHrPyU(yUwIBy(omNiPgnYWCbjMVaMRfoakHrPyU(yUwXgMVdZfKA0G1Zgsy9QhGx8wVZ1PmIJrqVK1zahqSSxY(11jqhnRod4aci1lzDPuiEuWO(wDXboVitnSvppQKvNbCarUEjRZaoGyV7LSU4aNxqyAWupSpfdmNvAW8OGHwny9WCmpSpfdmFgRNnKW6vprnOIdCErZvprnOmGdikX6IdCErVZ1PmIJrqVK1v37CDgWbezQHT60peOk5FidoGOod4aIL9swNbCabHPbt9W(umWCwPbZJcgAHdGsyuQmmpiLH5kKYWCIKYWCbPmmp2KH5kBYWCIBYWCXMgSEyoMJ5yEyFkgyEqI5lG5AHdGsyukMRpMRn2W8DyEqQrJmmxHeZxaZ1chaLWOumxFmxRYgMVdZvi1OrgMtKeZxaZ1chaLWOumxFmxlXnmFhMtKuJgzyUGeZxaZ1chaLWOumxFmxRydZ3H5csnAW6zdjSE1dWlER356ugXXu3lzDc6DUFDwOduA(MvhomQ91zjKS(9RlyEuWG2S60xeFZQlbGQCaivI1Laqzs0hORe73VEEdvj)3R856b4fV1C1paHuZQNOguMJGsBU6b4ynRUU05rBw)(1tud6WuHfLyDMJGsBwDk6q5y13hsqecEw)(1LqPmH9g0a8Ihfm6DUoQu9mJ(yU2CjwSW8emMJKkhZFuDwOPorbZIkbinKYmc(uy1Zmc(uyu2Dy7CwY8OQq8OGbYvHfhHAk7qG5GctnOEAuxcLcFeQ9xWSiT(EfUolqykbinKYmc(uy1H44TGLGXyFPKeyqzNTmXIltHGY((aKSyzkeu20KqfSVmfck7ltHys9rsxwGQOybTxY6eGCwSO237oYveq2ADDOraIsSolW4DuvM1l5K6HPGcgzQHT6OmGrDIhBiXMajR(s2GnQloW5f9swpn(avrXIMvprnOuy7CUcDwZvpnq)6WhHAlQNOg00a9BU6jQbfgGKfVAyReRtHTZ5k0z9Unzdre6xNjaWqv37mYKtw)nc(uy1H44TGLGXyFPKeyqzNTmXIltHGY((aKSyzkeu20KqfSVmfck7ltHysDgGo4WO0sSUqsc9rbdXb6hOkkwqBw)6iHk957v(CDjJk(uiEJqqykbinKkX6Ga1gV4rbJ67jKdjiUNr(nB5EafI39ceGKdH6mbagkb9oJm5K1PVGzr6(a0XxhYq4Mbbiv)ncEidoGOz9s27CVt7DUF)E3Aw9e1cOQ7DUEIAbuc6DUod4aIM1lzju1TjRY3qeXz5txNxxrOS2ToT3PLqv3MotoJW6Q8PtjrCYAzTBDA)6sOu4JqDMrWxhbkMFmwpMtZJAhP6PXhOkkw0S6jQbLcBNZvOZAU6uy7CUcDwVKiuprnOPb63C1tudkmajlE1Wwjwpnq)6WhHAl6xNfimLaKgsqgCarZ6LSxYE36LS3P9s2R8Ej7xxYOIpfI3YjywujaPHujwNk0zzgbFkSMRUG5rbdAZQtFr8nRUeaQYbGujwxcaLjrFGUsSF)6VrWdzWbenRxYEj7DRekFDJCBYSQZBtrareqCRS2ToT3PLWjYNmfreNNxNkFEB6kIL1U1P9kVxY(1P2H1(a0XxhYq4Mbbiv)dufflAw9e1GKPR5QtbPGXsd0Vo8rO2I6uqkyS6lPOd0HvNcBNdeLQVnzdreQdBbJnEyaswafaBH4brDvkBVEIAqHbizrjwpmDih2cXdI6Qu2EDkSDoxHoR((aKSaZzlqiPsWCppQDKQddqYIxnS17C9HqNrBwVK13hGKfyoBbcjvcM75rTJu)6jQbLcBNZvOZAU6jQbvYOFjwprnOPb63C1tudkmajlE1WwZvNjrFGoO5rLS6pQotQEIAqPGuWynxDPuiEuWO(ADAIOPcB8EIflucQdDjBdslHUC)93dicb2OEAyQWgF9hvNjv3uHn(6qgOJO4X89aOuprnOWwWyJhgGKfnxDrkezQHT65yBesy9e1GsHTZbIsnx9e1GsbPGXsd0V5QNOgujJ(Pb6xI1dtxDeQdBbJnEyaswux156jQbvKcrMAyR56xxmq1jEuWOz1PVi(MvNbCabKkHQoHu1jRtLplFD6e5iOAzTBDTU4aNxKPg2QZKOpqxDgWbe5kHQIaIRBtwjxLpzdr5trSS2ToTod4aI9UeUozLCfHjZZBiIGCeKpxw7wLxxCGZlimnyQh2NIbMZknyEuWqlCaucJsLH50xeVmmxYoVqdwpmhZXCmpSpfdmN(I4X8fWCTWbqjmkfZ1hZLSZl0G1Zgs1tudQ4aNx0C1zahqSSxY6jQbLbCarjwxCGZl6DUoLrCm19swxDVZ1jO356mGdiYudB1PFiqvY)qgCarDPuiEuWO(ADgWbeeMgm1d7tXaZzLgmpkyOfoakHrPYW8GugMRqkdZjskdZfKYW8ytgMRSjdZjUjdZfBAW6H5yEyFkgyEqI5lG5AHdGsyukMRpMRn2W8DyEqQrJmmxHeZxaZ1chaLWOumxFmxRYgMVdZvi1OrgMtKeZxaZ1chaLWOumxFmxlXnmFhMtKuJgzyUGeZxaZ1chaLWOumxFmxRydZ3H5csnAW6zdjSE1dWlER356ugXXiOxY6WHrTVUsaqQFDDc0rZQZaoGas9swxCGZlYudB1ZJkz1zahqKRxY6mGdi27EjRloW5feMgm1d7tXaZzLgmpkyOvdwpmhZd7tXaZNX6zdjSE1tudQ4aNx0C1F1WwD4WO2xNYioM6EjRdhg1(6IdCEX(Pd1QloW5f9oxNbCaXYEjRRU356mGdiYudB1PFiqvY)qgCarDc6DUEIAqzahquI1zahqqyAWupSpfdmNvAW8OGHw4aOegLkdZdszyUcPmmNiPmmxqkdZJnzyUYMmmN4MmmxSPbRhMJ5yoMh2NIbMhKy(cyUw4aOegLI56J5AJnmFhMhKA0idZviX8fWCTWbqjmkfZ1hZ1QSH57WCfsnAKH5ejX8fWCTWbqjmkfZ1hZ1sCdZ3H5ej1OrgMliX8fWCTWbqjmkfZ1hZ1k2W8DyUGuJgSE2qcRx9a8I36DUoLrCmc6LSUukepkyuFRFDwOduA(MvhomQ91zjKS(9RlzuXNcXBecctjaPHujwxYOIpfI3kX6sOuMWEdAaEXJcg9oxNjaWqv37mYKtwNOGzrLaKgsqgCarZ6LS3zKT27wVZiBT3P9oJS1EL37mYw7xpVHQK)lHQIW6eerC62686kciUUvw7KJy9a8I3AU6hGqQz1dWXAwDDPZJ2S(9RNOg0HPclkX6mhbL2S6u0HYXQVpKGie8S66sNhTz13hsqecEwZ1VF)6JKUSavrXcAVK1ja5SyrTVeUt15z5YLRkIYxjryYkctkRDYxRtuWSOsasdPmJGpfw9mJGpfgLDh2oNLmpQkepkyGCvyXrOMYoeyoOWudQNg1LqPWhHA)fmlsRVxzQZceMsasdPmJGpfwDioElyjym2xkjbgu2zltS4YuiOSVpajlwMcbLnnjub7ltHGY(YuiMuNfy8oQkZ6LCsDugWO5QRdncquI1fh48IEjRhMckyKPg2Q)gbFD1iNflQ9LWvseLVIGQBtMrKu1ne2kRDYxRt8ydj2eiz1xYgSrDuP6zg9XCTiqX8W0jqhOdfmhjvoMZ6iO51uN(OmlQMnsH4rbJsSUi9GMREaEXJcg9ox)nc(uy1H44TGLGXyFPKeyqzNTmXIltHGY((aKSyzkeu20KqfSVmfck7ltHysD6lywKczW4fOdD24RdXRdr2ac1vzaGUENRZa0bhgLwI1fssOpkyioq)avrXcAZ6xhjuPpFjeb5RiqUTobXPtrCwv5Qww7KpPo6qfwqTsSoiqTXlEuWO(Ec5qcI7zKFZwUhqH4DVabi5qOotaGHsqVZitozD6lywKUpaD81HmeUzqas1jkywujaPHeYzXIAFVB97DAZQNOwavDVZ1tulGsqVZ1zahq0SEjlHQUnzv(gIiolF6686kcL1U1P9oTeQ620zYzewxLpDkjItwlRDRt7xpn(avrXIMvprnOuy7CUcDwZvNcBNZvOZ6DBYgIiuprnOPb63C1tudkmajlE1Wwjwpnq)6WhHAl6xNfimLaKgsqgCarZ6LSxYE36LS3P9s2R8Ej7xxYOIpfI3YjywujaPHujwNk0zzgbFkSMRUG5rbdAZQtFr8nRUeaQYbGujwxcaLjrFGUsSF)6FGQOyrZQtbPGXsd0Vo8rO2I6jQbfgGKfLyDyasw8QHTENRdBbJnEyaswafaBH4brDvkBVotI(aDqZJkz1FuDMuDPuiEuWO(K6jQbfgGKfVAyR5QtHTZ5k0z13hGKfyoBbcjvcM75rTJu9xnSvN(IprRlsHitnSvphBJqcRNgMkSXxxKEqDAIOPcB8EIflucQdDjBdslHUC)93dicb2OUPcB81HmaCKainW89dGsyukMR1HTZrt9e1GsbPGXkX6jQbf2cgB8WaKSO5QNOgukSDoxHoR5QNOgukifmwAG(nx9e1Gkz0pnq)sSEIAqtd0V5QdBbJnEyaswux156jQbvKcrMAyR56x)ncEidoGOz9U17CVt7DUFDjuktyVbnaV4rbJENRlgO6epky0S60xeFZQZaoGasLqvNqQ6K1PYNLVoDICeuTS2TUwxCGZlYudB1zs0hORod4aIL9swNbCaXExcxNSsUIWK55nerqocYNlRDRYRloW5feMgm1d7tXaZzLgmpkyOfoakHrPYWC6lIxgMlzNxObRhMJ5yoMh2NIbMtFr8y(cyUw4aOegLI56J5s25fAW6zdP6jQbvCGZlAU6VAyRotI(aD1zahqKReQkciUUnzLCv(KneLpfXYA3606WHrTVUsaqQU4aNx07CDkJ4ye0lzD19oxNGENRtzehtDVK1zahqKPg2Qt)qGQK)Hm4aI6mGdiimnyQh2NIbMZknyEuWqlCaucJsLH5bPmmxHugMtKugMliLH5XMmmxztgMtCtgMl20G1dZX8W(umW8GeZxaZ1chaLWOumxFmxBSH57W8GuJgzyUcjMVaMRfoakHrPyU(yUwLnmFhMRqQrJmmNijMVaMRfoakHrPyU(yUwIBy(omNiPgnYWCbjMVaMRfoakHrPyU(yUwXgMVdZfKA0G1Zgsy9QhGx8wVZ1LsH4rbJ6tQNOgugWbeLy)66eOJMvNbCabK6LSoLrCmc6LSU4aNxKPg2QNhvYQZaoGixVK1zahqS39swxCGZlimnyQh2NIbMZknyEuWqRgSEyoMh2NIbMpJ1Zgsy9QNOguXboVO5Q)QHT6mj6d0vNYioM6EjRloW5f9oxNbCaXYEjRRU356e07C9e1GYaoGOeRZaoGGW0GPEyFkgyoR0G5rbdTWbqjmkvgMhKYWCfszyorszyUGugMhBYWCLnzyoXnzyUytdwpmhZXCmpSpfdmpiX8fWCTWbqjmkfZ1hZ1gBy(ompi1OrgMRqI5lG5AHdGsyukMRpMRvzdZ3H5kKA0idZjsI5lG5AHdGsyukMRpMRL4gMVdZjsQrJmmxqI5lG5AHdGsyukMRpMRvSH57WCbPgny9SHewV6b4fV17CDgWbezQHT60peOk5FidoGOUukepkyuFs)6SqhO08nRoCyu7RZsiz97xNjaWqv37mYKtwpVHQK)7v(C9a8I3AU6hGqQz1tudkZrqPnx9aCSMvxx68OnRF)6jQbDyQWIsSoZrqPnRofDOCS67djicbpRF)6sgv8Pq8gHGWucqAivI1jkywujaPHeKbhq0SEj7DgzR9U17mYw7DAVZiBTx59oJS1(1jkywujaPHuMrWNcREMrWNcJYUdBNZsMhvfIhfmqUkS4iutzhcmhuyQb1tJ6sOu4JqT)cMfP13RW1zbctjaPHuMrWNcRoehVfSemg7lLKadk7SLjwCzkeu23hGKfltHGYMMeQG9LPqqzFzketQps6YcufflO9swNaKZIf1(s4Uvvjxjru(kIBimfXPBQww7KVwxhAeGOeRZcmEhvLz9soPEykOGrMAyRokdyuN4XgsSjqYQVKnyJ6IdCErVK1vJCwSO2xcryI8nvNkNeHPtufrvxNuw7KJqDuP6zg9XCTqMnWCKu5yEgQol0upaV4rbJENR)gbFkS6qC8wWsWySVuscmOSZwMyXLPqqzFFaswSmfckBAsOc2xMcbL9LPqmPodqhCyuAjwxijH(OGH4a9dufflOnRFDKqL(89kFUoiqTXlEuWO(Ec5qcI7zKFZwUhqH4DVabi5qOotaGHsqVZitozD6lywKUpaD81HmeUzqas1jkywujaPHeYzXIAFVB97xxf9skFEUFla
- Buff (on you) with a timer
- Flashing text when 7s remaining on buff
- Timer that fades in as CD is nearing expiration (requires some modification in the animation tab to work properly with whatever CD you're tracking -- to change it go to Animation and change the Duration in both Start/Finish to the total duration of the CD in seconds)
From what I understand that's what you're looking for.
Nah, I don't need a seperate text saying "7 seconds left on X". I'm just looking for a regular buff icon for a spell with duration text which flashes when low.
Conversely, the icon flashing when low could work too. Just a visual queue to refresh buffs/debuffs.
Last edited by Chult; 2013-05-10 at 05:15 AM.
Yes, but I want to see the full duration of the ability, and the same text flash when it breaks the 7 second remaining threshold. Just icon with time, which flashes when low.
Anyway, I guess it's grossly inefficient to make two weakauras for every single ability I track just to do this. Thanks for your help anyway.