I created Socket because I wanted a quick way to write plugins, without filling the plugin toolbar with unintelligible buttons. This led me down the path of creating a macro manager which is:
Easy to use
Quick to create + run your own macros, defined by ModuleScripts
Pretty to look at!
Useable with Team Create
What is Socket? (3m32s)
Please check out the Documentation for a full breakdown of Socket, but here are some of it’s strengths:
Good organisation, with a widget akin to the explorer window
Plenty of customisation (text color, icons…)
Input fields to pass data into your macros in real time
Uses ModuleScripts
Ergonomic interface with search functionality and 1-click macro running
Server/Client run options when playtesting
Built with collaboration in mind
Free <3
What can Socket do? (30s)
Installation (1m38s)
Socket Deep(ish) Dive (18m41s)
Changelog
v1.1.0
Added Local Macros (see IsLocalMacro), which allows replication of macros across multiple places via the plugin itself.
Added LocalMacroColor setting
Improved logic behind the settings system to be more scalable + easier to add new settings of different types
Is there a workaround for the fact that we are we unable to yield within the macro function? I would like to run a command to generate a large map with terrain, and need waits between generating chunks etc.
Also might I suggest (a new setting) to only activate the plugin on startup if the “SocketPlugin” folder was already added to ServerStorage? This way it won’t get added to every place I join if it was previously open.
Is there a workaround for the fact that we are we unable to yield within the macro function? I would like to run a command to generate a large map with terrain, and need waits between generating chunks etc.
Great question! Yes this is possible using the task library
22:35:03.944 This - Studio
22:35:04.959 Function - Studio
22:35:05.961 Yields! - Studio
Edit: Bit less nesting version:
local function macroFunction(macro: PopulatedMacroDefinition, plugin: Plugin)
print("This")
task.wait(1)
print("Function")
task.wait(1)
print("Yields!")
end
local macroDefinition: MacroDefinition = {
Name = "Macro",
Group = "Macros",
Icon = "💡",
Description = "Macro Description",
Function = function(...)
task.defer(macroFunction, ...)
end,
}
.
Also might I suggest (a new setting) to only activate the plugin on startup if the “SocketPlugin” folder was already added to ServerStorage? This way it won’t get added to every place I join if it was previously open.
This is a great suggestion! I was able to quickly add this as default behaviour (no setting to toggle this). See the changelog for v1.2.4: Changelog | Socket
You’ll just need to update your plugin to get these changes thank you for your comment!
Great plugin, however, could you consider using a more mature font that fits in with the studio style a little more? Comic sans looks a little out of place
This is a really nice and useful plugin. I love the amount of customization just for the UI itself, and obviously the infinite possibilities of macros.
There are some small things that I would like to be changed though.
Why do the default macros get added back after removing them when you open the widget? I removed the ones I dont need, only for them to come back a second later.
Nevermind, there is a setting for that already.
Maybe hide the “Fields” tab if there arent any fields for that macro? Same thing with the “Keybind” tab if its blank, since there isnt a way to set a keybind from the UI as far as I can tell.
Also, got this error after trying to insert an asset with the default macro:
Not sure what happened there, since there is automatic validation
This is a nice UX suggestion. It’s disabled by default, but there is now a setting you can enable that will hide “unused” fields and keybind on the UI. See: SocketSettings | Socket
Always really appreciate error reports thank you. This error was thrown because of a typo for an error message. The error message in question was that the thread was being yielded in the macro function - see: Socket | A Macro Manager Plugin - #11 by JoelBrd