The original developer of BAE open-sourced it and allows people to freely edit it.
Yeah, but there arenât any :setmessage commands in the original module? What I was saying is that if someone creates something original, forked from something open source or not, thatâs an original creation. Itâs their choice to open source or that, and if Iâm not mistaken, the original developer (I believe itâs a FrappĂ© dev) who made the :setmessage didnât open source the :setmessage.
If you still donât get it, letâs take the following scenario as example:
- You create an original command by yourself on BA, thatâs unique, etc. You decided to not open source it and keep it for your projects.
- People start to notice it, and want to make the exact same because itâs so good. They donât ask for your permission, they just start copying right away. They wonât even get inspired, they just want to have the absolute same.
Well, it really depends on you, but when that happens, most developers would be offended about their original idea(s) being stolen/copied without permission.
I wasnât talking about the BA module, I was talking about what other users create from it, and people absolutely wanting to take the ideas for themselves.
The setmessage command at frappe was not the first one and will not be the last. Most admins have a setmessage/ notify command. Just because they made a notification command using that admin does not mean no one else may do that. If it is based on an open source, then we are still able to make our own notification command using the open source framework. No one is copying code directly from the frappe devs.
How would you suggest someone makes a notify command without âtheir original idea being stolen/copiedâ?
I wasnât saying it was forbidden to do that. People are free to do whatever they want. I was just stating my opinion as a lot of people were interested in making those, and that it could somewhat get the developer who got this idea, sort of offended?
I agree, but usually, that one person who made that got that idea of implementing that in that specific environment. And just because they did that, everyone else starts to do the same. Which can usually get them offended.
I was just saying my opinion, as a lot of people are interested in making those. They might not know that the developer who originally had that idea can sort of feel offended. If they donât care about how the dev feels, itâs fine, itâs their choice. I was just saying my opinion.
If youâd like to continue this discussion, itâs better we continue in DMs (devforum or discord idm) as right now, weâre completely off topic and not helping OPâs case. I have an example I could state, but I donât believe I am able to state it in a response like this one.
Alright that makes way more sense. Thanks for the clarification!
I may be late, but if you made this â!informationâ command, could you like make a video on how to make it or something?
Here is the complete script. You may Edit the information, the 'Test Command" the prefix, the level, and the rank.
I did try to, but since I donât have a YouTube account or any video maker, I had to make a 20 minute video that would not upload. So just directly copy the whole script, make a ModuleScript in the Plugins folder and paste the script into the ModuleScript, then edit what I put above.
local Plugin = function(...) -- The main plugin
local Data = {...} -- Where the data is located
local remoteEvent = Data[1][1] -- The remoteEvent variable
local pluginName = "information" -- The command ("information")
local pluginPrefix = "!" -- The prefix, you can change it to whatever you would like.
local pluginRank = 2 -- What rank can execute the information command?
local pluginDesc = "Test's the information command" -- Your command description.
local InformationMessages = {"Message 1 ran", "Message 2 ran"} -- The messages that will be displayed
local DisplayTime = 5 -- How long will it take for the next message to load?
local pluginFunction = function(Args) -- The function for the plugin we have
local Player = Args[1] -- "Player" is out argument.
for _, Message in pairs(InformationMessages) do -- Where the information is stored
remoteEvent:FireAllClients('Message', 'Test Command', Message) -- The remoteEvent will fire what you put in there. You can do FireClient or FireAllClients. Make sure to not edit it.
wait(DisplayTime) -- Waits for the display time to end before moving on.
end
end
pluginDesc = pluginName .. " " .. pluginDesc
return pluginName, pluginFunction, pluginRank, pluginPrefix, {pluginName, pluginDesc} -- Returns all the variables so BAE will understand it.
end
return Plugin -- Returns the plugin
-- And you have an information command! --
I hope you found this helpful.
Did the display time apply or just wait without applying to the messages?
If the wait time is longer then the messages, it will take WaitTime - MessageTime for the next message to load. If the WaitTime is shorter then the message, the next message will be displayed early.
Thanks for this! But, when a Trainee types this command, will everyone see this or just them? I wanted them to see only because itâs information repeated only for themâŠ
Since the rank is set to Administrator+, nothing will happen. If you want a Trainee to execute the command and it just shows the information to them, I can show you a script.
If you can that would be great! Also, donât need to answer this question but do you know like a command for BAE 2.0 thatâs like a sticky message, that it just stays at the top of the screen for everyone to see? Like at Frappe when you join it you see âSticky Message from [name]â and then the text like âHungry? Order!Ëâ
You will have to fork the model (I donât really know how to fork it. XD).
Edit: Here is the script that will show the information to just the trainees.
local Plugin = function(...) -- The main plugin
local Data = {...} -- Where the data is located
local remoteEvent = Data[1][1] -- The remoteEvent variable
local pluginName = "showinfo" -- The command ("information")
local pluginPrefix = "!" -- The prefix, you can change it to whatever you would like.
local pluginRank = 0 -- Makes it so Trainees can execute the command
local pluginDesc = "Test's the information command" -- Your command description.
local InformationMessages = {"Message 1 ran", "Message 2 ran"} -- The messages that will
show on the list.
local pluginFunction = function(Args) -- The function for the plugin we have
local Player = Args[1] -- "Player" is out argument.
for _, Message in pairs(InformationMessages) do -- Where the information is stored
remoteEvent:FireClient('List', 'Information', Message) -- Shows the list of information
end
end
pluginDesc = pluginName .. " " .. pluginDesc
return pluginName, pluginFunction, pluginRank, pluginPrefix, {pluginName, pluginDesc}
end
return Plugin -- Returns the plugin
-- Now, the command will only be visible to the Trainee â
If there is any errors in the code, please remind me about them. I did not test this.
Frappe modified the Basic Admin module and added a command there. What Iâve found working with Basic Admin plugins is that they can be pretty limited when youâre trying to do very specific things like that.
Modifying the module to add custom commands is actually pretty easy. Hereâs how.
1.) Get the Basic Admin loader like you normally would from toolbox, and modify it as necessary to your game like usual.
2.) Get the official module from TheFurryFishâs Profile. You can get it here. Then, place the module directly inside of the Basic Admin Loader. It should look something like this once youâve done it.
3.) Open up the loader, and scroll all the way down until you see this line.
require(Configuration['Loader ID'])(Plugins,Configuration)
Change that line to this. Make sure that you donât modify anything else below the end of examples line.
require(script.MainModule)(Plugins,Configuration)
4.) Now that youâre done modifying the loader, itâs time to modify the module. Open it up and scroll down to line 3002, and you should see a huge table of commands. Copy one of them, it can be any, and then paste it into the table with the others. I personally like to put an empty line between the default commands and my custom commands. Once youâve done that, it should look something like this.
Youâre now able to change up your command the way you want it. The first value (changelog in this case) will be the name of your command. My command for this example will be called âtestcommandâ.
The second value will be your prefix. Leaving it as sysTable.Prefix will leave it as the prefix that you already set in the loader.
The third value can be a bit harder to understand. Basically, itâs the name of the function that will be executed when the command is run. Unless you know what youâre doing, you should keep it as Funcs.Display for now.
Keep the fourth value the same as your command name in the first value. Then, you can change the last two values to the usage and description of your command. Changing these wonât affect your command at all. Itâs just what appears when you hover over it with your mouse in the list of commands.
5.) Your command is now created, and will appear in the command menu. We havenât made it do anything yet, so trying to run it wonât do anything.
6.) Weâre now going to give our command some functionality. Scroll up to line 540, and you should see a function called Funcs.Display. If youâre creating a custom function for your command then you can ignore this part. Scroll down to the bottom and you should see an elseif statement. Copy it and paste it directly below it for your command, and then change the string to your command. It should look like this once youâre done.
7.) Now, your command is finished and you can put whatever code you want under it. In this case. Here, I just added a line that said Player:LoadCharacter() to respawn the person that runs the command.
This probably wasnât very useful considering that itâs 10x easier to just make a plugin but I guess it in a way shows how the BA module works in case you want to edit it in other ways that plugins canât do.
I mean, arenât plugins easier? It might be the same, but personally I like the plugins way more that what you try to do there.
It honestly comes down to what youâre using it for and personal preference. I prefer to keep everything in one module and not have 5 different scripts for every single command. There are just some things you canât accomplish by just using plugins. (ex: Anti-AA)
Everythingâs great! I was searching through Dev Forums and was wondering are there any copy paste logs that work with BAE 2.0?
Thank you so much for your help with forking the module. But I do have a question, do you know how to make the full set message command?
As said before, using a plugin to make the setmessage command is not possible.
@sunnyrainqs You could use :GetPropertyChangedSignal() on their chat bar textbox, and then compare the length of the old text to the new text after they typed. If the difference isnât 1, theyâre copying and pasting. Then, if thatâs detected, you could insert it into a table and then use that table for a list with your custom command.
@Pieces2010 Could you clarify what you mean by âsetmessageâ?