Script Link Service. Link multiple scripts to a shared source

(I’d advise against this workflow, it was made to satisfy a feature request)

Script Link Service


Link multiple scripts together from a shared source. This is a partial replacement for LinkedSources, but it cant be used between games

Features

  • Automatic Push/Pull support for scripts
  • Saves between sessions
  • Update every script with the same Linker when you press Push

How to use

Write a script as you would any other, then press Push to make the first initial copy of the script, make sure to put your linker ID in here

image

In this example, I’m using this script
image

Next, copy paste the script as many times as you want (make sure to link every copy using Pull, I’m working on making this more ergonomic so dw)
image

Uh oh! We found multiple error. Got to fix that real quick


image

Previously, you would have to copy-paste the script about 20 times for a change to happen, and every time you changed something. With this, however, just press the Push button and your changes sync to every script with the same linker automatically

image

Hope you enjoy this :slight_smile:

6 Likes

I don’t really get it. What’s the point of this? Sorry if this is dumb, but I don’t really understand what exactly this does… Does it just link scripts into one? If so, how does it do that??? Sorry, I’m really confused lol

Roblox used to have a feature called LinkedSources. This allowed you to upload a script as a piece of code to Roblox, and have multiple scripts source from it, similar to how you would use require(id) nowadays.

This plugin attempts to (for the most part) reimplement that functionallity, minus the uploading bit, that happens all within Studio.

Hmm… I’ll do some research, this sounds really cool! Still can’t fully understand it, but it sounds nice.

Edit: Wait… Isn’t LinkedSource just to same thing as require, only for normal scripts? If so, this functionality is technically still in Roblox if you have a module that returns nothing but has a script in it.

Example (module):

print("Hello")
print("Edit this module and it will be modified everywhere it's used")
print("You can still upload scripts to Roblox (iirc)")

-- Code here.. --

return {}

Example (script):

require(0123456789)

(also, I DMed you something. Did you receive it? It’s about your Fusion plugin)

LinkedSources were removed because of packages. I dont like require(id). It’s bad and makes your code look bad since it’s a common injection method for many virus plugins.

Yeah that makes a lot of sense. Although from what I understand you can’t actually modify the script if a LinkedSource is set because it overrides the scripts Source? Am I misunderstanding something here? You wouldn’t really have a reason to look at the require(id) if you’re using it the same way as LinkedSources. Yeah, it would be inefficient…

Also, how does this “Script Link Service” imitate that?

When you press the Push button for a new linker, it silently creates a script that you cant see which holds the source of the script.

Pushing will update that internal script and then make every other script linked pull from it. The Pull is mostly for linking new scripts to a pre-existing internal source without updating it.

How does it hide the scripts? I don’t recall that being possible… Is it a special permission that plugins have access to?

Also, why does the plugin need so many scripts?
image

I feel like that’s a bit over the top… You don’t need an entire new script for “logError” and “logErrorNonFatal.” They’re the same thing. I feel this is wasting a little bit of performance because you have to require those scripts, and now they’re seperate?

Especially when you consider that the only difference in the script itself is an added

task.spawn(function(...)
		error(errorString:gsub("\n", "\n    "), 0)
	end, ...)

Could you not just add a boolean argument and then add an if statement? Wouldn’t that be more efficient?

1 Like

Nice plugin, it looks like you worked hard on it.

This is the problem I have with it though

Things like CollectionService and ModuleScripts exists.

@Shedletsky this is exactly what your feature request wanted?

Everything under the Fusion module is not actually part of the plugin author’s own codebase - it’s imported from my Fusion project, which is a UI framework. This is code that we maintain publicly over at our GitHub repository, so if you’d like to contribute to our codebase and make it better, please feel free to do so (after reading through our contribution guidelines and style guide, of course :slightly_smiling_face:)

In any case, I would be happy to accept the blame for any issues you point out in this section of their plugin - please don’t take this out on them. This plugin is not affiliated with our project, they are merely a user of our code.

3 Likes

Some people want to update all their scripts that contain the same thing all at once:

Although it might not be the best practice, it’s used by some. That’s why this is a resource. You might be thinking about script links and some other sync service that Roblox provides but that requires the hassle of exporting it and updating each script with it (just like the OP said).

Okay but why make resources to help developers do bad practices?

Instead make resources teaching developers how to use advanced tools instead of teaching them hack-arounds for problems from the stone age.

also interesting post from Shedletsky, I thought he would be more with the times. I guess he’s also stuck in the stone age

1 Like

I’ve stated that I’m actually against this workflow since it’s clunky.

I’ve made it because its something people want, for some unknown reason.

Of course, I’m open to criticism if its actually with the plugin itself, not the workflow that it helps satisfy.

1 Like

I can’t criticize the plugin, I haven’t used it. I’m sure it’s a well built plugin but I have no need for it.

What I don’t understand is why someone would want to solution to a problem that doesn’t exist.

If a circle solves your problem, don’t make a hack to solve the problem with a square, just use the circle.

That’s all, I’m not criticizing anyone I just don’t understand the point. :man_shrugging:

1 Like