1. #1

    Smack, a macro and keybind management addon

    I've made an addon to manage keybinds and macros.

    Instead of using wow's god awful excuse of a macro language, you use a nice, structured language that is both easier to use and more powerful.
    It also features cutting edge usability features such as a resizeable window.

    www.curseforge.com/wow/addons/smack


    (sorry, can't post links yet with this account on this clown show of a forum)


    [mod edit - made it a link for you.]
    Last edited by Tziva; 2021-06-05 at 05:22 AM.

  2. #2
    Oh wow, just from the screenshots it looks wonderful.

    I'll give it a try and see if it clicks, but here have a pre-emptive "great work"! (Ok, it IS a great work anyway, even if I end up not liking or using it)
    Once upon a time... the end. Next time, try twice upon a time.

  3. #3

  4. #4
    Quote Originally Posted by Kanegasi View Post
    Links:
    Thank you!

  5. #5
    Blademaster Chibitoo's Avatar
    15+ Year Old Account
    Join Date
    Jun 2007
    Location
    Toronto, ON, CA
    Posts
    36
    Looks very interesting, thanks.

  6. #6
    I dislike wow addons that try to “fix” the lua language with their own system like weakauras because it makes me dependent on the addon author to keep updating his addon for each new patch. If the project is abandoned, then ive got a lot of useless code that i need to redo to the base lua. While in theory updating the lua with this new addon sounds great, i would never use it. Its simply impossible for you to guarantee that smack will keep getting updates.
    TO FIX WOW:1. smaller server sizes & server-only LFG awarding satchels, so elite players help others. 2. "helper builds" with loom powers - talent trees so elite players cast buffs on low level players XP gain, HP/mana, regen, damage, etc. 3. "helper ilvl" scoring how much you help others. 4. observer games like in SC to watch/chat (like twitch but with MORE DETAILS & inside the wow UI) 5. guild leagues to compete with rival guilds for progression (with observer mode).6. jackpot world mobs.

  7. #7
    I promise you that I will maintain Smack with as much love and care as Blizzard does for WoW.
    Last edited by ClownPrincess; 2021-06-18 at 11:34 PM.

  8. #8
    The Unstoppable Force Bakis's Avatar
    15+ Year Old Account
    Join Date
    Apr 2008
    Location
    Sweden
    Posts
    24,644
    Just judging from the screenshot I recognize the general coding syntax and I love it.
    Debugger too? j/k
    It looks awesome.
    But soon after Mr Xi secured a third term, Apple released a new version of the feature in China, limiting its scope. Now Chinese users of iPhones and other Apple devices are restricted to a 10-minute window when receiving files from people who are not listed as a contact. After 10 minutes, users can only receive files from contacts.
    Apple did not explain why the update was first introduced in China, but over the years, the tech giant has been criticised for appeasing Beijing.

  9. #9
    Looks awesome.

    Will this work in TBC:Classic?

  10. #10
    Quote Originally Posted by ClownPrincess View Post
    I promise you that I will maintain Smack with as much love and care as Blizzard does for WoW.
    Oh no!

    Looks good though. Actually appears to be from this century, which is one up on the awful editor included with the game...

  11. #11
    Is the addon just a translation addon? From LUA to whatever it is now (looks like simplified C#). Or does the addon do more than just the translation? Is whatever you code in there saved as a macro?

  12. #12
    You know

    For someone who doesn't speak LUA or c# or really anything that has to do with development

    I would wish for someone to create an addon that has a simple yet effective plain language UI and the addon translates that into a usable macro.

    Like:

    I want to:
    * Use trinket
    ** Then
    * Use pot
    ** Then
    * Use racial
    (**Then
    * Use item X
    **Or
    *Use item Y
    ....)

    Etc. Something along those lines. All just clickable options from a list of things I can combine.

    My personal problem is not that the current macro UI is archaic. It's that I don't even know what it can do and what kind of automatism is even possible to create.

    The most complex macro I have is a mouse over target...

    Do you have an import feature? If so, maybe your addon could become wago relevant. If you don't yet have it, build it asap so that it becomes wago relevant. You could go for being the macro equivalent of weak auras. Then I wouldn't even need to know how to code them myself, I'd just wago from the community
    Last edited by Tsarez; 2021-06-21 at 06:17 PM.

  13. #13
    The Unstoppable Force Bakis's Avatar
    15+ Year Old Account
    Join Date
    Apr 2008
    Location
    Sweden
    Posts
    24,644
    Quote Originally Posted by Tsarez View Post
    You know

    For someone who doesn't speak LUA or c# or really anything that has to do with development

    I would wish for someone to create an addon that has a simple yet effective plain language UI and the addon translates that into a usable macro.
    ...
    That should be doable as a simple /Use <x> (repeat) macro in default macro menue as long as you keep GCD and special rules like not 2*On Use trinkets at the same time in check.
    But soon after Mr Xi secured a third term, Apple released a new version of the feature in China, limiting its scope. Now Chinese users of iPhones and other Apple devices are restricted to a 10-minute window when receiving files from people who are not listed as a contact. After 10 minutes, users can only receive files from contacts.
    Apple did not explain why the update was first introduced in China, but over the years, the tech giant has been criticised for appeasing Beijing.

  14. #14
    Quote Originally Posted by Maell View Post
    Is the addon just a translation addon? From LUA to whatever it is now (looks like simplified C#). Or does the addon do more than just the translation? Is whatever you code in there saved as a macro?
    It compiles the macro into lua code, which is used as a wrapper for a secure action button's OnClick action. The code sets the command to execute for that specific click on the action button into the macrotext attribute.

    When casting consecutive spells that aren't on the GCD (or explicitely using the suspend statement), it generates a state machine (similar to how you'd implement stackless coroutines in a compiler), where each execution of the macro continues after it last left off. You can also have while loops to loop through just part of a macro, as long every execution of the while loop is guaranteed to suspend.

    An interesting side effect of this approach is that for a lot of conditionals, they are evaluated by directly calling lua functions from inside of the action button secure sandbox, and this avoid some problems that standard macro conditionals have. For instance, LShift/Rshift and the likes work properly in Smack, unlike in regular wow macros where they have been broken for a while.

    Quote Originally Posted by Tsarez View Post
    You know

    For someone who doesn't speak LUA or c# or really anything that has to do with development

    I would wish for someone to create an addon that has a simple yet effective plain language UI and the addon translates that into a usable macro.

    Like:

    I want to:
    * Use trinket
    ** Then
    * Use pot
    ** Then
    * Use racial
    (**Then
    * Use item X
    **Or
    *Use item Y
    ....)

    Etc. Something along those lines. All just clickable options from a list of things I can combine.
    I tried to get somewhat close to this type of workflow by having contextual completion that lists everything (actions, conditionals, operators) that you can use at the current cursor position, and integrated documentation that explains what they do.

    But I'm not fond of purely graphical languages because either you end up having to simplify things and impose a rigid structure that doesn't have a lot of flexibility, or you end up just with a language where each keyword is replaced by a dropdown and this doesn't seem to have a lot of value compared to writing plain text with a completion system.
    Last edited by ClownPrincess; 2021-06-24 at 02:17 PM.

  15. #15
    If I comeback to retail when it looks interesting (9.1 doesn't so still waiting), I'll happily give this addon a download. I'm an idiot when it comes to macro writing so I often do a lot of copying, understand what I copied, and tweak it for my own use. Looking at the screenshots, I'm loving the color-coded and spaced commands. In game macros can look confusing when its all in a squished format IMO.

    If smack ever does work for tbc classic, I'll def give it a go.
    The wise wolf who's pride is her wisdom isn't so sharp as drunk.

  16. #16
    This looks really cool! Does it allow anything not possible in standard WoW macros, for example a castsequence that continues on failure? Can it do "IF ability A is usable use that, ELSE use ability B?"

    GnomeSequencer does all that stuff but its UI and configuration is pretty horrific.

    Can it do "IF target health <X% THEN $execute_ability", "IF target has dispellable debuff THEN $dispel_ability", or "IF target is casting_interruptable THEN $interrupt_ability"?
    Last edited by Schizoide; 2021-07-06 at 03:53 PM.

  17. #17
    Quote Originally Posted by Schizoide View Post
    This looks really cool! Does it allow anything not possible in standard WoW macros, for example a castsequence that continues on failure?
    The default behavior, when you cast several spells one after another that are on the GCD is that it works like a cast sequence that advances to the next spell with each invocation of the macro, even if the spell cast failed.

    You can also force the macro to pause until next execution explicitly by using the "suspend" statement. Points at which the macro execution will halt until it's called next (aka suspension points) are displayed as horizontal lines in the macro (the goal being that you know what the macro will do by looking at it rather than by trial and error, especially since blizzard can't even be arsed to indicate in tooltips whether a given spell is on the GCD)

    When using this type of "pseudo cast sequences", you can still have branching using if statements in the middle, or wrap such a sequence into a loop using a while statement. There's no limitation (other than yet undiscovered bugs) to how complex the execution flow and branching might be, except that if you have a loop it needs to be written in such a way that every possible execution path through the loop body will hit at least one suspension point.

    You can probably create macros as complex as gnome sequencer can do.

    Can it do "IF ability A is usable use that, ELSE use ability B?"
    Yes. If you group up several cast statements inside of a "either" block, it overrides the behavior described above and instead works exactly as in regular macros when you have several consecutive /cast of spells on the GCD: it will only cast the first one that can be cast among them and ignore the rest.

    Can it do "IF target health <X% THEN $execute_ability", "IF target has dispellable debuff THEN $dispel_ability", or "IF target is casting_interruptable THEN $interrupt_ability"?
    As a general rule, if a regular macro can't test for some condition, smack can't test that condition either while in combat.

    It would be possible to implement those conditions, but they would only update when out of combat. They could still be useful for QoL, M6 does offer this type of extended conditional for that purpose (with the same limitations i outlined here).

    If smack ever does work for tbc classic, I'll def give it a go.
    I have no plan to port it to tbc classic until I play that, and that won't happen until they open the isle of quel'danas as my tbc nostalgia is only about ganking people there.
    Last edited by ClownPrincess; 2021-07-08 at 01:57 PM.

  18. #18
    I can't really think of any scenario where testing for those 3 conditions I mentioned would be particularly useful out of combat, but I suppose options are always good.

    Thanks, I'll definitely give it a shot tonight! Great work.

  19. #19
    Quote Originally Posted by Schizoide View Post
    I can't really think of any scenario where testing for those 3 conditions I mentioned would be particularly useful out of combat, but I suppose options are always good.
    I was thinking for things like as part of an out of combat healing macro, but yeah, it seems a pretty niche use case.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •