I know of _G and shared, but objects like these don’t replicate over the server-client boundary.
However, it is technically something I could use, but is it really a good idea for production?
The reason I want this is so for example I can get an instance of a custom gun and all of its methods for example, and fire its methods from that foreign script. If there really is no other way of referring to these objects other the _G, then I am going to have to use that for production.
You might be shooting yourself in the foot by not utilizing RemoteFunctions, RemoteEvents, and ModuleScripts. There’s too many “uncertainties” with using _G/shared in wait times and replication. You probably want full control over your environment and how its runtime is.
Is there a particular reason you’re avoiding using those more tried-and-true methods? The OOP shouldn’t really be the factor and the implementation of these objects can certainly utilize remote listeners.