Basic Admin Essentials Plugin Help

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.

1 Like

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”?

1 Like

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! :smiley:

1 Like

I may be late, but if you made this “!information” command, could you like make a video on how to make it or something? :smiley:

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.

7 Likes

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! :smiley: 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.

3 Likes

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.
image
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.
image
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.

6 Likes

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.

2 Likes

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?

1 Like

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”?