Redefine:A Rebooted | Modern, Easy and Open Administrative System

This version is still in development, and may miss some features and documentation.

Hell, I am still working on adding some features from previous versions.

Please report any bugs you might find, as it will help a lot!

Redefine:A (Version 5 // Rebooted)


Redefine:A Rebooted is a modern community-based administrative system / engine, made with a powerful developer-first mindset, and for the ease of use for the users who want to explore variations of other systems in the market without risking the game security.

Redefine:A catches the best of all worlds with a syntax-highlighted command bar, extreme ease of creating new commands, and an easily-learnable environment system.

The best part? You don’t even have to use Redefine:A as is; The engine itself is powerful enough to create your own systems without even touching the MainModule!

What features does Redefine:A have that other systems usually don’t?


  • NEW: Themes; You can now switch the way your system looks by loading up a theme. (In fact, you can entirely change how the system works with themes, exactly the same way as if you’d add simple functions to the module!)

  • BETA: Quick Actions; You can now create easily accessible tools without even opening the console or typing in chat.

  • Slash Commands support; Run commands you make with Redefine:A using slash commands in TextChatService!

  • Hooks that can modify the command before it even is ran!

  • Native support for Custom Chats, such as SocialChat v2. disclaimer: only SocialChat v2 for now

  • Security&Development-First Environment; No amount of external force can break inside.

  • Lightweight; Loads flamingly fast, Commands take almost half the time to execute compared to other systems, and even has an option to load even faster (with sacrifice of a tiny bit of functionality). not a joke

  • Bloat-less; Everything within the system is used; and is being kept that way for a while!

  • Extendable, modern UI. Don’t like how it comes by default? You can change it without the need of forking the MainModule. (in fact… you don’t even need to fork the MainModule at all, you can already do mostly all things by putting modules in the Functions folder…)

  • Semi-frequent updates; I cannot promise a schedule for updates, but it won’t take 3 months to fix a bug. I promise you that.

  • Supports UI-based systems, as it sends the commands to the client. nano is a good example lol

  • Plenty of useful (even for out-of-the-admin) libraries, such as the PlaceholderAPI, the ColorLib, and even BetterBasics.

  • Native support for commands from Nano.

  • Optionally receive auto-updates. (In an opt-out fashion. I mean, who wouldn’t want to receive updates?)

  • Most of the important features of the pre-reboot are here too, of course.

All that being listed, I’m sure you can see why this is one of the best choices in the “indie market” as of now.

The Lego-Like System


As mentioned, Redefine:A is a system that lets you ‘just plop modules’, just like Nano. What does that mean? It means you can just place a module you want to use in a command into the Functions folder, point the command to the module with env.ModuleName, and woah, it works!

Heck, even the commands themselves can be considered modules thanks to the OnLoad function!

In fact, let me paste the template for the commands real quick, so you can judge it yourself…

The Commands Template
return {
    -- Set this to true if you don't want people to use the command temporarily.
    Disabled = false;

    -- Main variables.
    Name = "Template"; -- The name of the command; Displayed in !commandslist.
    Description = "A Template Command."; -- The description of the command.
    Arguments = {
        --[[
        {
            Name = "Victim"; -- When creating the code, you can use Arguments.Victim for this specific node.
            Type = "Player";
            Required = true;
        };
        {
            Name = "PunishmentType";
            Type = "String";
            Required = true;
            Options = {
                -- Which punishment do you want to give the player?
                "Ban";
                "Mute";
            };
        };
        {
            Name = "Length";
            Type = "Number";
            Required = false;
            Minimum = 0;
            Maximum = math.huge
        };
        
        -- There are more types other than the ones mentioned here, so feel free to look into the RunCommand module-
        -- -for more of these types.
        ]]    
    }; -- Which arguments are expected.
    Keys = { 
        -- Used to change the functionality of the command. Example; --all, --server, etc.
        -- Do NOT use Keys as if they're the arguments! You *can* but really shouldn't.

        ["examplekey"] = true; 
        -- = "--examplekey" -> Keys.examplekey = true; "--examplekey=5" -> Keys.examplekey = 5; "--examplekey=hi" -> Keys.examplekey = "hi" 
    };
    Level = 0; -- Minimum admin level to execute the command.
    AbuseValue = 0; -- Adds 'abuse score' to the player when the command is ran.
    Aliases = {}; -- Alternative ways to call the command.

    -- Secondary variables.
    Credits = {}; -- Who made the command? (UserIds)
    Visible = true; -- Is the command visible for those who can't use it?
    Cooldown = 0; -- Global Command Cooldown (Delay between the command being used by any user)
    UserCooldown = 0; -- User Cooldown (Delay between the command being used by a single user)
    Dependencies = {}; -- Dependencies are env variables that are required to be present for the command to run; Example; {GetLevel = true} will require the env variable GetLevel (env.GetLevel) to be present

    -- Checks who can run the command; Use @env and @Player to determine if the player has the ability to run it.
    RunCapability = function(env, Player) -- Checks if the users can even run the command in the first place. Return true to allow. (Replaces Level)
        -- This function replaces the Level value; Use this to determine if the player can run this command.
        return true; -- Must return true or false.
    end;

    -- Runs this code when the module loads.
    OnLoad = function(env)
        -- You can use this to add functions to the environment.
    end;

    -- Runs this code when the player executes the command.
    OnRun = function(env, Executor, Arguments, Keys)
        return {
            Success = true;
            Message = env.format("Hello <player_name>, thank you for checking out Redefine:A 5!",{},Executor) -- When using the PlaceholderAPI, you can point it towards a specific player to have a specific result.
        }
    end;
}

Not impressed? well… uhh… shuffles notes about how sam created the simpleadmin thread here’s how the UI looks!

Kate is still awful at showcasing UI

The lists UI; Compact-able, minimize-able, and just good enough to look at.
image

The notifications framework;

The syntax-highlighted commandbar;
image
image
image
image

The HINT; (smoll emotional damage still remaining over this)
image

How To Install?


Installation is rather simple, really; Just grab the model (if you don’t have it from the previous posts), plop it into your game(s), and viola! You have a working system!

Getting the loader is currently only available in the Discord server, or the GitHub releases page.

Say thanks to Roblox's AI for that.

Temporarily, you can only get the Module source code from here;
GetSource

Got commands or functions you want to share and/or get? We too have it! Join our Discord server and feel free to share your creations with the community!

I got errors?!


If you got errors, you should probably read what they say.
If the error does not mention a way to fix it, this part is useful.

How do I use the settings?

Each setting is commented with what it does, with the only real issue I could find after some feedback being the Admins part, so I’ll explain it this way;

Press CTRL + F and search for settings.Admins; You would see something like this:

settings.Admins = {
	[5] = {
		-- Admin group name
		GroupName = "Root";

		-- When setting a Single-User, you cannot mark them as temporary and they'll count as BaseAdmins (Their levels will -
		-- - be permanently set as the level here and cannot be changed in-game.)

		-- Single User; "Username"/UserId

		-- "Temporary" means they can be changed in-game, or even removed entirely.
		-- All boolean values here mean whether or not they are marked as temporary.

		-- Group; {GroupId = 0; MarkAsTemporary = true/false; [Rank] = true}
		-- Gamepass; {GamepassId = 0; MarkAsTemporary = true/false}
		-- Default; Default = true/false
		-- Donator; Donator = true/false

		--[=[ Example;
		"SezeiXD";
		253925749;
		{
			GroupId = 3984407;
			MarkAsTemporary = false;
			[255] = true;
		};
		{
			Gamepass = 0;
			MarkAsTemporary = true;
		};
		]=]

		253925749; -- 0bBinary (Creator of the Engine)
	};
	[4] = {
		GroupName = "Super Admin";		
	};
	[3] = {
		GroupName = "Administrator";
	};
	[2] = {
		GroupName = "Moderator";
	};
	[1] = {
		GroupName = "VIP";

		-- You can also set a group as a default donator rank.
		--Donator = true;
	};
	[0] = {
		GroupName = "Non-Admin";

		-- Alternatively, you can set a group as the default rank.
		Default = true;
	};
}

Fear not! That’s basically how the system reads the admin levels in the system, and is, in fact, heavily customisable to your own liking! Just add your desired user’s UserId (can be found by copying the numbers part of their profile URL), and you’re done!

The rest is explained within the admin itself, so if you have trouble with that, let me know.

Studio Datastore / Error 502 - 7

In order to fix this, open Game Settings;
image

Click on Security and make sure Enable Studio Access to API Services is enabled!

After confirming, click on the blue button saying Save, and it should work from there.

I gave my friend admin in-game but it didn't save!

Currently, the system does not save settings and/or in-game data into the datastore unless the datastore is being used (such as MetaPlayer’s Player:Save()).

This is currently intentional and is just in preparation for a bigger update which will allow to modify settings in-game.

I have encountered an error that isn't listed here!

In the (not so) rare case stuff like this happens, the Discord server is always open for people to join to report bugs and such!

27 Likes

There should be a setting to prevent players from joining the experience if this error occurs, in such a case where there’s a hiccup in Roblox’s DataStoreService, an exploiter who is banned can join the game without issues.

2 Likes

I do appreciate the thought, but here’s where it’s wrong to do so;

Assuming everyone is an exploiter when there was one error will cause more trouble than it’s supposed to fix, mainly because it happens rather often.

You’d kick the player who just joined because of a datastore issue, and there’s a good chance they’re going to think they’re banned (regardless of the kick message), resulting in a player loss.

