1: I cant have two muzzlepoints.
2: That wont work. I cant control the image states from a function, thusly I cannot change the number of ejected shells depending on how many times the trigger has been clicked
3: Possible, but would make my current system entirely useless.
So what you're saying is that there is NO function that spawns a debris datablock. Nope, dont buy that.
I'm almost 100% certain that there is no way to spawn debris. You'll have to make do with the state system or just half-ass it and only eject 1 shell.
I have a question:
If I were to have a package and rewrite the same functions without using packages, would it still work? Do some things have to be packaged?
I'm not quite sure what you're asking, but keep in mind the defintion of "works" is very flexible.
The idea of putting everything in a package sometimes rises up, because packages enabled after the server starts are automatically disabled when the server closes, and this prevents stray script from operating if the person restarts the server with your add-on disabled.
What bugs me is that there is no standards in add-on creation. Badspot seems to get a static shock whenever he tries touching the issue of add-on development for his own game and the only time he even posts about the subject is when talking about exploits being created or features being disabled. Nobody really knows how X should be done, and in a game like Blockland where almost all of the functionality can be exposed, this can be very bad when you have so many hands in the cookie jar that somewhere along the way something breaks and then you have a bunch of broken add-ons and even core game components not working.
But, to answer your question, it depends on what you want. Any function that is overwriting an existing function ABSOLUTELY MUST be in a package, otherwise you're destroying core game functionality. However, if we're going to create a brand new function that does not exist, it does not need a package, no.
The best thing to do when trying out hypotheticals like this is to just make a quick and dirty script and try it out. Learning any programming language is usually as simple as using it.