[OPEN SOURCE] Redefine:A | An NxEngine-based Admin System

TL;DR GET MODEL HERE; MODEL LINK

Intro

Redefine:A is an unique administration system made to be loved by it’s users, while mainly being focused towards developers that want to create their own admin systems and commands.
I have always marketed this admin as a SourceMod clone made for Roblox, and it still is the case, considering most of it’s elements are ‘lua’-d down. i cant believe i just said that-

Note; THIS IS MEANT TO BE AN ENGINE TO CREATE YOUR OWN ADMIN SYSTEM, While still being usable out of the box.

For everyone who complained to me that the engine is bad simply because of the UI, here’s a personal message; My UI is not the top of the line, and I’ll admit it freely, but the main point of this engine is the scripting behind it; That’s what is important in here. However, I still try to improve the default UI as well as adding new features to it, so please try to suggest where I should improve on it rather than “oh the ui sux dont use admin.”

Key Differences

A lot of stuff can’t even be compared when it comes to other admins.
What this admin has that other admins don’t (yet)

  • Local Player IDs → (!kill #1 = kills the first player that joined the server, if they are still in-game. You can get the LPIDs using the command !lpid or !joinlogs.)
  • Modernised UIs that are easily swappable using a simple function.
  • Cache collections.
  • Secure environment that doesn’t use metatables.
  • Easy-to-Understand environment system.
  • Cross-Game synced client settings.
  • Environment Emulations; Run commands from other systems. (Currently supports only SyncAdmin)
  • A lot of default commands that are all changeable and customisable.
  • Version Archive (since Build 23)
  • Globally available branches of the versions. (Main, Stable and Nightly)
  • Command Flags.
  • Optional, Cross-Game 2 Factor Authorisation for Super Administrators.
  • Automatic Command Tester (Hidden in the settings; Use module.TestCommands = true to enable.)
  • Force a theme on players (Use module.ForceTheme = '[Theme Name]')
  • Create your own UI for the admin using env.UIThemes.SetMainUI(ScreenGui Instance)

So, what are Local Player IDs?

Local Player IDs, or LPIDs for short, are a part of the Cache Collections in the admin system allowing for selective commands and easier access to moderator actions against players. You can find their LPID using !joinlogs and kick them using their ID; !kick #ID.

Wait a second, you said Shared Environment? Isn’t that exposing the admin to external security risks?

image

Well, technically speaking, yes, it does. Luckily, the admin has the environment locked behind the tight bars of ‘Not part of the script? too bad, get outta here.’
What it means, is basically anything that isn’t part of the R:A script, doesn’t get access to the shared environment as long as nothing malicious was installed into it that would allow such stuff.

Back up a little, SYNCADMIN SUPPORT?!

yep.
you can use commands that come from syncadmin with redefine:a using the included _SyncAdmin folder in the commands folder. in fact, it already comes with a SyncAdmin command as a proof of concept.
image
and yes, @AtAltitude, i see you in the back filing a dmca report. i didn’t reverse engineer the admin, i just simulate the api using setfenv and existing functions from my admin. look for yourself.

Very nice. How get tho?

The model link is exactly the same as it always will be. No buts, no ‘will it change again’, it’ll stay the same as it always was.

besides, i help other admins develop, so why not give something i made myself a shot?

I need support. Where get?

In the official SME Discord server.

where are the jokes from before this thread update

ugh, here…

Post before 19th of June edit

20th of May: An overhaul to this post is coming soon due to the new features and UIs.
The GitHub will be updated as well to include this markdown, so keep an eye out on it.

Intro

Previously, I have marketed Redefine:A as a SourceMod alternative, and such. As of today, it is no longer the case, and is the reason why I am recreating the thread. Today, it’s just a new Administration System designed to be loved by its users, while being a competitive alternative to other admins in terms of uniqueness.

Key Differences between this admin and other ones

This admin includes many new features other admins wouldn’t have thought about them before, including but not limited to;

  • Local Player IDs (Accessible using !lpid).
  • Cache collections.
  • Modernized, open to use UIs.
  • Environment Add-on libraries.
  • Very frequent updates.
  • A lot of out-of-the-box commands which are customisable.
  • A desktop, alongside a terminal inside it.
    And of course, much more.

So, what are Local Player IDs?

Local Player IDs, or LPIDs for short, are a part of the Cache Collections in the admin system allowing for selective commands and easier access to moderator actions against players. You probably saw it already; Player names which start with “All”, “Me”, etc. The easy fix? Add a @ before the argument if you’re planning to actually do them. Players with a very identical long name? Worry not, as you can do !lpid and kick them using their ID! (!kick #(their LPID)).

What Add-on Libraries are, really?

Well, as of now, I don’t really have an official term. They basically extend the Add-ons system by adding external functions. TL;DR a module script for a module script, inside a module script. Don’t catch me on this. Previously, add-on libraries were stuff to help add-on commands, but since everything is now under a shared environment, it really is just extensions of the admin and can be everything from a webhook function to even torturing poor engi when he joins with 100 popups and spam. …wait n-

How customizable are the UIs in the new version?

Previously, the UIs were very much customizable, but at the same too ugly to even be used inside an admin system that the creator would respect (I’m sorry V.02 :<). As of now, the customization has calmed down a bit in order to modernize the UI. However, the old UIs are still in the admin so if you want, you can easily enable them again. Adding to this, I have “taken inspiration” from @crywink’s UI Kit system to build the new UI.
No, really, look at this B e a u t y.

Jokes aside, my point is still standing; I sacrificed a bit of customization in order to make the UI look slick. You can still swap the UIs very easily.
Customization is now back with Redefine:A Version 4, and it’s better and easier than it ever was! Don’t want to change the UI? Don’t have to! It’s already very beautiful and modern, and can really give the looks, out of the box.

Want to change the UI regardless? Easy! Just clone the Template function from the Functions folder of Redefine:A V.4 and follow the included instructions on how to change the UI. Spoiler alert: All you do is add a single line which’s env.UI = script.UI.

Wait a second, you said Shared Environment? Isn’t that exposing the admin to external security risks?

image

Well… Yeah, it exposes the admin to external risks that can’t be controlled by me, but as long as the admin is inside ServerScriptService, and you didn’t add any malicious additions / functions into the admin, there’s no reason for the admin to actually have any serious threat. And even if there will be any, it’s easily fixable and probably will be patched in less than 24 hours as long as the risk was reported.

and regardless, if anything really happens to the admin externally, it can’t really do anything, because the environment is shared internally only, and can’t be accessed from external sources thanks to the env requirement every time.

Very nice. How get tho?

The model link is exactly the same as the previous one. Really, it is. oh, and now there’s a github and a discord as well.

and come on, it already got overshadowed by HD Admin and Basic, and not even twice, so why not give something new and probably better a quick try?

Version 4 is now out!

Prepare for the MODULARITY UPDATE…! it sounded better in my head ok
image

Every single aspect of the admin is now modular and can be easily swappable and changed using the provided commands, functions and languages that came with the admin. No, I’m actually serious, all you need to do is just swap something in the settings / a command / a function and that’s all.

Best part? Don’t trust me enough to provide you security updates regularly and/or don’t trust the autoupdate mechanism? You can do yourself a favour with the provided AutoUpdate Toggle™*.

Hold up, you said something about a desktop??

…no…

Are you sure? You said something about it in the feat-

-NO. There is ABSOLUTELY nothing in this admin like a desktop.

< Nothing like this.

If you want the desktop seperately, without the admin, you’ll miss a few features such as executing commands from the desktop terminal. If you do not mind, the links for other admins that are offically made by me are found here:
Vanilla (No Admin) – Unreleased, will come soon.
SimpleAdmin
Basic Admin Essentials 2.0
HD Admin – Unreleased, will come soon.

*AutoUpdate Toggle™ is not a trademark owned by EngiAdurite nor Studio Engi. Studio Engi and it’s contributors are not responsible for any bad usage of the trademark and will not help you at court for using it even as a joke.

63 Likes

I absolutely love this! Good work on creating this amazing Administration System!

3 Likes

I can’t seem to get it to work… Any idea why?

@matthew2835 @index_l Are there any errors in the logs?

There is no error or anything…

Hm. When you do !cmds, does it like gray everything out?

Nothing at all happens there is no gui’s no nothing…

1 Like

Hm, alright, can you contact me on discord so we can resolve it? My discord is Sezei#3061.

Edit: The issue was fixed. The source was closed for some reason.

3 Likes

Updated!

Admin - V03-Build5 (Update #59);

  • Added a pcall function, so that if anything errors, it’ll say what.
  • Added new functions; LoadScript() and JoinString(), both to be used for future updates or by new addons.
  • Added the fact that some commands might not return anything, so the admin won’t be stuck on a forever loop of awaiting return. (It’ll return a critical notification instead.)

Desktop - Public Beta Build 49(A);

– Applies to the Redefine:A build, not the global one.

  • A green screen of death has been added, triggered only if critical issues happen. (or if you, for some reason, try to divide by 0 in the calculator.)
  • Added possibility to execute R:A commands from the terminal.
  • Fixed TextWrapped value in Notepad Lite.
  • Fixed TextWrapped value in Calculator and Terminal.
  • Set the Calculator’s inputs and output TextScaled as true.

I have also opened a Discord Server for the R:A users, so if you have any issues or just want to chat, feel free to join.

3 Likes

This is just, amazing your work is great!!

2 Likes

What is this ?

2 Likes

That looks very fishy… Is that line trying to open a backdoor? Can we get an explanation?

1 Like

I do not believe this opens a backdoor for 2 reasons.


First, there are no obfuscated strings or requires.

Second, if you look in the rest of the script, the same ‘Module’ table is referenced. The part where @Certurix highlighted appears to simply initialize the table. I may be wrong, however.

Hope this clears it up :slight_smile:
@R0bl0x10501050

P.S. I had to update studio (like 20 versions up) on this alt pc just so I could review the source code lol (main inaccessible in the morning).

5 Likes

I’m not OP here, but you are most likely correct.

I haven’t looked at the rest of the script (I haven’t looked at either the script in question nor the admin system overall), but to my eye the line in question only does three things:

  • Declares and initializes a variable named module that contains an empty table
  • Sets the Private key within module to a value of true as a boolean
  • Sets the Key key within module to a value of JESSEY_<game creator id> where <game creator id> is, obviously, the Roblox ID of the game creator.

In other words, the line in question is equivalent to:

-- Let game.CreatorId = 22805614 or "22805614" as applicable

local module = {
    ["Private"] = true,
    ["Key"] = "JESSEY_" .. game.CreatorId -- Same as ["Key"] = "JESSEY_22805614"
}

If I had to guess, this is probably part of some internal function that deals with data stores, since this Key is (to my knowledge) fairly consistent with naming guidelines to ensure the uniqueness of data store key names (prepend a fairly unique (but not necessarily unique at all) string to a value that will always be known an unchanging with respect to the game itself).

2 Likes

I have accidentally forgot to remove that line, but yes, it’s just there for internal functions.
Let me explain every aspect there;
module = {} - This is where the module start actually is at. If you look at the code, you’ll see that everything there uses module.[key].

module.Private = true - This is deprecated. It used to indicate that the module was private at the time.

module.Key = “JESSEY_”…Game CreatorId - Deprecated as well. Used to be the way to reset the datastore from in-game, but it no longer is the case.

Sorry if it looked fishy. I get it, my ways of hiding internal functions are bad, but it was there for a good reason.

1 Like

Updated!

Living up to my promise of keeping the admin as up-to-date as possible, I have released another update, to both the Desktop and Admin.

Admin - V03-Build6 (Update #60);

  • Added function GetPrefix()
  • Added new global value in the admin: module.Prefix - Used for the desktop for now.

Desktop - Public Beta Build 50;

– Full (Both the Global build and R:A build) update;

  • You can now create your own terminal commands using the new folder in the Add-on.
    You can’t add them to the help list without modifying the localscript yet, but it adds the syntax highlighting automatically.
  • Fixed TextWrapped value in Calculator (Global build).
3 Likes

This would be great if you don’t try to hide code, just type as normal because that weird…

1 Like

I actually only hid it because previously I have done the settings a bit more ‘user friendly’.
like this, I mean VV

--[[what is your name]]               module.name = {
"NAME HERE"                           } --[[
thank you for the name.]]

used to be the good stuff back when i originally made the admin, but it was rare.
it just wasted my time so i decided to stop that.

1 Like

Ok, no problem, thanks for answer.
Also this is a very nice ressource you did! Great job I very like it (because I create a game with Garry’s Mod style)
Thanks for sharing, I will use this for my game and credit you ! :slight_smile:

2 Likes

This is how it was meant to be originally;


However, because it just wasted the time I decided to go with the ‘normal’ format, but still hide the module = {} part. The result was like this;

It still will resolve into the same thing.

2 Likes