I can add the setting if more people want it, but it’s not at all recommended to take this course of action.

5 Likes

Updated the thread since I have started to heavily re-focus on this project;

A lot of things have been added to the rebooted version of Redefine:A while the thread was gathering dust, so here’s a quick list of features we added, including but not limited to;

The list would go on forever since a lot of stuff has been added, but I’d rather keep it short.

1 Like

can you continue working on nano admin too?

2 Likes

It is in the process; We are planning to release a big update once we finish with getting Redefine:A5, which is the underlying engine of Nano, out of the beta.

2 Likes

oh thanks! anyways, this post is really good! keep it up!

2 Likes

Apologies for the late bump! (again)

I have added some stuff since I couldn’t do the other stuff.

  • Added RawInput command types; Activate by changing Arguments = {} to Arguments = 'rawinput'. This disables a few features, but enables full control over the command at the cost of 0 help.

  • Added preparations for subcommand and custom types.

  • Added support for SocialChat v2 without the need of an external module

  • Changed the Optional: Argument of type {arg.Type} to Optional: {arg.Name} of type {arg.Type}. Looking for feedback for this specific change.

  • Multiple micro-optimization stuff; Reduced loading times from ~0.05 seconds to ~0.02 seconds in studio. (Huge achievement for me)

No, I’m not joking.
image
↓
image

4 Likes

Released an update that can be seen in R:A5’s GitHub, but I’ll make it short for those who can’t bother with technical stuff;

  • Added Semi-Native Support to Nano commands
  • Added Command.Color support
  • Added a shit-ton of commands imported from Nano into the loader so you won’t have to (and because im too lazy to rewrite these commands with R:A’s framework. dw, they’re all tested and they work fine.)

This doesn’t mark the end of the Beta phase of R:A5; In fact, there is still a lot of things to do such as get Datastore to save player levels, get new UI elements, etc.

2 Likes

Added some stuff which may be helpful for some of you. Can be viewed in Github because I am too lazy to rewrite all of the stuff.

  • Now using MIT licensing
  • BetterBasics > Added table.invert
  • Added a new MessagingService wrapper
  • Command.RunCapability > You can now return a string to act as an error when relying on it
1 Like

Added even more stuff which can make the system more powerful and even comparable to Cmdr. Yes, you can view it in Github.

  • Added hooks to change stuff (or even cancel) before they are ran.

  • Added a Quick Actions menu thing where you can quickly do stuff without the need of running commands using the console or chat. [Beta; API for this will be made later]

  • Notifications can now be given a .Sound option.

  • Deprecated the ‘Processed’ signal due to the new hooks update; The loader has been updated to show the new method to send webhooks if needed.

1 Like

Hello there, it’s been a long while since I last updated the devforums (and the github), so I’ll post what happened in the previous 4 months;

  • Tons of fixes, including fixes to the Quick Actions Menu. [volume warning]

  • People who had set level by name/userid would now return that level instead of searching for higher levels.

  • Added Level.VIPOwner : boolean to the party mix.

    • there’s also a new Level.BadgeId : RoleAssignment thing which no one will use but is still there for that one person who will; i know ur lurking here alex
  • Added Command.Destructive : boolean which will be used later; Currently testing as a separate function which you can get here if you want to help test it.

    • if you do get it, place it in the Functions folder, it will do the rest of the magic by itself.
  • Added System Logs for the nerds.

1 Like

Hi guys, I have recently updated Redefine:A to build 102 which among other things, adds the ability to run your favourite Redefine:A commands within TextChatService.

I mean it, you can actually use Redefine:A commands in Roblox’s new chat now.
image

Sadly due to the lack of customization within the chat label itself, I cannot provide highlighting and such the same way as the console does, hence it’s still better to use the console (which by default the keybind for is =).

2 Likes

Released Build 103 recently, which sadly does not bring the responses to TCS yet. (it worth wait, trust)

  • Added env:RegisterCommand().
  • Added function._NxEngine_PostInit().
  • Added 3 new settings.
  • Fixed VIPOwner.
  • Minor micro-optimizations.
  • Engine documentation.

more details in the Community Server since i post stuff there more often. (we also have some nice emojis please join)

1 Like

Updates 104 - 108:

  • Added new options for Datastores; nocache and nosandbox.
  • There are now default sounds for non-normal/pre-built notification types. (Warnings, Errors and Criticals).
  • env:GetLevel() now supports UserId input for offline players.
  • Rescripted MessageService (the MessagingService wrapper).
  • Fixed issues with Notifications as seen in Re:Notify’s v1.1 patch note.
  • Fixed custom argument types being removed by the sanity check.
  • Removed env:GetOfflineLevel(UserId). Use env:GetLevel(UserId) instead.
  • More micro-optimizations.
2 Likes

I only briefly checked out the admin, but I didn’t see the commands for giving tools to player or setting starter tools for players. Which would be a good addition to the default admin.

I also noticed you can’t run command on other players?
/smite (username / displayname) just doesnt work

1 Like

Not all games have tools to give.

The admin had it come pre-bundled in the previous versions, but in order to reduce bloat with the new version, I have taken the decision to remove it from this version.

As for commands not running on other players, I couldn’t replicate the issue, so I’d appreciate it if you have a way to confirm it’s not an issue caused for inputting a non-existing name.

(Sorry for the long wait for the reply, I have this topic on Muted. Next time, please contact me in my Discord server.)


I have recently pushed Build 110 ← github to the engine which aims to add support for Re:Notify, fix Client-sided Notification sounds, and other general fixes such as SanityChecking the commands not counting the custom type. (github had it for some reason but the module didn’t?)

Hey guys! Apologies for the sudden update, but build 111 has pushed something that might break your kick/ban messages.

Please make sure to update all your placeholders from <variable> to {variable} to fix the issue. An example is provided below.

This applies to commands that use the PlaceholderAPI as well, which include !h and !n to name a few.

(this may or may not hint towards a new argument type)

Why private message doesnt work?

Hi, I have updated the system once again with useless additions no one will appreciate them for.

I managed to fix the issue with the private messaging, let me know if it didn’t get fixed.

Here’s the basic overview;

  • Added support for both < Placeholder > and { Placeholder } when it comes to env.format().
  • Added Settings.ConsoleKeybind.
    • Uses Enum.KeyCode["String"] → Settings.ConsoleKeybind = "String"
  • TONS of fixes related to a lot of different things, so I won’t list them all here, so please join the Discord Server for all of the minor stuff along with the ability to keep getting updated regarding everything that’s being updated.

You can also see the script changelog here;