# Introduction
Source: https://docs.jadevelopment.co.uk/introduction
Welcome to the jaDevelopment documentation site. You can find all of the intricate guides, information and advice for setting up our interactive products. Instructions on customisation and setup can be found here.
[We are the go-to source for development ](https://jadevelopment.co.uk/)designed to upgrade and empower your community. We offer a diverse array of offerings from our cutting-edge interactive systems to stylish accessories and wearable kits, all meticulously crafted to meet a variety of tastes and preferences.
**Before you advance further, please read the following:**
You'll need to be able to access our [discord server](https://discord.gg/E4yHfQegnP) and run `/retrieve` through our bot to be able to download and install your purchased products if not already recieved.
If you have purchased a whitelisted product through [ClearlyDevelopment](https://clearlydev.com/public-marketplace/jadevelopment) or our [website](https://jadevelopment.co.uk/) you will require to make a ticket in our [discord server](https://discord.gg/E4yHfQegnP) and provide your order number, product name and roblox username under the 'Licensing and Billing Request' category.
## Getting started
A starting point for setting up and configuring your Vision MIS system within your game
An in depth guide to setting up and installing Radiolink within your game
Enhance your management experience by setting up our exclusive discord bot integration
Interested in what Vision has to offer? Check out the features before you may [purchase](https://jadevelopment.co.uk/)
# Browse Console Page
Source: https://docs.jadevelopment.co.uk/luasims/fp/browseconsolepage
The Browse Console Page allows direct access to every student, including their individual student profiles. This can be accessed by hovering over a specific student using Selective ID, and clicking on them or searching them up via username
Search Console: **This allows staff/administrators instant access to every student in the server**. To view the student overview page (which also includes individual behaviour management), you must use selective ID and hover over a user and left-click on their avatar or click on the username when hovering over a student
Every student is listed on an **individual tab** which displays their username, display name, year group & user/luasims ID, and is filtered by year group and status.
# Create Profile
Source: https://docs.jadevelopment.co.uk/luasims/fp/createprofile
This is the first page all LuaSIMS users will see if they have not registered with the organisation that the system is within
* Users must enter a valid **Roleplay Name**
* Users must select a **Title** based on the selections available if they are a staff member or administrator
* Users must **create and submit** the profile they are creating
This information **can be changed** via the roleplay name button located at the bottom right of the screen from the staff and student's perspective, or if reset via the **Student Profile** panel, available to staff & administrators.
# Home Page
Source: https://docs.jadevelopment.co.uk/luasims/fp/homepage
The Home Page is the primary page where data across the entire school can be viewed and analysed
**This page features:**
Easy to access, relevant features that guide users to where they need to be within seconds
Shows the total number of players/ students who are actively registered and how many player keys are in use
Shows the total statistics of positive and negative points overall for all year groups and students
# Login Page
Source: https://docs.jadevelopment.co.uk/luasims/fp/loginpage
The login page is an access gateway for users to use LuaSIMS when equioping the tablet model. It features a user licence agreement which all users must agree to before logging in.
**User Licence Agreement**: An agreement **all users** (staff & administrators) must agree to before booting/logging into LuaSIMS. This is a policy thoroughly enforced by jaDevelopment, and must be acknowledged by all users.
yes
# Student Overview
Source: https://docs.jadevelopment.co.uk/luasims/fp/studentoverview
Student Overviews allows staff to view specific insights on a student, including: safeguarding notes, behaviour, quick notes & SEN Management
Info Soon
# Installation
Source: https://docs.jadevelopment.co.uk/luasims/installation
Comprehensive instructions on how to set up LuaSIMS with your game. Follow on for step by step details on how to achieve success in your installation.
Warning: Some pages on LuaSIMS 'Features and Pages' are not complete or are missing entirely. Please refer to the demo game to go through every feature located in our main group experiences
## Getting started
Ensure you have the licence for this product, by creating a [support ticket](https://discord.com/invite/jadevelopment-962068926714511500)
You must enable **HTTP Requests** and **API Services** within the Game Settings tab in Roblox Studio. This is located under the Security section. Please ensure this is enabled before opening a ticket with our support team.
If you have not already added the discord bot, you can do so [**here**](https://discord.com/oauth2/authorize?client_id=1412895797032255559\&permissions=8\&integration_type=0\&scope=bot+applications.commands). Please note, that you must be an **Administrator** of the guild (server) you wish to setup the LuaSIMS bot in
After downloading the product file from the licensing message, drag and drop into Workspace under your game
Check to make sure your security settings are correct. You can do this by heading to **Home** in Roblox Studio, then **Game Settings**
Check to make sure that LoadString is enabled and is correct. You can do this by heading to **ServiceScriptSpace** in Roblox Studio, then **Properties**
## ROBLOX Configuration
Under the **LuaSIMS** folder provided, there will be a Settings script. Please open it to continue.
An example for configuring your group is below
```javascript theme={null}
["APIKey"] = "YOUR_API_KEY", -- API Key
["SchoolName"] = "jaDevelopment", -- School name
["Domain"] = "jadev.group", -- Domain name for login
["LogoID"] = 0, -- Custom school logo ID
```
| **Options** | **Description** |
| :---------- | :----------------------------------------------------------------------------------------------------------- |
| APIKey | Your unique licence key to the product. This can be found within your direct messages from LuaSIMS Cloud Bot |
| SchoolName | Your specific school name |
| Domain | The unique address for staff to login, this is a cosmetic feature, meaning it can be anything. |
| LogoID | A designated decal Image ID for your school, appears on all LuaSIMS assets/features |
A series of attributes for nametags can be toggled to adjust to your needs
```javascript theme={null}
["NametagsEnabled"] = true, -- Toggle nametags being visible
["NametagVariant"] = 2, -- Enter type of screen position (1: Modern, 2: Default)
["StaffIcon"] = true, -- Toggles staff icon above nametag
["IsolationTag"] = true, -- Given when a student is put in isolation
```
* **To disable one of the above**, just change `true` to `false`
To disable the gamepass feature, just set the `GamepassID` to `0` . Otherwise, replace 0 with your gamepass ID if you wish to use this feature.
```javascript theme={null}
["NonUniformPass"] = {
Enabled = false,
GamepassID = 0,
},
```
* To\*\*disable \*\* the above, just change `true` to `false`
```javascript theme={null}
["TimeoutPass"] = {
Enabled = false,
GamepassID = 0,
},
```
* **To disable the above**, just change `true` to `false`
```javascript theme={null}
["ToiletPass"] = {
Enabled = false,
GamepassID = 0,
},
```
* **To disable the above**, just change `true` to `false`
```javascript theme={null}
["Lanyards"] = {
Enabled = true, -- Should lanyards be automatically equiped on staff on server join
ColorTheme = Color3.fromRGB(52, 108, 207),
SLTTexture = true -- Toggle SLT texture on lanyard if they are SLT
},
```
When lanyards are set to `Enabled = true`, staff will receive lanyards automatically. Please set this to `false` if you wish or staff **not** to have built in LuaSIMS lanyards.
```javascript theme={null}
["Isolation"] = {
["IsolationTeam"] = game:GetService("Teams")["Isolation"], -- Set a designated Team for students to be isolated into
["ExcludeOnLeave"] = true, -- If student leaves the game mid isolation
},
```
2. To make **students be sent to a designated isolation** team input the following `game:GetService("Teams")["Isolation"]`
3. To**enable** or **disable** exclusion on leave, change `true` to `false`. This selects if a student should be excluded from the game if they leave while in isolation
An example for configuring your session data is below
```javascript theme={null}
["SessionData"] = {
["Positive"] = { -- Positive points
"2 - Respect",
"2 - Equality",
"1 - Hardworking",
"3 - Working well",
},
["Negative"] = { -- Negative points
"2 - Truancy",
"1 - Disrespect",
},
["Locations"] = { -- locations
"Main Building",
"Physical Education Building",
"Sixth Form Building",
},
["LessonPeriods"] = {
"Period:1",
"Period:2",
"Period:3",
"Period:4",
"Club & Misc:5",
},
["ExclusionTypes"] = {
"Fighting",
"Fail Roleplay",
"Other"
```
| **Options** | **Description** |
| :------------- | :--------------------------------------------------------------------------------------------------------------- |
| Positive | The reasons behind and the number of points that a student can receive for positive behaviour. |
| Negative | The reasons behind and the number of points that a student can receive for negative behaviour. |
| Locations | The specific locations that are used when logging behaviour are displayed on the dashboard for logging purposes. |
| LessonPeriods | The different periods/lessons for the regular day appear on the behaviour dashboard for logging purposes. |
| ExclusionTypes | The reasons that senior leadership members can use in order to exclude students. |
We recommend you use the **specific text formats** provided below when setting up this section, however this is optional if this does not suit your needs.
* `AMOUNTOFPOINTS - Reason`- for positive and negative behaviour logging
* `Title:Number` - for lesson period loggingConfiguration
## Discord Configuration
Once you have completed the ROBLOX Configuration, you can move on to configuring your Discord and Roblox permissions and other additional settings using the **LuaSIMS Discord Bot**. Please ensure you are linked with jaDevelopmentID via the bot before proceeding with anything.
**\[03/2026] Important:** There is a reported front-end issue with permissions saying 'failed to save to database' - all commands are working, so please ignore this warning and continue as normal.
Discord permissions allow users to manage behaviour points and exclusions via the system, as well as key components that make it work. To do this, run the slash command`/pemissions add discord`and then follow the other prompts, in the example provided below.
```csharp theme={null}
/permissions add discord `role:` "School Staff Team" `permission:` "Staff"
```
Upon using the command, you will be prompted with **two required fields**: a Discord role and a pre-set permission level. You will need to provide the role you wish to allow permissions for (such as "School Staff Team") and then the level of access you would like that specific role to have, which is explained in the table.
Once all permissions have been set up for a role, they will appear with the `/permissions list `slash command, which you must ensure you set permissions for **selected Discord roles**; otherwise, they will be unable to access staff Discord features - students do not require this.
| **Options** | Description |
| :---------------------- | :------------------------------------------------------------------------------------------------------------- |
| Staff | This gives access to use the behaviour slash commands, such as adding or removing behaviour points |
| Senior Leadership Staff | This gives access to manage exclusions and behaviour slash commands, such as adding/removing behaviour points |
| LuaSIMS Administrator | This gives **full** access to the LuaSIMS system features and settings; only issue this to trusted individuals |
ROBLOX permissions allow users to access the staff side of LuaSIMS instead of the student view, and set your permissions based on your community rank. To do this, run the slash command`/pemissions add roblox`and then follow the other prompts, in the example provided below.
```csharp theme={null}
/permissions add roblox `rank:` "150" `permission:` "Staff"
```
Upon using the command, you will be prompted with **two required fields**: a Roblox rank ID and a pre-set permission level. You will need to provide the rank ID you wish to allow permissions for (such as "150"), which can be found in the community rank configuration page, and then the level of access you would like that specific role to have, which is explained in the table.
Once all permissions have been set up for a role, they will appear with the `/permissions list `slash command, which you must ensure you set permissions for **every role**; they will be unable to access staff features if not configured - student ranks do not require this.
| **Options** | Description |
| :---------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Staff | This gives access to the LuaSIMS system along with the ability to add/remove positive/negative points, isolate students, and view profiles |
| SEN Staff | This gives the same permission level as staff, along with the ability to manage a student's special educational needs profile (including changing their SEN status and adding SEN notes) |
| Safeguarding Staff | This gives the same permission level as staff, along with the ability to make changes and manage a student's quick notes and safeguarding status |
| Administration Staff | This gives the same permission level as staff, along with the ability to make changes and manage a student's quick notes |
| Senior Leadership Staff | This gives the same permission levels as listed above, along with the ability to manage exclusions, allowing them to add/remove or edit exclusions for students |
| LuaSIMS Administrator | This gives **full** access to the LuaSIMS system features and settings; only issue this to trusted individuals |
Additional configuration for Discord is not available yet for this version, check back soon.
## Additional Features
Roblox commands and additional features are not yet available for this version, check back soon.
# Configuration
Source: https://docs.jadevelopment.co.uk/placeables/configuration
Placeables has endless options for configuring and customising the product to your liking
```luau theme={null}
GroupId = 14665139, -- Roblox group ID
Permissions = {
Regular = {
UserIds = {}, -- Users who get regular access by UserId
RoleIds = {}, -- Ranks (roles) that get regular access
},
Admins = {
UserIds = {}, -- Users who get admin access by UserId
RoleIds = {255}, -- Ranks (roles) that get admin access
},
},
```
**GroupId is not required**. You can simply set this to `0`, and rely on using UserIds for the system. You do not need a group ID for the system to function.
Permissions contains two types of "roles" - Regular and Admins
* **Regular** is just simple access to using the system, and is restricted by configuration like maximum props, cooldown
* **Admins** is unrestricted access to the system, so no cooldowns, no maximum prop count, and so on
For each of the types, you can have any number of user IDs and role IDs that will be assigned that specific type of permission
For example, `RoleIds = {1, 2, 3, 4, 5, 6, 255}` - anyone with these role IDs will be assigned to that permission type
```luau theme={null}
MaxProps = 3, -- Max props a single player can place
PlacementDistance = 50, -- Max distance (studs) player can place from character
ContinuousPlacement = true, -- After placing, automatically start placing the same prop again
PreserveRotation = true, -- Keep last used rotation when selecting a new prop
```
* **MaxProps**: defines the maximum number of props a player can place (with regular permissions)
* **PlacementDistance**: defines the maximum distance (in Roblox studs) a player can place a prop from their character
* **ContinuousPlacement**: when set to `true`, you will be able to continue placing your props after placing another. When set to `false`, it will stop placement flow after placing a single prop
* **PreserveRotation**: when set to `true`, the previous rotation of a prop you have just placed will be kept. For example, if you rotate a prop 90 degrees, and this setting is enabled, it will then keep that same orientation for the next prop in the placement flow
```luau theme={null}
GridSize = 0, -- Grid snapping (0 = disabled)
Cooldown = 1, -- Number of seconds to wait before placing again
RotationIncrement = math.rad(15), -- Degrees to rotate
ValidColour = Color3.fromRGB(56, 163, 44), -- Highlight colour when placement is valid
InvalidColour = Color3.fromRGB(255, 71, 71), -- Highlight colour when placement is invalid
```
* **GridSize**: this is the amount at which the prop "snaps" to the surface. For example, a grid size of `0` allows for smooth placement, however a grid size of `2` will be more snappy and placed studs apart
* **Cooldown**: number of seconds to wait before placing again (prevents spam)
* **RotationIncrement**: the number of degrees to rotate when you press `R` (or the rotate keybind/button). If set to `90`, the prop will rotate 90 degrees each time. To edit this, just simply replace the `15`, so it would look like the following when setting to 90: `math.rad(90)`
* **ValidColour**: this is the colour that the prop will be highlighted in when a placement is considered **valid** by the system. To change this, get an RGB colour code ([colour picker here](https://www.google.com/search?q=colour+picker\&sca_esv=11b7b2325caaf8c6\&sxsrf=APpeQnu6XsafczeGoEGHKwM_tlnBeeKLAA%3A1782913587973\&ei=MxpFauPwOv2ChbIPrLTHkAQ\&biw=792\&bih=992\&ved=0ahUKEwij1s3YzrGVAxV9QUEAHSzaEUIQ4dUDCBA\&uact=5\&oq=colour+picker\&gs_lp=Egxnd3Mtd2l6LXNlcnAiDWNvbG91ciBwaWNrZXIyChAAGEcY1gQYsAMyChAAGEcY1gQYsAMyChAAGEcY1gQYsAMyChAAGEcY1gQYsAMyChAAGEcY1gQYsAMyChAAGEcY1gQYsAMyChAAGEcY1gQYsAMyChAAGEcY1gQYsAMyDRAAGIAEGIoFGEMYsAMyDRAAGIAEGIoFGEMYsANIthlQAFgAcAJ4AZABAJgBAKABAKoBALgBA8gBAJgCAqACC5gDAIgGAZAGCpIHATKgBwCyBwC4BwDCBwMyLTLIBwmACAE\&sclient=gws-wiz-serp)) and replace the colour inside the brackets, for example: `Color3.fromRGB(48, 105, 63)` for a more darker green
* **InvalidColour**: this is the colour that the prop will be highlighted in when a placement is considered **invalid** by the system. To change this, get an RGB colour code ([colour picker here](https://www.google.com/search?q=colour+picker\&sca_esv=11b7b2325caaf8c6\&sxsrf=APpeQnu6XsafczeGoEGHKwM_tlnBeeKLAA%3A1782913587973\&ei=MxpFauPwOv2ChbIPrLTHkAQ\&biw=792\&bih=992\&ved=0ahUKEwij1s3YzrGVAxV9QUEAHSzaEUIQ4dUDCBA\&uact=5\&oq=colour+picker\&gs_lp=Egxnd3Mtd2l6LXNlcnAiDWNvbG91ciBwaWNrZXIyChAAGEcY1gQYsAMyChAAGEcY1gQYsAMyChAAGEcY1gQYsAMyChAAGEcY1gQYsAMyChAAGEcY1gQYsAMyChAAGEcY1gQYsAMyChAAGEcY1gQYsAMyChAAGEcY1gQYsAMyDRAAGIAEGIoFGEMYsAMyDRAAGIAEGIoFGEMYsANIthlQAFgAcAJ4AZABAJgBAKABAKoBALgBA8gBAJgCAqACC5gDAIgGAZAGCpIHATKgBwCyBwC4BwDCBwMyLTLIBwmACAE\&sclient=gws-wiz-serp)) and replace the colour inside the brackets, for example: `Color3.fromRGB(79, 6, 7)` for a more darker red
```luau theme={null}
ServerPropLimit = {
Enabled = true, -- Enable global server prop limit
MaxProps = 5, -- Maximum total props allowed on entire server
},
PropAutoDelete = {
Enabled = true, -- Auto delete props after a duration
Duration = 300, -- Seconds before a placed prop is removed (e.g 300 = 5 mins)
},
HidePropsOnDistance = {
Enabled = true, -- Hide distant props to improve performance
Distance = 100, -- Distance (studs) at which props get hidden
Interval = 1, -- How often to check visibility in seconds (s)
},
AccessMethod = "Button", -- "Tool", "Button", or "Both" - how players can access the system
```
* **ServerPropLimit**: when Enabled is set to `true`, there will be a maximum number of props all players using Placeables will have to abide by. When the `MaxProps` is reached, there will be a notification displayed to users saying the \`has been reached
* **PropAutoDelete**: when Enabled is set to `true`, all props a player places will be automatically deleted after the time taken reaches the `Duration`. For example, 300 seconds is 5 minutes, so after 5 minutes, the props a user places will be removed. This can be useful for events
* HidePropsOnDistance: when Enabled is set to `true`, the system will automatically hide any props further than the `Distance` set (100) to the character. This is the number of studs at which props are hidden. This can help with streaming and performance, limiting the number of props visible to the player, especially if you have a high amount. The `Interval` is the number of seconds the system waits to check visibility for the client
* **AccessMethod**
* `Button`: this shows a "View Props" button near the toolbar
* `Tool`: this is a tool available in the player's backpack, when equipped the system will be visible
* `Both`: the system will show a button and a tool for the player to choose
```luau theme={null}
Notifications = {
Enabled = true, -- Enable notification messages
Config = {
UndoPlacement = true, -- Show notification when undoing
PlaceProp = true, -- Show notification when placing
DeleteProp = true, -- Show notification when deleting
DeletedAll = true, -- Show notification when deleting all props
MaximumReached = true, -- Show when max props reached
InvalidPlacement = true, -- Show when placement is invalid
Cooldown = true, -- Show cooldown warning
ServerLimitReached = true, -- Show when server limit is reached
NothingToUndo = true, -- Show when there's nothing to undo
}
},
```
When notifications Enabled is set to `true`, all notification messages will be automatically enabled. You can toggle each specific notification from the `Config` table below it.
* For example, you can disable the notification that alerts players when they delete a prop, by changing `DeleteProp = true,` to `DeleteProp = false,`. It's important to keep the commas consistent when editing configuration tables
```luau theme={null}
PropsLocation = game:GetService("ReplicatedStorage")["Init-Placeables"].Props, -- Folder containing the props
PropSaving = {
Enabled = false, -- Save placed props to DataStore
DataStoreName = "PlaceablesProps26", -- Name of the datastore
SaveInterval = 5, -- How often to auto save
},
Keybinds = {
ConfirmPlacement = Enum.UserInputType.MouseButton1, -- Left click to place (double tap for mobile)
ChangeCategory = Enum.KeyCode.C, -- Change category
NextProp = Enum.KeyCode.E, -- Next prop in list
PreviousProp = Enum.KeyCode.Q, -- Previous prop in list
RotateProp = Enum.KeyCode.R, -- Rotate current prop
ResetRotation = Enum.KeyCode.T, -- Reset rotation to 0
RemoveAll = Enum.KeyCode.L, -- Delete all your props
CancelPlacement = Enum.UserInputType.MouseButton2, -- Right click to cancel
UndoPlacement = Enum.KeyCode.Z, -- Undo last placement
EditMode = Enum.KeyCode.X, -- Toggle edit mode
},
```
* **PropsLocation**: the folder which the Props is located, **you will likely never need or want to touch this**
* **PropSaving:** props will be saved, which means if you place a prop down, leave the game and rejoin, it will still be in the same position and orientation. Edit mode will still be available for these props
* When Enabled is set to `true`, props will be saved to a designated DataStore
* This DataStore name should be configured under `DataStoreName`, and can be any string, for example:
```luau theme={null}
DataStoreName = "propsaving94134",
```
* `SaveInterval` is how many seconds to autosave the props. It's recommended to have this at `60` seconds (1 minute) to avoid overloading
***
### Keybinds
> You can set custom keybinds for specific actions, for example confirming a placement can be done by pressing a key rather than your mouse
#### How to change a keybind?
1. You must keep the `Enum.KeyCode` section of the keybind allocation, this is vital
2. In Roblox Studio, if you remove the original keycode, and begin typing, it will show a popup box allowing you to look at all of the keycodes available. Alternatively, you can just type the keycode in
3. For example, going from `ChangeCategory = Enum.KeyCode.C` to `ChangeCategory = Enum.KeyCode.G`
For help on keycodes, please visit [**Roblox's documentation**](https://create.roblox.com/docs/reference/engine/enums/KeyCode)
#### How to change a button?
1. You must keep the `Enum.UserInputType`section of the button allocation
2. In Roblox Studio, if you remove the original input type, and begin typing, it will show a popup box allowing you to look at all of the options available
3. For example, going from `ConfirmPlacement = Enum.UserInputType.MouseButton1` to `ConfirmPlacement = Enum.UserInputType.MouseButton2`
For help on user input types, please visit [**Roblox's documentation**](https://create.roblox.com/docs/reference/engine/enums/UserInputType)
### Keybinds
* `ConfirmPlacement`: set to **MouseButton1** by default, which is the left click. For mobile users, they will be required to **DOUBLE TAP** in order to place
* `ChangeCategory`: set to `C` by default, when this keybind is pressed, the category will change (if any are available)
* `NextProp`: this will switch to the next prop available for the user, and will cycle through the interface. Set to `E` by default
* `PreviousProp`: this will switch to the previous prop for the user, and will cycle through the interface. Set to `Q` by default
* `RotateProp`: this will rotate the current prop at the number of degrees previously specified in the `RotationIncrement` setting
* `ResetRotation`: this will reset the orientation of the current prop you're about to place to 0, helpful if you don't want to rotate at the current orientation. Set to `T` by default
* `RemoveAll`: this will delete all of your props, with a popup confirmation beforehand. Set to `L` by default
* `CancelPlacement`: this will cancel the placement, set to `MouseButton2` by default
* If you'd like to change this to a keybind, change `CancelPlacement = Enum.UserInputType.MouseButton2,` to something like `CancelPlacement = Enum.KeyCode.V,` - make sure to keep the comma in place
* `UndoPlacement`: deletes the last prop you placed, in order, so if you placed a Chair, Box, Table, it will remove Table, then Box, then Chair if you were to press this keybind 3 times. Set to `Z` by default
* `EditMode`: disables placement flow and allows you to click on any of the props that you own (or have permission to edit), to delete, move or copy it. Set to `X` by default
### How do I add a new category?
1. Copy the template below
```luau theme={null}
Name = {
Teams = {}, -- Teams allowed to use this category
Ranks = {} -- Ranks allowed to use this category
},
```
2. Place it under the categories that already exist in the configuration, so it looks like the following:
```luau highlight={10-13} theme={null}
Config.Categories = {
Construction = {
Teams = {}, -- Teams allowed to use this category
Ranks = {255} -- Ranks allowed to use this category
},
Office = {
Teams = {}, -- Teams allowed to use this category
Ranks = {}, -- Ranks allowed to use this category
},
Name = {
Teams = {}, -- Teams allowed to use this category
Ranks = {} -- Ranks allowed to use this category
},
}
```
3. Then simply edit the Name by changing `Name` to whatever you want, like `Outdoor` or `Classroom`
### How do I edit a category's permissions?
1. To add a new team, simply put the team name inside the `Teams = {},` table. You **must have the team in your actual game** and name it correctly here.
2. Let's say we have a team called `Site Staff`, and we want them to be able to use the Construction category
3. Simply type `"Site Staff"` in the Teams section of the category, so Construction now looks like this:
```luau highlight={3} focus={3} theme={null}
Config.Categories = {
Construction = {
Teams = {"Site Staff"}, -- Teams allowed to use this category
Ranks = {255} -- Ranks allowed to use this category
},
Office = {
Teams = {}, -- Teams allowed to use this category
Ranks = {}, -- Ranks allowed to use this category
},
}
```
#### Adding a new rank to a category
1. To add a new rank ID, simply just type in the role ID inside the `Ranks = {},` table. Any users with this rank ID will be permitted to use the category
2. Let's say we have a role ID numbered `200`, and we want to add it to the Construction category, which already has `255` in the Ranks (in this example)
3. Simply add `200` to the Ranks section, as shown below
```luau highlight={4} focus={4} theme={null}
Config.Categories = {
Construction = {
Teams = {}, -- Teams allowed to use this category
Ranks = {255, 200} -- Ranks allowed to use this category
},
Office = {
Teams = {}, -- Teams allowed to use this category
Ranks = {}, -- Ranks allowed to use this category
},
}
```
### Adding a new prop
Let's use the props table below as an example:
```luau theme={null}
Config.Props = {
{
Name = "Barrier",
Model = Config.Settings.PropsLocation.Barrier,
Category = "Construction",
},
}
```
1. Copy the template below, and add it underneath the most previous prop, which in this example is `Barrier`
```text theme={null}
{
Name = "Example",
Model = Config.Settings.PropsLocation.Example,
Category = "Construction",
},
```
2. **Now, our props table looks like this:**
```text highlight={7-11} theme={null}
Config.Props = {
{
Name = "Barrier",
Model = Config.Settings.PropsLocation.Barrier,
Category = "Construction",
},
{
Name = "Example",
Model = Config.Settings.PropsLocation.Example,
Category = "Construction",
},
}
```
3. You can edit the name of the prop under the `Name` section
4. The `Model` must be pointing to the name of the actual object (union, part, model), found under the **Props** folder. The props folder is located under `Placeables-ja` when you load in the product, as seen below
**All props that you add to the system must be under the Props folder**
5. You can change the Category by editing the `Category` section to match one of your categories found in `Categories`
### Add a prop with a space in the instance name
If you have a prop with a space in the instance (model) name, then set it to the following when identifying the location of the model
**For example:**
```luau highlight={3} focus={3} theme={null}
{
Name = "White Box",
Model = Config.Settings.PropsLocation["White Box"],
Category = "Office",
},
```
# Features
Source: https://docs.jadevelopment.co.uk/placeables/features
A quick runthrough of all of the current features available for Placeables
Manage everything from props, categories, permissions, keybinds, limits, notifications, all in one place
Organise props into categories, for example props for construction, or classrooms
Ghost previous, prop rotation and customisable grid snapping, plenty of options are available including undo and delete all
Dedicated system for editing props, allowing users to click any prop they own to move, delete or copy it. Authorised users can also edit any prop
Each category can be locked to specific group ranks or in-game teams, restricting access to certain props
Add configurable role IDs or individual user IDs that can bypass limits, cooldowns, restrictions
Players can have a configurable maximum number of props available to place, as well as a server prop cap
Dedicated built in support with adjustments for anyone using a mobile device
Fully fledged customisation for mapping keybinds to actions however you want, for example changing Cancel Placement
Ability to easily insert your own assets and props with ease, even without configuring them individually
With Placeables, you will be given exclusive items and assets from our range of packs
Ability to implement restricted area or zones that prohibit placement of any prop within it
Optional DataStore saving if you'd like props that have been placed to save continuously
# Installation
Source: https://docs.jadevelopment.co.uk/placeables/installation
Instructions on how to set up Placeables with your game. Follow for step by step details on how to install the system correctly
## Getting started
You must enable **HTTP Requests** and **API Services** within the Game Settings tab in Roblox studio. This is located under the Security section. Please ensure this is enabled before opening a ticket with our support team
After downloading the product, you will be given a RBXM file. Drag this into the Workspace of your game
Move onto the [group configuration](https://docs.jadevelopment.co.uk/placeables/configuration#group) to continue
If you are in the [**jaDevelopment**](https://www.roblox.com/communities/14665139/jaDevelopment#!/about) group (as a member), you can instantly test out the product as soon as you purchase
Once you have updated your group settings, you will be able to use the system as it is in its current state
Now, continue onto the rest of the [configuration](https://docs.jadevelopment.co.uk/placeables/configuration#placement) process.
# Configuration
Source: https://docs.jadevelopment.co.uk/promptly/configuration
Promptly has endless options for configuring and customising the product to your liking
```lua theme={null}
GroupId = 0, --<< A Roblox group id
RoleIds = {1, 255}, --<< Every role id that will have permission to edit the message and modify settings
```
**RoleIds** will contain a list of Group Role IDs that will be allowed to interact with the system as a whole, including editing of messages and in-game settings
For example, `RoleIds = {1, 2, 3, 4, 5, 6, 255}`
```lua theme={null}
DefaultMessage = "Replace this with a message", --<< Server startup message
```
Any message inside of the `""` will appear as the default message when the server starts up
```lua theme={null}
CommandPrefix = "!", --<< Command prefix (can be anything)
SetCommand = "setmessage", --<< Command to set the message
NotifyCommand = "notify", --<< Command to notify all users
ClearCommand = "clearmessage", --<< Command to clear the message
```
The **CommandPrefix** is what declares a command that will be sent in chat. For example, I would say "`!setmessage TEXT HERE`" in chat, followed by the text
You can edit the **SetCommand**, **NotifyCommand**, and **ClearCommand** to anything you want
For example, I can change the **SetCommand** from `"setmessage"` to `"set"`
```lua theme={null}
SetCommand = "set", --<< Command to set the message
```
```lua theme={null}
FilterEnabled = true, --<< Enable or disable message filtering (we are not responsible if your game is moderated)
HarshFilter = false, --<< When set to true, numbers and combinations of letters could be flagged by Roblox automatically ->>
```
* When **FilterEnabled** is set to `true`, the Roblox chat filter will automatically apply for any messages that appear.
* When **FilterEnabled** is set to `false`, it could put your Roblox game at risk of being moderated, however it could be unlikely unless reported or flagged
We are **not** responsible if your game is taken down for not having the filter enabled
```lua theme={null}
Cooldown = 3, --<< Cooldown between setting messages again (affects the entire server)
```
* You can change the cooldown to any amount of seconds (including `0`)
* When a message is sent, the cooldown will be active until that number of seconds runs out, which prevents all other administrators from submitting updates to the banner
* You can set the cooldown to `0` if you wish for there to be no delay between updating messages
```lua theme={null}
Cooldown = 0, --<< Cooldown between setting messages again (affects the entire ser
```
```lua theme={null}
ServerTimezone = "BST", --<< Server wide timezone (check the list of available timezones at the bottom)
MultipleServers = true, --<< Enable or disable the ability to have messages be communicated across servers
WebhookUrl = "", --<< Discord webhook URL (leave blank if not in use)
```
When **MultipleServers** is set to `true`, the system will automatically send any messages or updates to settings across all servers in your game
**WebhookUrl** is a discord webhook URL from a channel
**ServerTimezone** is similar to Vision, where you can enter a specific timezone.
These timezones will be available at the bottom of the configuration, and also found here:
# Timezones
GMT - Greenwich Mean Time\
BST - British Summer Time\
UTC - Coordinated Universal Time\
CET - Central European Time\
CEST - Central European Summer Time\
EET - Eastern European Time\
EEST - Eastern European Summer Time\
ET - Eastern Time\
EST - Eastern Standard Time\
EDT - Eastern Daylight Time\
CT - Central Time\
CST - Central Standard Time\
CDT - Central Daylight Time\
MT - Mountain Time\
MST - Mountain Standard Time\
MDT - Mountain Daylight Time\
PT - Pacific Time\
PST - Pacific Standard Time\
PDT - Pacific Daylight Time\
IST - Indian Standard Time\
JST - Japan Standard Time\
AEST - Australian Eastern Standard Time\
AEDT - Australian Eastern Daylight Time\
ACST - Australian Central Standard Time\
AWST - Australian Western Standard Time
```lua theme={null}
Customisation = { --<< Customise the look of the system
SelectedTheme = "Normal",
TextColour = Color3.fromRGB(255, 255, 255),
BorderColour = Color3.fromRGB(255, 255, 255),
DefaultVisibility = true,
BorderEnabled = true,
ThemeColour = Color3.fromRGB(31, 34, 40),
Transparency = 0,
GhostMode = false,
UIPosition = 1,
NotificationSound = "rbxassetid://96867813755421",
UIOffset = 0,
},
```
* **SelectedTheme**: automatically set to `"Normal"`
**There are no other themes available. When introduced, they will be included here**
* **TextColour**: changes the colour of the message banner text
This must be a RGB colour, as shown below. You can edit this using **Roblox's built in colour picker**
```lua theme={null}
Color3.fromRGB(255, 255, 255)
```
* **BorderColour**: changes the colour of all elements with a border enabled
This must be a RGB colour, as shown below. You can edit this using **Roblox's built in colour picker**
```lua theme={null}
Color3.fromRGB(255, 255, 255)
```
* **DefaultVisibility**
When set to `true`, the banner will automatically be visible when the server starts up
```lua theme={null}
DefaultVisibility = true,
```
When set to `false`, you will **not** be able to view the message banner, but you can still **click** in the area where the banner is. You will still be able to interact with the banner as usual
```lua theme={null}
DefaultVisibility = false,
```
* **BorderEnabled**
When set to `true`, it will enable all borders around visual elements\
When set to `false`, it will disable all borers around visual elements
* **ThemeColour**: this is a specific theme colour that applies to all visual elements
This must be a RGB colour, as shown below. You can edit this using **Roblox's built in colour picker**
```lua theme={null}
Color3.fromRGB(255, 255, 255)
```
* **Transparency**: sets the transparency (see throughness) of the message banner
This can be between 0 and 1 e.g `0.5`
```lua theme={null}
Transparency = 0.5,
```
* **GhostMode**
When set to `true`, the entire banner will be invisible, **except** the message text
The message banner will just have the text with **no** background
When set to `false`, the banner will be reset to its original state, which depends on other configuration options
* **UIPosition**
When set to `1`, it will be right at the top of the screen, as demonstrated below
When set to `2`, it will be underneath the core Roblox UI, as demonstrated below
* **NotificationSound**: this is a sound effect that plays when a notification occurs in the system
The sound effect provided **may not play** until the licence owner obtains the sound effect from us (similar to Radiolink installation)
\
You can find the sound effect here: [Promptly Sound Effect](https://create.roblox.com/store/asset/96867813755421/Promptly-SFX)
You can enter your own ID, or leave it as `0`
```lua theme={null}
NotificationSound = "rbxassetid://0",
```
* **UIOffset**
Adjusts the vertical (Y-axis) position of UI elements. **Increase this value to move UI components** further down the screen for custom placement.
**Example 1**: `UIOffset = 0`
**Example 2**: `UIOffset = 25`
```lua theme={null}
VisionPeriods = false, --<< When set to true, the system will automatically detect when Vision periods take place, and will update the banner
VisibleOnEvent = true, --<< When set to true, the banner will be visible when a Vision period or scheduled message happens
```
**VisionPeriods**\
When set to `true`, the system will detect when lessons occur on [Vision MIS](https://jadevelopment.co.uk/products/jadevelopment-vision), and will update the banner in time for the lesson's start time\
\
**VisibleOnEvent**\
When set to `true`, the banner will be visible when a Vision period or scheduled message happens. For context, if the banner is not visible, it will make itself visible when a scheduled event occurs.
By default, scheduled messages are **not** enabled
* You can have **multiple messages** that automatically send to everyone on the banner and will notify them at the time
* The messages will send at the specified time of the timezone that has been selected prior
```lua theme={null}
ScheduledMessages = {
Enabled = false,
Messages = {
{
Title = "Welcome to the game",
Time = "12:00",
Message = "Message here",
},
}
}
```
**To make a new message, simply copy the message template below:**
```lua theme={null}
{
Title = "Hello",
Time = "13:00",
Message = "Message here",
},
```
**Then, simply paste it underneath the previous message:**
```lua theme={null}
ScheduledMessages = {
Enabled = false,
Messages = {
{
Title = "Welcome to the game",
Time = "12:00",
Message = "Message here",
},
{
Title = "Hello",
Time = "13:00",
Message = "Message here",
},
}
}
```
# Features
Source: https://docs.jadevelopment.co.uk/promptly/features
A quick runthrough of all of the current features available for Promptly
Access to modifying system settings, such as command name, default messages, filter, webhook logging and more
Built in, modifiable (command name and prefix) chat commands to set and clear messages on the system
Access to system settings and message control is dependent on linking the system with a Roblox group ID, and group role IDs
Administrators can edit the banner message using chat commands, or using the built in panels for settings
Promptly has various built in customisation settings, such as themes, text colour, visibility, transparency, positioning and plenty more
Within configuration, you can set up scheduled messages which appear at a specific time of day, depending on the selected timezone
You can enable Vision integration, and all of your periods will automatically sync to Promptly, and will post a notification and message to users
You can send and update settings from one server, and it will sync across all other servers in your game
We have provided a seamless, enjoyable user experience when interacting with the interface, including delivering smooth animations
The configuration has options for filtering text. You can disable filtering, although we are not responsible for any moderation action
Promptly instantly logs any actions, such as setting messages, or updating settings straight to your Discord webhook
Built into the configuration is a configurable cooldown, in seconds, which is the time between waiting to submit another action/message
# Installation
Source: https://docs.jadevelopment.co.uk/promptly/installation
Instructions on how to set up Promptly with your game. Follow for step by step details on how to install the system correctly
## Getting started
You must enable **HTTP Requests** and **API Services** within the Game Settings tab in Roblox studio. This is located under the Security section. Please ensure this is enabled before opening a ticket with our support team
After downloading the product, you will be given a RBXM file. Drag this into the Workspace of your game
Head to the link below and click the **Get Audio** button to add them to your inventory
[https://create.roblox.com/store/asset/96867813755421](https://create.roblox.com/store/asset/96867813755421)
Move onto the [Group settings](https://docs.jadevelopment.co.uk/promptly/configuration#group) to continue
Once you have updated your group settings, you will be able to use the system as it is in its current state
Now, continue onto the rest of the [configuration](https://docs.jadevelopment.co.uk/promptly/configuration) process.
# Configuration
Source: https://docs.jadevelopment.co.uk/radiolink/configuration
Enhance your Radiolink set up by completing the configuration process, and modify how you want your users to interact with the system
## MasterConfig
The MasterConfig is where the majority of Radiolink configuration takes place. You will be able to manage **general settings**, **channels**, **battery**, **alerts**, **group information** and **interface settings**.
**Enter a group name of your choice** (this can be anything)
```python theme={null}
["Group Name"] = "jaDevelopment", --Set to your groups name
```
**You can have as many channels as you wish**, an example of this section is shown below
```python theme={null}
["Channels"] = {
--[[
-Add as many channels as you would like
- The names in this config are not shown on the radio ui which is configured in the dock settings
- Channels cannot have the same names
- Channels cannot have the same ids
]]
["General"] = {
["ChannelId"] = 1 --The id for this channel (similar to radio frequency)
},
["Off Topic"] = {
["ChannelId"] = 2
},
},
```
**To create a new channel**, copy the following and insert it under the previous channel in the configuration:
```python theme={null}
["Staff"] = { -- Name of the channel
["ChannelId"] = 3 -- Different channel ID
},
```
**As I have now created my new channel**, it should look like this:
```python theme={null}
["Channels"] = {
--[[
-Add as many channels as you would like
- The names in this config are not shown on the radio ui which is configured in the dock settings
- Channels cannot have the same names
- Channels cannot have the same ids
]]
["General"] = {
["ChannelId"] = 1 --The id for this channel (similar to radio frequency)
},
["Off Topic"] = {
["ChannelId"] = 2
},
["Staff"] = {
["ChannelId"] = 3
},
},
```
Battery makes the radio able to operate. There are **multiple settings** for this, including how long it takes the Radio’s battery to deplete by one percent and how fast it charges as well. You can also set the default amounts for this.
Radios in the dock that are \*\*not \*\*at 100% are shown with a yellow LED to show they are still charging.
If a radio runs out of battery you will be **unable to send or receive messages**.
```python theme={null}
["Battery"] = {
["Enabled"] = true, --Will the battery charge change
["Charge"] = 100, --The starting charge for the battery (from 0 - 100)
["Drain"] = 3, --How many minutes until 1 percent is drained
["Recharge"] = 1, --How many minutes until 1 percent is charged
},
```
Alerts can be customised to be named differently with **different use cases** they could be used to alert staff of medical emergencies, require security or on call alerts.
```python theme={null}
["Alerts"] = { --Allows staff members to submit alerts across the system
["Enabled"] = true,
["Name"] = "Emergency Alert"
--More settings for alerts are configured in the individual dock settings
},
```
```python theme={null}
["Roles"] = { --How the system determines the users role
["Enabled"] = true,
["Group"] = 14665139 -- (Group ID)
},
```
At the bottom of the **MasterConfig,** there are UI settings where you can **disable statuses**, \*\*notifications \*\*or the **ability to pin the UI.** As well as this you can customise the UI colours with the provided options.
```python theme={null}
["Notification Sounds"] = true, --Allows notification sounds to be on or off
["Pin UI"] = true, --Allows the ui to be pinned
["Statuses"] = true, --Options to change status such as busy, available etc
["Primary Colour"] = Color3.fromRGB(26, 25, 23), --Change this to any colour
["Secondary Colour"] = Color3.fromRGB(35, 35, 35), --Change this to any colour (a slightly darker tone of the Primary colour is ideal)
["Message Colour"] = Color3.fromRGB(35, 35, 35) --Sets the background colour of the radio message
```
## DockConfig
Each dock featured in the Radiolink folder has a \*\*configuration \*\*called 'DockConfig', and is currently set to preset configuration settings. **Customise these options** with the following information that might help you
The whitelist can be**toggled on (true) or off** **(false)**, and supports individual players or groups. You can have an unlimited amount of players and groups. Players can be listed with a mixture of user ids and usernames.
When the whitelist value is set to **false**, anyone can use the radio dock. If you are restricting the radios to groups, or users, please enable this feature by setting it to **true**
**When configuring groups, enter as many role IDs** in the\*\*\*\* as you wish, separated by a comma
```python theme={null}
[14665139] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 255},
```
```python theme={null}
["Permissions"] = {
["Whitelist"] = false,
["Users"] = { --Supports usernames and user ids
936285498, --osctrcx
295531036, --AIIAIDAIIIAIAIAIAIIA
37110638, --rfpb
163323741, --comtrlo
},
["Groups"] = { --Add as many groups as you would like and role ids
[14665139] = {255, 254},
}
},
```
```python theme={null}
["Pickup"] = {
["Type"] = "ClickDetector", --ClickDetector or ProximityPrompt
["MaxDistance"] = 10 --How many studs away to pickup a radio
},
```
**ClickDetector**
**ProximityPrompt**
!\[Oi\[i[o Avi](/images/oi\[i\[o.avif)
You can specify **what permissions the docks** from that radio has in **each of those channels.** If the dock doesn't have access to that channel you don’t need to list it at all.
*The name of the channel does not need to be the name you set for it in the master config.*
**Default configuration for dock channels and permissions:**
```python theme={null}
["Channels"] = { --This setting does not apply if global channels are enabled
--[[
-Don't include channels that you would like hidden for radios in this dock
-Add as many channels as you would like
-Set the following permission levels for channels:
1. Recieve
2. Send
]]
["General"] = {
["Permissions"] = {"Send", "Recieve"},
["ChannelId"] = 1 --The id you set your channel to in the main config
},
["Off Topic"] = {
["Permissions"] = {"Send", "Recieve"},
["ChannelId"] = 2
},
},
```
Don't include any channels that you would like **hidden** for radios in this dock
To create a new channel **for this dock**, copy the following code or one of the channels from the Channels section:
```python theme={null}
["Staff"] = { -- Channel name
["Permissions"] = {"Send", "Recieve"},
["ChannelId"] = 3 -- Channel id
},
```
**With my new piece of code**, I can add it to the already existing list of channels, so it becomes
```python theme={null}
["Channels"] = { --This setting does not apply if global channels are enabled
--[[
-Don't include channels that you would like hidden for radios in this dock
-Add as many channels as you would like
-Set the following permission levels for channels:
1. Recieve
2. Send
]]
["General"] = {
["Permissions"] = {"Send", "Recieve"},
["ChannelId"] = 1 --The id you set your channel to in the main config
},
["Off Topic"] = {
["Permissions"] = {"Send", "Recieve"},
["ChannelId"] = 2
},
["Staff"] = { -- Channel name
["Permissions"] = {"Send", "Recieve"}, -- Permissions the channel WILL have
["ChannelId"] = 3 -- Channel id
},
},
```
If enabled, the alerts **can be turned off only for radios in one dock** and you can also **specify which channels the alerts go to,** even if the radios in that dock do not have permission to view or send messages in the channels you set. As long as its in the master config, it will function as intended. You can also set it to false instead of a table and it sends it to all channels across the system
**Default configuration for dock alerts**
```python theme={null}
["Alerts"] = {
["Enabled"] = true, --Can radios from this dock utilise the feature?
["Channels"] = {1} --Every channel ID the alerts will send to, separated by a comma
--[[
- The radio does not need any access to any of the channels
- Set to false to broadcast to all channels - ["ChannelId"] = false
]]
},
```
To send alerts from the dock to **all channels**, simply remove all channel IDs from within the next to "Channels"
\
**For example:**
```python theme={null}
["Channels"] = false
```
# Features
Source: https://docs.jadevelopment.co.uk/radiolink/features
A quick demonstration of all of the current features available for the latest Radiolink version
Check out our [walkthrough demonstration](https://youtu.be/sBiP58fYCnw), showcasing the various features that Radiolink provides
Access to an unlimited number of **channels**, with custom names, permissions and settings
Modify and create an unlimited number of **docks**, with permissions for each of them
You can customise who has **access** to docks, including any amount of users and groups
Our radios are **compatible** with legagy chat, as well as the most recently new chat service
You can toggle **battery** simulation, and how long it takes for the battery to deplete/charge
You can freely transform and **move** the radio interface to where you'd like
You are able to **pin** the interface, so it doesn't disappear when unequipping the radio tool
Access to emergency **alerts** and user ability to send and receive a location & description
You can toggle your **status** to Available, Busy or Unavailable using the button provided
Toggle channels with ease to quickly **switch**, whenever you please. Available with B keybind
# Installation
Source: https://docs.jadevelopment.co.uk/radiolink/installation
Comprehensive instructions on how to set up Radiolink with your game. Follow on for step by step details on how to install the system correctly
## Getting started
You must enable **HTTP Requests** and **API Services** within the Game Settings tab in Roblox studio. This is located under the Security section. Please ensure this is enabled before opening a ticket with our support team
After downloading the product, you will be given an RBXM file. Drag this into the Workspace of your game
Drag the 'SERVER STORAGE UNGROUP' model into **ServerStorage**. Then, right click and press 'Ungroup' **OR** press CTRL+U when selecting the model
Head to each of the links below, and click the **Get Audio** button to add them to your inventory\
[https://create.roblox.com/store/asset/120476404256367/Radiolink-Pickup-SFX\\\\](https://create.roblox.com/store/asset/120476404256367/Radiolink-Pickup-SFX\\\\)
[https://create.roblox.com/store/asset/119990098740860/Radiolink-Notification-SFX\\\\](https://create.roblox.com/store/asset/119990098740860/Radiolink-Notification-SFX\\\\)
[https://create.roblox.com/store/asset/136148474634635/Radiolink-Beep-SFX\\\\](https://create.roblox.com/store/asset/136148474634635/Radiolink-Beep-SFX\\\\)
[https://create.roblox.com/store/asset/129478418290516/Radiolink-Alert-SFX](https://create.roblox.com/store/asset/129478418290516/Radiolink-Alert-SFX)
You should now be able to test and make sure the Radio is working in its current state
Now, move onto the [Configuration section](/radiolink/configuration) to continue
# Configuration
Source: https://docs.jadevelopment.co.uk/shiftsync/configuration
Under the product folder provided, there will be Configuration script. Please open it to continue with this stage of the set up process
If you are struggling with configuration, please only contact support **after** you have checked each section. If you do not understand something, you are more than welcome to reach out, however **we'd prefer that you read the information provided first**.
**The following categories correlate, in order, to the configuration in the script provided.**
* Place your Roblox group ID, as the example shows below
```lua theme={null}
["Group Id"] = 14665139, -- Group ID allocated to system
```
* In your Roblox group, you will have roles which have their own ID. **Please add all of the role IDs** where those roles are specifically meant for staff
* All IDs must be placed inside of the , **followed by a comma for each of them**, as shown
```lua theme={null}
["Staff Ids"] = {1, 2, 250},
```
* **Please do the same for roles that are intended to have the administrator** privileges in the system. Administrators can manage all of the data, and access the dashboard
```lua theme={null}
["Admin Ids"] = {254, 255},
```
* Please create a random string of **letters and numbes for your data key**. This data key stores shifts, departments, time-off requests and clock-in data
**An example is shown below:**
```lua theme={null}
["Data Key"] = "MyShiftSync-Data",
```
* Please repeat the same for the following other data keys:
```lua theme={null}
["Player Data Key"] = "MyShiftSync-Players",
["Shifts Data Key"] = "MyShiftSync-Shifts",
```
When you change these data keys, **it will reset all of your data**, so please keep that in mind
* You can enable `Vision Names`, which will fetch version `v.1.7` roleplay names. These names will be displayed on some areas of the system
Vision Names will **only work when you have it in your game**
```lua theme={null}
["Vision Names"] = true,
```
* You can add a webhook straight from your Discord server, and we'll pick up any events and send them straight to the webhook that belongs to the channel!
Learn more about [**discord webhooks**](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks), and how to set them up
```lua theme={null}
["Webhook URL"] = "",
```
* `Interaction` is the type of interaction that takes place for users
* We have two options for interactions, `ProximityPrompt` (a popup asking you to hold E) or `ClickDetector` (click on the fingerprint sensor)
```lua theme={null}
["Interaction"] = "ClickDetector",
```
* You must also **set the maximum distance** required to interact with the terminal
* The lower the number, the closer you must be to interact
```lua theme={null}
["Maximum Distance"] = 5,
```
* We offer one theme, which is the beloved **Blurple**. We intend to add many more in the future, which you will be able to change to those by editing the configuraton element
* If you enter anything incorrect, it will just default to **Blurple**.
```lua theme={null}
["UI Theme"] = "Blurple",
```
* The zoom time is the amount of seconds it takes for your camera to zoom in/out of the terminal
```lua theme={null}
["Zoom Time"] = 0.5,
```
* You have the option to require terminal users to enter a PIN number when first accessing the system
* To enable this, change `false` to `true`
* To edit the PIN number, replace the `"1234"` with anything of your choosing, for example `"0491"`
```lua theme={null}
["Requires PIN"] = {Enabled = false, PIN = "1234"},
```
* You can also enable `External Notifications` - which display messages to users if they are not currently interacting with the system
* This feature is important for users who would like to be notified for certain events (e.g break ending, shift starting)
## Boot Delay
* Some intensive or "laggy" games may struggle with loading times, causing ShiftSync to be tempremental upon booting
* To mitigate this, we've added a `Boot Delay`, which waits that many seconds before the system it initalised
* By default, this is set to `0`, as the system usually loads without issues
```lua theme={null}
["Boot Delay"] = 0,
```
## Breaks and Clocking Out
* You are able to **toggle the ability for users to take breaks**
* To disable breaks, change `true` to `false`
```lua theme={null}
["Breaks Allowed"] = true,
```
You can also **disable or enable this in-game** using the system settings panel in Settings
* You can set the **minimum number of minutes** for a break to be classified as a break within the system
* This is required to be at least `1` by default
* For example, you could set this to 5, and it would require users to wait 5 minutes before the break can be ended
```lua theme={null}
["Minimum Break Time"] = 1,
```
* You can set the **maximum number of minutes** a break can be
* Once a break has reached the maximum, it will automatically end, and will notify the user
```lua theme={null}
["Maximum Break Time"] = 3,
```
* You can set the **minimum minutes** required before clocking out
## Core Settings
* You are able to **change the timezone** for the system based on any of the options below
BST - British Summer Time
GMT - Greenwich Mean Time
EET - Eastern European Time
CET - Central European Time
ET - Eastern Time
EST - Eastern Standard Time
CT - Central Time
AEST - Australian Eastern Standard Time
AEDT - Australian Eastern Daylight Time
```lua theme={null}
["Timezone"] = "BST",
```
* You can **toggle the dashboard**, which removes the ability to view staff information, departments, shifts and reports
* All users would only be able to access the main functions: clock in, clock out, start/end breaks
* To disable this, change `true` to `false`
```lua theme={null}
["Dashboard Enabled"] = true,
```
* You can toggle **debug mode**, which allows us (developers) and support team to identify any issues you are facing
* You may be advised to enable this if you find yourself in need of support
* It is recommended to leave this disabled (as `false`) by default
```lua theme={null}
["Debug Mode"] = false,
```
* You can choose how often the **system data is periodically saved**
* We recommend leaving this at 300 seconds (5 minutes)
**Data will automatically save every 5 minutes**, and will save when the server shuts down
```lua theme={null}
["Save Data"] = 300,
```
* You can customise the **cooldown**, which prevents users from interacting with core functions (home page buttons), and notification popups
* This is required to be at least `1` by default
```lua theme={null}
["Cooldown"] = 3,
```
## Shifts
* You can customise the **minimum shift length** (in minutes), which is how long a shift must be when creating it
* This must be at least `1` minute by default
* For example, `Minimum Shift Length` is `60`, which means a shift must be at **least 60 minutes**, otherwise it cannot be created
```lua theme={null}
["Minimum Shift Length"] = 1,
```
* You can customise the **maximum shift length** (in minutes), which is the maximum duration of a shift
* This must be at least `1` minute by default
* For example, `Maximum Shift Length` is `120`, which means a shift **cannot be more than** 120 minutes
```lua theme={null}
["Maximum Shift Length"] = 540,
```
**The default maximum shift length is 9 hours**
## Miscellaneous
* You can **toggle the ability for users to be able to request time off**
* To disable time off requests, change `true` to `false`
```lua theme={null}
["Allow Timeoff Request"] = true,
```
* You can set the **number of days in which a time off request start date must be within**
* For example, set the `Approval Window Days` to `7`, means that any time off requests must start within 7 days
```lua theme={null}
["Approval Window Days"] = 7,
```
* You can set the **minimum number of days required for a time off** request
* By default, this is required to be at least `1` day
* For example, if you set minimum days off to `14`, it would mean users must have time off for at least 14 days
```lua theme={null}
["Minimum Days Off"] = 1,
```
* You can set the **maximum number of days available for a time off** request
* The overall maximum is `365` days (`1 year` )
* For example, if you set the maximum number of days to `60`, it will allow users to **have their end date reach 60 days ahead of the current date**, therefore *offering a maximum of 60 days off*
```lua theme={null}
["Maximum Time Off Days"] = 30,
```
* You can toggle **description required** for when **users create time off** requests
* When disabled, users are **not** required to add a description for time off
* To disable this, change `true` to `false`
```lua theme={null}
["Description Required"] = true,
```
* You can customise the reasons for requesting time off
* The maximum number of reasons off is `5`
**The following options are provided by default:**
```lua theme={null}
["Timeoff Types"] = {
"Personal Leave",
"Training Leave",
"Holiday Leave",
"Relocation Leave",
"Other Leave",
}
```
To edit one of the above, just replace the contents within the `" "` \
For example, if I want to change `"Other Leave"` to `"General Leave"`
```lua theme={null}
["Timeoff Types"] = {
"Personal Leave",
"Training Leave",
"Holiday Leave",
"Relocation Leave",
"General Leave", -- I have edited this one
}
```
# Dashboard
Source: https://docs.jadevelopment.co.uk/shiftsync/fp/dashboard
The Dashboard provides real-time insights into staff activity, showing each team member’s current status and their last clock-in time. It also allows you to view and manage time off requests, displaying both pending and approved requests in one place.
## Clocking Status
The **Clocking Status** tab provides a real-time summary of all users on the system. It shows how many staff members are clocked in, clocked out, on breaks, or missing. You can also view a detailed list of each team member, including their current status and the exact time their status last changed.
This tab does not display all users on the system. It only shows anyone who has joined your game session, even if they have since left. **Note that this data resets when the server closes or restarts.**
## Time Off Requests
You can view all pending and approved time off requests. See how they appear on your dashboard below:
When a staff member submits a request, it will appear in the **Pending** section. Clicking the request will move it to the **Approved** section.
Once a request is approved, you \*\*cannot move it back to Pending \*\*status
* You can also hover over a request to view its full details, including the start and end dates, duration, status, reason, and description.
Once a request is approved, it will appear in the **Approved** tab. You can hover over it to see all its details.
Once you click an approved request, it will be **entirely deleted from the system**
## Users Dashboard
The **Users** page displays dropdown tabs for each status: **In**, **Out**, **On Break**, and **Missing**.
* The tab with the most users will be shown first, highlighting the most relevant information.
* **For each user in a given status, you can view:**
* Username and group rank
* Total number of departments and the names of each department
* Last registered activity
# Departments
Source: https://docs.jadevelopment.co.uk/shiftsync/fp/departments
The Departments page provides a centralized view of all departments, showing the name, total users, ID, and roles within each. You can also create, manage, and take action on departments directly from this dashboard.
To create a department, follow the steps below:
Enter a **department name**, this can be anything you choose
Select a **color** to assign to the department, which can help with identification.
You must provide a **HEX** colour code input, meeting the following requirements:
* The input must include a **#** before the **HEX** code
* For example `#4b4dbf`
* You can use a color picker, such as the [**Google Color Picker**](https://share.google/kliTy2XdvbuNEtcFf), to choose your preferred colour
Select the **roles** from your Roblox group that you want to assign to the department. You can choose as few or as many as you like, but at least one role must be assigned.
* A list of roles from your Roblox group will be automatically fetched for you to select from.
Once you have completed the steps above, press **Send Request** and the system will handle the rest.
* After the department is created, it will appear in the **Departments** tab on the left.
* The system will also notify you if the creation was successful.
Congratulations! You created a department within **ShiftSync**
Once you have created a department, you can view it by selecting it from the list of departments available to you.
## Department Overview
You will see a detailed summary of the department’s information, **including**:
* Department name
* Department colour
* Department roles (group ranks)
* Total Users
* A list of users that are in the department
## Add a user to a department
To add a new user to a department, click the **Add User** button in the **Department Overview**.
You must enter a valid user ID for the system to successfully add the user to the department.
A valid user ID must meet all of the following criteria:
* **A user that exists on Roblox**
* **A user that is a staff member**
* A user with a group role that has staff permissions
* **A user that exists in your ShiftSync database**
* The user must have previously used your ShiftSync system
The system will notify you if the user ID you entered **does not meet the criteria outlined above**.
Once you know you have met the criteria outlined above, select **Confirm** to continue. The user will be automatically added to the department.
On the **Department Overview**, you can delete a department using the **Delete Department** button.
You will **NOT** receive a confirmation prompt, so please proceed with caution.
Once a department is deleted, it **cannot** be restored and will be permanently removed
# Home Page
Source: https://docs.jadevelopment.co.uk/shiftsync/fp/homepage
Home page provides a central dashboard where you can access all areas of ShiftSync. You can clock in, take breaks, view your data, request time off, and manage your personal settings
On the home page, you can easily clock in, clock out and take breaks depending on the system settings
The **left sidebar** displays your **current shift**, and by clicking on it, you’ll see all of**your scheduled shifts**
You can also:
* Check your **clock-in status**, including when you clocked in and how long you’ve been active
* View your **registration date** with the system
* See your **group rank** associated with the system
The home page also includes a tab showing your \*\*total minutes \*\*(both for today and overall), along with the **number of clock-ins** for the day and in total
# Reports
Source: https://docs.jadevelopment.co.uk/shiftsync/fp/reports
Reports provide a wide range of insights and data to help monitor and evaluate staff performance. ShiftSync offers various types of reports, including top clock-ins by employee, daily summaries, individual employee reports, and much more.
View the top clockins by employee
View a summary for a specific day
View any employee's summary
View a summary on time off statistics
View the top hours by employee
View the date of registration for staff members
## Report Contents
This report ranks employees according to their **total number of clock-ins**.
* Each user is assigned a rank based on their overall clock-in count.
* The report also displays each user’s department, highlighting the performance of the department as a whole.
This report provides a **summary of all activity for a specific day**, including total clock-ins, hours worked, breaks, and shift details.
* Each user is shown with their name, clock-ins for that day, hours worked, total break minutes, and the number of shifts attended.
You can select any day within the \*\*past 30 days \*\*using the dropdown provided
This report provides a detailed summary of an employee, including their total clock-ins and shift history.
**Each employee report displays:**
* Username
* When they registered with your ShiftSync system
* All departments they are part of
* Group rank
* Total clockins, total hours, total break minutes, and total shifts completed
You can **view all staff members registered on your system**, regardless of whether they are currently in-game.
Some data from an active game session **may not appear in the employee report**, as the report may not reflect real-time updates
## Shift History
> The Shift History shows **each shift associated with the staff member**, including the shift name, date pattern, start and end times, and any assigned role within the shift.
This report provides a summary of time off requests, including **both pending and approved** requests, with details on duration, type, and status.
* Each time off request displays the user’s name, start date, end date, total days, request type, duration, and who last modified the request.
This report presents all time off requests on a single page and **does not retain any deleted requests.**
This report ranks employees **based on their total hours worked** overall.
Each user's record displays:
* A rank
* Username
* Group rank
* Total hours
* Total minutes
* Departments
This report **ranks employees by their date of registration from oldest**
Each user's record displays their rank, username, group rank, date of registration, and how many days they have been registered with your ShiftSync system
# Settings
Source: https://docs.jadevelopment.co.uk/shiftsync/fp/settings
Settings allow ShiftSync users to customise and enhance their experience. From disabling notification sounds to managing system access, everything you need is located in one place
## Client Settings
Client settings are saved, so any changes you make will persist without needing to be adjusted again.
When enabled, you will receive **sound effects** for notifications displayed to you.
You can customize the **notification duration**, allowing you to read them for longer if needed.
The minimum duration is `1` second, and the maximum is `10` seconds
When enabled, the interface (terminal) will automatically **zoom out** /hide after 5 minutes of inactivity.
When enabled, you will hear **sound effects** when hovering over elements of the UI.
You may not be able to hear the sound effects if you (the licence owner) do not own the sound effects. See the [installation instructions](https://docs.jadevelopment.co.uk/shiftsync/installation) for more details
When enabled, you will receive **off-system notifications**, such as alerts shown outside the main interface
* This feature is important for users who would like to be notified for certain events (e.g break ending, shift starting)
## System Settings
Unlike client settings, system settings **do not save**. They are intended for in-game customization for various purposes without modifying studio configuration.
When enabled, users will be **unable to take breaks**.
Any users already on breaks when this setting is changed, will be taken off the break and notified
You can customise the **maximum break duration** in minutes.
The maximum break time must be at least `1` minute
You can customise the **minimum required minutes** for a clock-in.
When disabled, **time off requests** cannot be submitted by any user on the system.
When enabled, all users must enter a **4-digit PIN** set by administrators before accessing clock in/out functions.
You can customize the **4-digit PIN code** (e.g., `1234`).
When disabled, only **administrators** will have access to the system, and all staff will be **kicked off**, with the terminal disabled for them.
# Shifts
Source: https://docs.jadevelopment.co.uk/shiftsync/fp/shifts
Shifts allow you to assign staff members to specific days of the week based on their group rank or other requirements. You can create shifts with defined patterns, set start and end times, and create assignable roles to manage staff responsibilities.
To create a shift, follow the steps below:
You must provide a **title** for your shift. This can be anything you choose.
You can select the **days** for the shift to take place; however, this is optional. If no days are selected, the shift will appear as a **Single Day**, which can occur at any time.
You must enter a **start and end time** in the format `HH:MM`
You can select **group ranks** fetched from your Roblox group. Users within these ranks will be automatically assigned to the shift.
Selecting group ranks is **not mandatory**, as you can also add users individually.
You must enter a **host name**. This does not need to be a Roblox username, and you may leave it as **N/A** if preferred.
Once you have confirmed your shift, press **Send Request**, and the system will handle the rest
* After the shift is created, it will appear in the \*\*Overall Shifts \*\*tab on the left.
* The system will also notify you if the creation was successful.
Congratulations, you have created a shift!
If the system catches an error during creation of the shift, **you will be notified of the issue** before the shift is created
Once you have created a shift, you can view it by selecting it from the list of shifts available to you.
## Shift Overview
You will see a detailed summary of the shift's information, **including**:
* Shift name
* Shift ID
* Shift host
* Shift timings
* Shift group ranks
* Shift pattern
* List of users assigned to the shift
## Add a user to a shift
To add a new user to a shift, click the **Add User** button in the **Shift Overview**.
You must enter a valid user ID for the system to successfully add the user to the department.
A valid user ID must meet all of the following criteria:
* **A user that exists on Roblox**
* **A user that is a staff member**
* A user with a group role that has staff permissions
* **A user that exists in your ShiftSync database**
* The user must have previously used your ShiftSync system
The system will notify you if the user ID you entered **does not meet the criteria outlined above**.
Once you know you have met the criteria outlined above, select **Confirm** to continue. The user will be automatically added to the shift.
## What is an assignable role?
> An **assignable role** is a task, responsibility, or specific part of a shift that users are assigned to, indicating what they should be doing (for example, "Cleaning").
To create an assignable role, follow the steps below:
Interact with the **Create Role** button to get started.
Enter a **shift role name**, representing the task, responsibility, or specific part of the shift (for example, "Cleaning").
Optionally, you can add **user IDs** as well as **group ranks** to assign to the role.
**You must use the field by entering each ID, separated by a comma.**
* For example: `29550294, 28509301, 587103001`
A valid user ID must meet all of the following criteria:
* **A user that exists on Roblox**
* **A user that is a staff member**
* A user with a group role that has staff permissions
* **A user that exists in your ShiftSync database**
* The user must have previously used your ShiftSync system
Selecting group ranks will automatically assign all users within those ranks to the shift role.
Once you have completed the above steps, press **Confirm** to add the assignable role to the shift.
If there are any issues during submission, the system will notify you
After creating a role, you can return to the **Shift Overview** and select **View Assigned Roles** at the top right.
Users assigned to shift roles may not appear immediately until they are recognised by the system.
On the **Shift Overview**, you can delete a shift using the \*\*Delete Shift \*\*button.
You will **NOT** receive a confirmation prompt, so please proceed with caution.
Once a shift is deleted, it **cannot** be restored and will be permanently removed
## Your Shifts
On the [Home Page](https://docs.jadevelopment.co.uk/shiftsync/fp/homepage), you will be able to view your current shift
* If you do not have any shifts, it will say "**No more shifts today**"
* If you have an upcoming shift today, it will say "\*\*Shift starting at \*\*`XX:XX`"
* If you are currently engaged in a shift, it will display **the progress**, and **how many minutes are left**
> You can interact with the **Current Shift** button, which prompts the **Your Shifts** panel
Your Shifts displays a summarised dashboard of any shifts you are assigned to, including other members on the shift
### Shift Summary
> The **Shift Summary** displays the shift pattern, shift name, shift ID, host, start and end times, a list of assigned users, and any assignable roles.
# Time Off
Source: https://docs.jadevelopment.co.uk/shiftsync/fp/timeoff
All users of the system can request time off, provided the feature is enabled. You can submit requests by specifying the reason, start date, and end date.
You **may not be able to submit time off requests**, depending on your organisations configuration and permissions
## How to submit a time off request
Interact with the **Request Time Off** button located on your centralised home page dashboard.
**Organisations can manage the types of time off you can request, but the default options are listed below**
* Personal Leave
* Training Leave
* Holiday Leave
* Relocation Leave
* Other Leave
You must select a **time off type**, which will serve as the reason for your request.
You must select a start date from the provided options
Your organisation might have specific settings which may prevent you from selecting a start date (e.g the start date might be too far in the future, might be too short notice etc)
You must select an end date from the provided options
Your organisation might have specific settings which may prevent you from selecting an end date (e.g the end date you are looking for might be too far in the future)
Optionally, you can enter a **description** to provide additional context for your time off request.
Your organisation may not require descriptions
Once you have completed the steps above, press **Send Request** and the system will do the rest
If there are any issues with your inputs, the system will notify you of the issue
Once you have submitted the request, and it went through, you can check the status by clicking on [**Your Profile**](https://docs.jadevelopment.co.uk/shiftsync/fp/yourprofile#time-off-requests)
# Your Profile
Source: https://docs.jadevelopment.co.uk/shiftsync/fp/yourprofile
The Your Profile page gives you quick access to key information about your role in the system. From here, you can view the departments you belong to, including other members within those departments, as well as track your time off requests with details on their approval status and who last modified them.
The **Departments** section of your profile displays all the departments a manager or administrator has assigned to you.
* Here, you can view each department along with the total number of users in it.
## Department Summary
The **Department Summary** provides key details about each department you are in, including its name, ID, colour, and total number of users.
**In addition, you can:**
* View all members within the department
* See each group rank associated with the department
This gives you a complete overview of the department’s structure and its members.
When you submit a **time off request**, it will appear in the **Time Off** section of your profile. This section displays the request details, including the start date, end date, type of leave, and its current status.
## Time Off Summary
The **Time Off Summary** provides detailed information about your request, helping you stay up to date at all times. Along with the start date, end date, type of leave, and total days, you can also view:
* The current status (pending or approved)
* The request description
* Who last modified your request
## Time Off Approval
Once your request is approved, **you can view its updated status** along with the details of who modified or approved your time off request.
# Installation
Source: https://docs.jadevelopment.co.uk/shiftsync/installation
Instructions on how to set up ShiftSync with your game and organisation. Follow for step by step details on how to install the system correctly
## Getting started
You must enable **HTTP Requests** and **API Services** within the Game Settings tab in Roblox studio. This is located under the Security section. Please ensure this is enabled before opening a ticket with our support team
After downloading the product, you will be given a RBXM file. Drag this into Workspace of your game
Head to the links below, and click the **Get Audio** button and add them to your inventory. This will allow you to hear them in-game.
[https://create.roblox.com/store/asset/105474290615373/Hover\\](https://create.roblox.com/store/asset/105474290615373/Hover\\)
[https://create.roblox.com/store/asset/96867813755421/Notification\\](https://create.roblox.com/store/asset/96867813755421/Notification\\)
[https://create.roblox.com/store/asset/97881181065416/Success](https://create.roblox.com/store/asset/97881181065416/Success)
Move onto the [group settings](https://docs.jadevelopment.co.uk/shiftsync/configuration#group-settings) to continue
Once you have updated your group settings, you will be able to use the system as it is in its current state
Now, continue onto the rest of the [configuration](https://docs.jadevelopment.co.uk/shiftsync/configuration) process.
# Behaviour Dashboard
Source: https://docs.jadevelopment.co.uk/visionmis/fp/behaviourdashboard
Behaviour dashboard allows staff to monitor and report on the following: incidents, merits, behaviour points, isolations and detentions
Incidents allow you to **report on severe occurrences of bad behaviour**. This page allows you to see all current behavioural incidents, and allows you to submit them as resolved - or delete them.
Allows staff to enter plenty of detail, such as time of incident, summary, and any other students involved
Student will be notified when they have been logged as in an incident
Shows the date of which the incident was logged on, the severity (marked as a colour), type of behaviour, and the student's name
Shows a full list of information such as participants, event at which it occurred at, etc. Allows you to **Delete the Incident**, or **Resolve it** when necessary.
The student will be notified when the incident has been **deleted** or **resolved**
Merits allow you to **report on positive occurrences of good behaviour**. This page allows you to see all current logged merits
Allows staff to enter plenty of detail, such as reason/attribute, amount awarded, and location
Students will be notified when they receive a merit
Shows the date of which the merit was logged on, the student's name, the amount awarded and who logged the merit
Behaviour Points allow you to report on **negative occurrences of bad behaviour**. This page allows you to see all current logged behaviour points
Allows staff to enter plenty of detail, such as reason/attribute, amount awarded, and location
Students will be notified when receiving a behaviour point
Shows the date of which the behaviour point was logged on, the student's name, the amount awarded and who logged the behaviour point
Isolations allow you to **restrict a player to a specific room** within the school for an act of behaviour which could prevent them from being in lessons. We have developed an isolation system through Vision, allowing staff to log an isolation, which forces the student to be teleported into an isolation room.
Allows staff to input information such as time of incident, student, severity and isolation reason. Similar to the incident logging, however this can be used for much more severe acts of malicious behaviour.
You can now select a **preset location** for where the student should be teleported to
Students will be notified when they have been isolated/relocated
Upon logging an isolation, **you can manage the isolation** by clicking on it when it appears in the dashboard
You are able to respawn the user or delete the isolation from records.
Detentions allow you to log a player for a scheduled detention
Allows staff to input information reason, type and location
You can view the detention in the dasboard after being logged
All of these behavioural **occurances will be logged to your Discord server** if you have a webhook configured in the setup process
# Bot Features
Source: https://docs.jadevelopment.co.uk/visionmis/fp/botfeatures
A comprehensive list of all of the jaVision bot commands, and features, including attributes, permissions and parameters.
### Adding Roles
To add permission roles to the system, use the `/permissions add` command followed by a **Discord Role Id** and the permission type. Any member with the role that has been added will receive the permission type selected.
### Removing Roles
Removing a permitted role in the system is as easy as running the `/permissions remove` command followed by the **Discord Role Id** and the existing permission type. Anybody with the role and no other permitted roles will now be unable to run any permission locked commands.
### Viewing Permitted Roles
If you need to check which roles have been configured to have certain permissions, use the `/permissions list` command. When you have ran the command you will be able to view all Admin roles and all Staff roles. If a role was to have been deleted, you will be able to view the id to remove the role.
### System Reset
If you need to quickly reset every setting, use the `/reset` command to remove **all** settings relating to the Vision bot inside of your guild. You will be asked before you continue to reset the system.
The reset command **does not** reset any in-game Vision data such as student merits and behaviour points
### System Refresh
If you update your in-game datastores within your settings, the cached datastore names will become out of sync and will no longer display up-to-date information from when you run the command.
To fix this, run the `/refresh-databases` command. Upon running it, you will be prompted before refreshing the database names and once the command has been ran, it will become unavailable for **2 minutes.**
*We cache datastore names so we do not have to request the current datastore names every time a command has been ran.*
### System Updates
If you need to update any settings which you provided when you setup the system, you can use the `/update` command to edit any of the initial settings.
You will be asked which setting you want to update, the settings include:
| **Information** | **Description** |
| :-------------- | :-------------------------------------------------------------------------- |
| Experience Id | The experience id of your game which contains the Vision System. |
| OpenCloud Key | An API key to interact with the in-game Vision System from Discord. |
| Community Id | The id of your Roblox group/community. |
| Log Channel Id | The id of a log channel within your Discord server to send all bot logs to. |
### Command Cooldowns
By default, we enforce cooldowns on some of our commands to prevent spam and abuse, we may also add cooldowns to any commands that may use a lot of resources to run. The current commands on our cooldowns are found below:
| **Command** | **Duration** |
| ----------------- | :--------------------------------- |
| behaviour-point | 30 seconds |
| merit | 30 seconds |
| detention | 30 seconds |
| incident | 30 seconds |
| isolate | 30 seconds |
| timetable | 30 seconds |
| refresh-databases | 2 minutes |
## Behavioural Commands
This page outlines the information needed for using the behavioural commands. It is important that you read the information provided on this page carefully before contacting support that your system doesn't work.
When **any** behavioural command is ran (includes merit, isolation, detention etc) the command will take affect in-game **instantly** as long as the server is currently running and the student is in-game when the command has been ran.
All behavioural commands will log to the specified log channel, if it has been provided, in the same format as the normal in-game Vision format.
Please note, if the Roblox server is not running or the student is not in-game the year group and lifetime analytics will **not be updated.**
### Isolations
The `/isolation` on command will automatically team, respawn and teleport the student if they are in-game. A notice will also appear on the student's screen alerting them of the isolation, and the behavioural dashboard will update to reflect the newly added isolation.
**The command offers 5 options for usability, they are listed below:**
| **Option** | **Description** |
| ---------------- | ------------------------------------------------------------------- |
| Student Username | The username of the student beign isolated. |
| Reason | A reason for the isolation, pick from the listed few. |
| Summary | A summary of the incident. |
| Destination | The location to send the student — **view more information below.** |
| Comments | Any extra information relating to the situation. |
When isolating a student, the destination you provide **must match an in-game location**. If the location does not match, the student will not be brought to the Isolation room correctly. You can either retrieve it via the named spawns in the workspace system or view the current set ones from the in-game UI.
### Incidents
The `/incident` command will add to the incident dashboard as normal with the ability to resolve them and view other students involved.
**The command asks for 3 required fields and 2 non-required.**
| **Option** | **Description** |
| ---------------- | ----------------------------------------------------------------------------------- |
| Student Username | The username of the student mainly involved in the incident. |
| Reason | A reason for the incident, pick from the listed few. |
| Severity | The severity of the situation, level 3 will appear **red** in the dashboard. |
| Summary | A full summary of the incident that occurred. |
| Others | Any other students involved — Roblox usernames **separated by commas** |
### Detentions
When the `/detention`command is ran, the specified student will be alerted in-game when they receive a detention, as well as the behavioural dashboard updating accordingly. The current command options are:
| **Option** | **Description** |
| :--------------- | :------------------------------------------------------------------------------------------------------------------------- |
| Student Username | The username of the student receiving the detention. |
| Reason | A reason for the detention, pick from the listed few. |
| Type | The detention type, pick from the listed few. *Option picked has no command affect, purely visual based.* |
| Location | The location of where the detention will be, e.g. Ma2 or Sc3. *Option picked has no command affect, purely visual based.* |
| Comments | Any other pieces of information the staff member wishes to provide regarding the situation. |
### Merits & Behaviour Points
The `/merit`and `/behaviour-point`commands act very similarly, they both take the same command options and act the same way in-game apart from the on-screen UI being different.
| **Option** | **Description** |
| :--------------- | :----------------------------------------------------------------------------------------- |
| Student Username | The username of the student receiving the merit/behaviour point. |
| Reason | A reason for the merit/behaviour point, pick from the listed few. |
| Amount | The amount of merits/behaviour points to give. |
| Location | The location of where the merit/behaviour point was given. |
| Comments | Any other pieces of information the staff member wishes to provide regarding the situation |
## Student Management
**When any student management command is ran the command will take affect in-game instantly**, as long as the server is currently running and the student is in-game when the command has been ran.
All student management commands will log to the specified log channel, if it has been provided, in the same format as the normal in-game Vision format.
Please note, if the Roblox server is not running or the student is not in-game the year group and lifetime analytics will not be updated.
If your game has timeout or uniform passes enabled via game passes — if a student joins the game and owns either pass after having their pass removed manually they will **automatically receive the pass again**. This is because we can't remove the functionality of a paid gamepass.
If you **do not** want this to happen, disable gamepass purchasing to keep it admin applied only.
### Roleplay Name
The `/roleplay-name` command allows students to change their own roleplay name, as well as staff members being able to change student usernames. You must provide the new name along with the student name *if changing someone else's name.*
All names are filtered by our service. However, we cannot guarantee that users won't bypass the system; therefore, we accept no responsibility for any inappropriate names being sent to Roblox servers.
### Timeout Pass
The `/timeout-pass` subcommands let staff members check if a student has a timeout pass and allows admins to grant or remove passes. **This change will take affect instantly** giving the student the timeout pass icon and removing it when it has been revoked.
### Uniform Pass
The `/uniform-pass` subcommands let staff members check if a student has a uniform pass and allows admins to grant or remove passes. **This change will take affect instantly** giving the student the uniform pass icon and removing it when it has been revoked.
### User Searching
Using the `/search` command allows staff members to search for a student to view their information. The command also allows you to view other staff members; however, it displays different details. Each search displays the user's avatar with a random coloured background.
Any staff member who has not joined the game since implementing the Vision 1.7 update into your game will be \*\*incorrectly \*\*marked as a student member. This issue is unavoidable and we are aware of it.
When you provide a student's username, it will display the information found in the table below.
| Information | Description |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| Roblox Information | The student's user id, username and community rank, |
| Roleplay Name | The name the student has set for themselves. |
| Account State | Whether the student is able to access the in-game Vision system. [***Toggled via the Users & Security page.***](/visionmis/fp/usersandsecuritypage) |
| Gender | The gender the student picked when creating their Vision account. |
| Student Passes | The passes the student has (timeout, uniform). |
| Merits | The number of merits the student has. |
| Demerits | The number of behaviour points the student has. |
| Isolations | The number of isolations the student has had. |
When you provide a staff member's username, it will display the information found in the table below.
| **Information** | **Description** |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Roblox Information | The staff member's user id, username and community rank, |
| Roleplay Name | The name the student has set for themselves. |
| Account State | Whether the staff member is able to access the in-game Vision system. [***Toggled via the Users & Security page.***](/visionmis/fp/usersandsecuritypage) |
| Gender | The gender the student picked when creating their Vision account. |
### Personal Profiles
The `/search` command allows user's to retrieve their own personal information. The command works the same as User Searching and provides the same information.
## School Overview
Any analytic related commands will only show data from the time of the Vision 1.7 update due to mismatching data properties. **We sincerely apologise regarding this minor inconvenience**
### Analytics
To view statistics across all year groups, you can use the `/analytics` command to retrieve information from a specific time period. A specific date can be selected, or you can view lifetime data.
### Year Analytics
Statistics from a specific year group can easily be viewed using the `/year-analytics` command followed by the year group you want to view. All data returned is lifetime, not specific dates.
Year groups will automatically be filled in and are cached for 2 minutes to prevent spam of requests to Roblox API's. If you change your year groups in-game, they will eventually update in Discord after the caching period has ended.
You can manually type out a full year groups name rather than waiting for options to load.
### Staff Attendance
Easily view staff attendance by using the `/attendance` command which will list all staff members whom attended on the specific day requested.
### Timetable
If you set your in-game timetable correctly via settings, running the `/timetable` command, with a valid day, will output an automatically generated timetable in the format of an image as well as a downloadable PDF file.
# Browse All Staff
Source: https://docs.jadevelopment.co.uk/visionmis/fp/browseallstaff
Browse All Staff page displays every registered member of staff within the session - featuring data such as: their username, staff name, role, school reference, and current status.
The **Browse All Staff page** is not interactive and just displays information about staff in-game
# Browse Students Page
Source: https://docs.jadevelopment.co.uk/visionmis/fp/browsestudentspage
The Browse Students Page allows direct access to every student, including their individual student profiles. This can be accessed by hovering over a specific student, and clicking the 'View' button
Browse Students: **This allows staff/administrators instant access to every student in the server**. To view a [**student profile**](/visionmis/fp/studentprofile), you must click the View button when hovering over a student
**Each student has an individual tab featuring their Username**, Year Group & User/Vision ID
# Create Profile
Source: https://docs.jadevelopment.co.uk/visionmis/fp/createprofile
This is the first page all Vision users will see if they have not registered with the organisation that the system is within
* Users must enter a valid **Roleplay Name**
* Users must enter a **Gender** based on the selections available, or their own
* Users must **confirm** the profile they are creating
This information **can be changed** from the student's perspective, or if modified via the **Users & Security** panel, available to staff & administrators.
\
The Gender **cannot** be modified after being submitted
# Event Page
Source: https://docs.jadevelopment.co.uk/visionmis/fp/eventpage
The Event Page gives direct access to managing alerts, notices & announcements for specific groups, or the entire school.
**This page features:**
Allows you to add a personal to-do list as a reminder for a specific task for that day
Notices allow you send alerts, reminders and other information to groups or entire school
Allows you to create personalized events for individual groups, or the entire school
# Home Page
Source: https://docs.jadevelopment.co.uk/visionmis/fp/homepage
The Home Page is the primary page where data across the entire school and individual year groups can be viewed and analysed
**This page features:**
Easy to access, relevant features that guide users to where they need to be within seconds
Displays a list of active events for the user. Students and staff can see their scheduled lessons
Displays a list of manual tasks to be completed
Displays global Vision alerts which are set by Vision Engineers
Notices that are distributed by the school which can be forwarded to students, staff or individual year groups
Displays the current enrolment, current attenance for the specific selected year group
A sneak peak into [**Elevate**](https://elevate.jadevelopment.co.uk/), our up and coming - new management information system
Shows the behaviour points, isolations and merits for the day and overall for the selection made
# Lesson Overview Page
Source: https://docs.jadevelopment.co.uk/visionmis/fp/lessonoverviewpage
This page includes some of the most informative features staff may utilise, especially for logging of registers, and exporting of student data & registers.
**With this page, you can:**
Provides a `JSON` table with each student which has been registered for that lesson, and the status of which they were logged as (e.g Present)
Provides a `JSON` table with every student registered for that lesson/year group
**This page also displays**
Displays time, abbreviation and room
Displays time, abbreviation and room
Displays time, subject, and room
A quick link to the behavioural section
A list of students in that lesson
### Lesson Register Page
Allows staff & teachers to **log an entire class of students** based on three available options (e.g **Absent, Late & Present**). Previous data from other lessons is also displayed
This lesson attendance data is **sent to your discord server** if configured
# Login & User Agreement
Source: https://docs.jadevelopment.co.uk/visionmis/fp/loginanduseragreement
The login page is an access gateway for users to use Vision when first booting up. It features a user licence agreement which all users must agree to before continuing.
**User Licence Agreement**: An agreement **all users** (staff, students & administrators) must agree to before booting/logging into Vision. This is a policy thoroughly enforced by jaDevelopment, and must be acknowledged by all users.
**Login**: Users will be prompted with a login page once agreeing to jaDevelopment policies and all other conditions. Users can opt to **Remember** their login details - to avoid having to login repetitively when opening the system.
Users can login almost instantly with the **Autofill username** option. This allows seamless access to Vision once clicking **Log in**.
On the right hand side, a prompt for needing assistance or update information is available to anyone with inquiries.
# On Calls
Source: https://docs.jadevelopment.co.uk/visionmis/fp/oncalls
On calls is an optional feature, allowing administrators to be alerted when an 'on call' incident has been logged by a member of staff
After filling out the appropriate details, the alert will be logged to the Alerts page, available under the System dropdown tab.
Only administrators or role IDs in the on call alerts section of the configuration will receive the alert that an on call has been requested
Appropriate individuals **can attend an on call**, **resolve** or **delete** the oncall.
Once resolved/deleted, **the original staff member who requested assistance** will be informed that **action has been taken against the request.**
# School Details Page
Source: https://docs.jadevelopment.co.uk/visionmis/fp/schooldetailspage
School Details Page: displays all information regarding your school, including: name, logo ID, school type, registered years, and group ID
This is a **non-interactive** page, and does not require interference to manage. It is purely there for realistic purposes, displaying all information for those interested
| **Entity** | **Description** |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| School Name | Your school name |
| Short Name | The shortened version of your school name |
| Opening dates | Automatically set to Ongoing |
| Logo | The decal ID displayed across the system |
| Establishment number | A number that is automatically set, not yet allocated directly to schools. This is due to be enhanced into a fully-fledged system to where you can search for establishments with Vision in the future |
| School type | Primary, Secondary, Academy, etc. |
| Registered years | Each year group that is featured as part of logging and management |
| Group ID | The Roblox group ID for your school |
### Session & Vision Details
| **Entity** | **Description** |
| :------------- | :-------------------------------------------------------- |
| Time/Date | Displays the current date and time |
| Lesson | Displays the current lesson, if any are ongoing |
| Vision Version | Displays the current version of Vision you have installed |
| Place ID | Roblox place ID |
| Session Status | Inactive/Active depending on time |
# Staff Attendance
Source: https://docs.jadevelopment.co.uk/visionmis/fp/staffattendance
Staff Attendance page allows easy access to logging activity for entire groups of staff, or just individuals.
**Staff attendance page allows for three separate forms of logging for each member of staff**
**Present** (on-time, in session)
**Late** (arrived late, in session)
**Absent** (did not arrive, not in session)
Leadership also have the ability to: **Mark all as absent**, or **Mark all as present**
This attendance data is accessible using the [Vision discord bot](/visionmis/installation#staff-attendance) through the **/attendance** command
# Student Profile
Source: https://docs.jadevelopment.co.uk/visionmis/fp/studentprofile
Student Profile allows staff to view specific insights on a student, including: attendance, behaviour, activities & timetable
### **Student Profile Home**
* Username (e.g Roblox)
* Roleplay Name (e.g Alex)
* Year (e.g Year 10)
* Name (e.g Alex W)
* Gender (e.g Male)
* Vision Student ID (e.g 295531036)
* Student number (left blank)
* Total Merits
* Total Behaviour Points
* Total Isolations
**View Behaviour Dashboard** directs the user to the behaviour dashboard
**Copy Student Data**: Displays all the information, data & insights on a student. For example, their gender, username, roleplay-name, student icon & behavioural data figures
The **Copy Student Data** feature allows staff to export data on a student which could be formatted into data tables, charts & other formats
**Record Planned Attendance:** This allows staff & administrators to manually configure planned attendance, whether that be the Present or Absent status. This can be configured at any point, without having to manually take a register.
Planned attendance can only be configured for lessons which attendance is marked in (e.g Lunch would not be a scheduled period in which attendance would be monitored)
### Attendance
Attendance within the [**Student Profile**](/visionmis/fp/studentprofile) allows staff to analyse, report on and monitor the current lessons attended for a student, along with the total no. of attended in comparison to the school average.
The attendance page also displays which lessons have been marked as present/absent for the student.
### Behaviour
Behaviour within the [Student Profile](/visionmis/fp/studentprofile) allows staff to analyse and view individual data statistics for the student you are focusing on. This includes:
* **Behaviour Points** (Total for the Student, and a School Average)
* **Isolations** (Total for the Student, and a School Average)
* **Merits** (Total for the Student, and a School Average)
The Behaviour page also allows staff to issue out instant merits & behaviour points to students without filling out forms.
### Activities
Activities within the [**Student Profile**](/visionmis/fp/studentprofile) **allows staff to view upcoming trips/activities** which the school has purposefully planned out. This can be controlled & configured via the [**Vision Settings**](/visionmis/fp/visionsettings) page.
### Timetable
Timetable within the [**Student Profile**](/visionmis/fp/studentprofile) allows staff to a students' current lesson, including: time, subject & location. The timetable page also features an **interactive, session timetable** which highlights their lessons for the day, depending on their year group.
# Timetable Page
Source: https://docs.jadevelopment.co.uk/visionmis/fp/timetablepage
The Timetable Page is likely to be the most accessible page across Vision - featuring a multi-functional, complex & advanced timetable system
This page features unique and never seen before interfaces, providing multiple purposes. Take a read at some of the features it includes below:
This container features consistent details about the current lesson which is occurring. Including: **time**, **type of lesson** (e.g form, period 1), and **timetable status**. This status depends on if the session has begun or not
By **hovering over a lesson**, you can view more details & information about a specific lesson, such as who is leading it, where and the abbreviated name.
By **clicking on a lesson**, you can view the [**Lesson Overview Page**](/visionmis/fp/lessonoverviewpage)**,** providing more features such as register taking, viewing students in the lesson & more
The **Claim Lesson** button allows staff to claim a lesson they wish to have. When activated, staff will be able to hover over a lesson and opt to claim/unclaim any they wish.
For the timetable to function as intended, all information regarding each lesson should be configured through the Weekly timetable page in [**Vision Settings**](/visionmis/fp/visionsettings)
# Users & Security Page
Source: https://docs.jadevelopment.co.uk/visionmis/fp/usersandsecuritypage
Features a multi-functional list of students, staff and administrators. Allows you to disable their account, change roleplay name, and kick them. This is an excellent feature for administration.
### User Details
This container shows all the information about a user (**e.g Name, Gender, Rank, & Account status**). It also features information such as most recent logins
### Disabling Account
Administrators are able to disable any user's account, if they are below their rank
**Administrators** cannot disable a user's account if they are a higher rank
### Name Changes
Administrators can change any user's roleplay name
# Vision Settings Page
Source: https://docs.jadevelopment.co.uk/visionmis/fp/visionsettings
The Vision Settings Page provides some basic settings, data and other information for administrators to manage, this includes: session data, command logs, week timetable and more.
### Session Data
Displays information about the current period, time and session status
### Help & Support
An informative guide to how and where to report issues with the system, or general concerns
### School Activities
Allows administrators to set school trips or activities for students. This can be viewed through the [**Activities**](/visionmis/fp/studentprofile#activities) page located in student profiles.
### General Settings
Allows modification of personal, client settings such as screen size, and nametag preferences
### Command Logs
Displays recent commands that have been ran by staff members, with the arguments provided as well as time of the execution
### Week Timetable
The timetable management allows for setting lesson details for each day of the week . **Administrators are able to save and configure lessons throughout the week, for each year group.**
* By default, **the timetable will load the current day** and the timetable that has been set
* Administrators can view the dropdown in the top left, and **can select a day of the week**
* **As you toggle through the days, the information will change** depending on the already existing lessons for that day
**As shown below**, the edit lesson popup appears, allowing you to enter lesson information for that specific lesson, for that year group, and that day of the week. After finishing, you can press Save Lesson to save that information.
# Year Group Page
Source: https://docs.jadevelopment.co.uk/visionmis/fp/yeargrouppage
The Year Group Page is the central hub for viewing all vital data collected for an individual year group. Take a look at our excellent data insight & collection features below:
This is the primary location for viewing every student in a year group.
This displays the amount of students in the year group (**per session**), the percentage of students in the year group in comparison to the entire school, and an additional list of students with their active attendance status.
Displays the current lesson for the year group, the **next lesson**, along with the **current lesson** and its details. The lesson details include: scheduled time, subject, and location. The timetable page also features an **interactive visual timetable** which can be highlighted for the specific year group.
Displays the amount of behaviour points, isolations & merits for all of the students in the year group combined. This page also directs users to the [**Behaviour Dashboard**](/visionmis/fp/behaviourdashboard) page.
# Installation
Source: https://docs.jadevelopment.co.uk/visionmis/installation
Comprehensive instructions on how to set up Vision MIS with your game. Follow on for step by step details on how to achieve success in your installation, and set up your Vision discord bot.
If you want to set up the discord bot integration, skip to [discord bot setup](/visionmis/installation#discord-bot-setup)
# Studio Setup
The following instructions are to be used for installing **Vision MIS** into your game through Roblox Studio. Please head to \[link here] for setting up discord integration.
**Ensure you have the licence for this product, through** [our website](https://jadevelopment.co.uk/products/jadevelopment-vision) or our [product hub](https://www.roblox.com/games/9435095450/Product-Hub)
## Getting started
You must enable **HTTP Requests** and **API Services** within the Game Settings tab in Roblox studio. This is located under the Security section. Please ensure this is enabled before opening a ticket with our support team.
After downloading the product file, drag and drop into Workspace under your game
Check to make sure your security settings are correct. You can do this by heading to **Home** in Roblox Studio, then **Game Settings**
## Configuration
Under the **jaVision** folder provided, there will be a Settings script. Please open it to continue.
An example for configuring your group is below
```javascript theme={null}
["GroupID"] = 14665139, -- Group ID
["StaffID"] = 1, -- Minimum staff role ID to use system
["AdminID"] = 1, -- Minimum admin role ID to use more advanced features, for administrators/leadership only
["StudentID"] = 1, -- Maximum student role ID
["SchoolName"] = "jaDevelopment", -- School name
["SchoolType"] = "Secondary", -- Type of school (ie. primary, secondary, academy)
["IconID"] = 0, -- Custom school logo ID
```
| **Options** | **Description** |
| ----------- | ------------------------------------------------------------------------------------------------------------------------- |
| GroupID | The ID of your Roblox group |
| StaffID | The minimum role ID a user has to be to access the staff version of Vision |
| AdminID | The minimum role ID a user has to be to access specific features, such as timetabling, settings, etc |
| StudentID | The maximum role ID a user has to be to be considered a student (e.g **10+** for staff, **9** **and below** for students) |
| SchoolName | Your specific school name |
| SchoolType | Type of school (e.g primary, secondary, academy) |
| IconID | A designated decal image ID for your school, appears on all Vision assets/features |
```javascript theme={null}
["VisionPlayerDataStoreKey"] = "RANDOMKEY-Players", -- Change this to anything of your choice (stores player data)
["VisionSettingsDataStoreKey"] = "RANDOMKEY-Settings", -- Change this to anything of your choice (stores general vision settings)
```
You are required to have unique **data store keys**, which are a series of random words or numbers that are used to identify and store data within your game.
| **Options** | **Description** |
| -------------------------- | -------------------------------------------------------------------------------------------------- |
| VisionPlayerDataStoreKey | A random key of your choosing. Saves player data for the system |
| VisionSettingsDataStoreKey | A random key of your choosing. Saves [vision settings](/visionmis/fp/visionsettings) for your game |
A webhook is a **discord integration** that allows you to send authorised messages to a discord channel from an external application, in this case, **Vision MIS.**
Learn more about [discord webhooks](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks), and how to set them up
```python theme={null}
["VisionWebhookURL"] = "",
```
In-game commands are a recently added feature, allowing you to quickly perform actions without directly interacting with the Vision MIS dashboard.
```javascript theme={null}
["Commands"] = {
-- Chat-based Vision control commands
Enabled = true, -- Enable/disable commands
Prefix = "%", -- Command prefix
["CommandNames"] = {
Isolate = "isolate",
Positive = "merit",
Negative = "demerit",
Relocate = "relocate",
NonUniform = "nonuniform",
Timeout = "timeout",
}
},
```
The code snippet above contains **key attributes** that determine the functionality of the commands
* To **disable commands**, replace `Enabled = true` with `Enabled = false`
* To **change the prefix** for commands, replace `Prefix = "%"` with your own prefix, for example `Prefix = ":"`
* To change a command name, look for the command you want to change under `["CommandNames"]` and replace the command name in the " " with your new command name.
* For example, replace `Positive = "merit"` with `Positive = "positive"`
On call alerts allow specific users with specific roles to receive alerts when a request is made from a member of staff. The configuration for this is very simple
```javascript theme={null}
["OnCallsEnabled"] = true,
["RankIDs"] = {1, 2, 3}, -- Choose every rank ID, separated by a comma which are able to manage on call alerts
```
Within `["RankIDs"] = {1, 2, 3}`, **you can add or remove role IDs**. These IDs are gathered from your Roblox group.
To add a new role to the list, just add the number of the role ID in the `{}` . For example, if I added 255, it would now look like `{1, 2, 3, 255}`
A series of attributes for nametags can be toggled to adjust to your needs
```javascript theme={null}
["NametagsEnabled"] = true, -- Toggle nametags being visible
["Staff Icon"] = true, -- Toggles staff icon above staff nametag
["Admin Icon"] = true, -- Toggles admin icon above admin nametag
```
* **To disable one of the above**, just change `true` to `false`
You are ***no longer required to use gamepass IDs*** to give out non-uniform or timeout passes. To disable the gamepass feature, just set the `GamepassID` to `0` . Otherwise, replace 0 with your gamepass ID if you wish to use this feature.
```javascript theme={null}
["NonUniformPass"] = {
Enabled = false,
GamepassID = 0,
},
```
* **To disable the above**, just change `true` to `false`
```python theme={null}
["Lanyards"] = {
Enabled = true,
ColorTheme = Color3.fromRGB(255, 146, 32),
LogoID = 0
},
```
```javascript theme={null}
["Lanyards"] = {
Enabled = true,
ColorTheme = Color3.fromRGB(255, 65, 32),
LogoID = 0
},
```
When lanyards are set to `Enabled = true`, staff will receive lanyards automatically. Please set this to `false` if you wish or staff **not** to have built in Vision lanyards.
```python theme={null}
["CustomLanyards"] = {
Enabled = false,
GroupLanyards = {
["Sixth Form"] = {
Enabled = false,
CardColourTheme = Color3.fromRGB(34, 67, 35),
LanyardTitleColour = Color3.fromRGB(255, 255, 255),
TextureType = "Student"
},
},
},
```
Custom Lanyards allow you to give out unique lanyards to specific year groups
To create a new group lanyard, copy the following
```javascript theme={null}
["Group Name"] = {
RoleIds = {1, 255},
Enabled = true,
CardColourTheme = Color3.fromRGB(34, 67, 35),
LanyardTitleColour = Color3.fromRGB(255, 255, 255),
TextureType = "Student"
},
```
```python theme={null}
["Group Name"] = {
Enabled = false,
CardColourTheme = Color3.fromRGB(34, 67, 35),
LanyardTitleColour = Color3.fromRGB(255, 255, 255),
TextureType = "Student"
},
```
```python theme={null}
["CustomLanyards"] = {
Enabled = false,
GroupLanyards = {
["Sixth Form"] = {
Enabled = false,
CardColourTheme = Color3.fromRGB(34, 67, 35),
LanyardTitleColour = Color3.fromRGB(255, 255, 255),
TextureType = "Student"
},
["Group Name"] = {
Enabled = false,
CardColourTheme = Color3.fromRGB(34, 67, 35),
LanyardTitleColour = Color3.fromRGB(255, 255, 255),
TextureType = "Student"
},
},
},
```
You have successfully added your own custom lanyard. Ensure to set `Enabled = true` for it to take effect
* `TextureType` is a configurable setting so the lanyard shows various different textures depending on the group type for example.
* Set the TextureType to one of the following: **Senior Leader, Student, Staff or Custom.** For example `TextureType = "Senior Leader"`, or `TextureType = "Custom"`
* You must set your group name correctly. Replace `["Group Name"]` with the name of the **year group** that you want to issue this lanyard to. You can find group settings later on in the configuration.
* For example, if my **Group Name** was **Year 7**, I would set it to `["Year 7"]`
* Add each of the **Roblox group role IDs** into the `RoleIds = {}` separated by a comma. Each of these roles will be given the lanyard
```python theme={null}
["NonUniformPass"] = {
Enabled = false,
GamepassID = 0,
},
```
* **To disable the above**, just change `true` to `false`
```javascript theme={null}
["Isolation"] = {
Enabled = true,
["IsolationTeam"] = nil,
},
```
1. To **enable or disable isolation**, change `true` to `false` or the other way round
2. To make **students be sent to a designated isolation** team, you can replace `nil `with the following `game:GetService("Teams")["TEAM NAME"]` .
3. Replace `["TEAM NAME"]` with the **name of your team** you wish to place students into. For example my isolation team would be `game:GetService("Teams")["Isolation"]`
```javascript theme={null}
["Relocation"] = {
Enabled = true,
TeleportToFolder = "Relocation",
["RelocationTeam"] = nil,
},
```
1. To **enable or disable relocation**, change `true` to `false` or vice versa
2. The `TeleportToFolder` is the **name** of the folder **which contains the parts where students will be teleported to**. By default this is "*Relocation*", however you can copy paste the Relocation folder under the jaVision folder in Workspace and rename it to whatever you want.
3. An example of the above:
4. As mentioned in the **Isolation** tab, you can set a designated team for students to be placed into when they are relocated.
5. For example `["RelocationTeam"] = game:GetService("Teams")["Relocation"],`
```javascript theme={null}
["UI Theme"] = "Light",
["Boot Screen"] = true,
["Session Details Screen Position"] = 1,
["ColourTheme"] = Color3.fromRGB(255, 65, 32),
["Timezone"] = "BST",
```
| Name | Options |
| --------------------------------- | --------------------------------------------------------- |
| `UI Theme` | "Light" or "Dark" |
| `Boot Screen` | `true` or `false` |
| `Session Details Screen Position` | 1 (Top), 2 (Bottom Left) , 3 (Bottom) or 4 (Bottom Right) |
| `ColourTheme` | Click the values in the `fromRGB()` to select a colour |
| `Timezone` | `BST, GMT, EET, CET, ET, CT, AEST, AEDT` |
```javascript theme={null}
["Groups"] = { -- List of student groups.
{ Name = "Year 7", Roles = {1, 255} },
{ Name = "Year 8", Roles = {0} },
{ Name = "Year 9", Roles = {0} },
{ Name = "Year 10", Roles = {0} },
{ Name = "Year 11", Roles = {0} },
{ Name = "SEN", Roles = {0} },
},
```
A group within Vision **is a collection of students**, arranged by **Roblox group role IDs** into their own category. The default template is above.
## How to add a new group
Copy the following and paste it under the last group that is in the list
```javascript theme={null}
{ Name = "Template", Roles = {0} },
```
Your groups should now look like this
```javascript theme={null}
["Groups"] = { -- List of student groups.
{ Name = "Year 7", Roles = {1, 255} },
{ Name = "Year 8", Roles = {0} },
{ Name = "Year 9", Roles = {0} },
{ Name = "Year 10", Roles = {0} },
{ Name = "Year 11", Roles = {0} },
{ Name = "SEN", Roles = {0} },
{ Name = "Template", Roles = {0} },
},
```
Start configuring your group **role ids** or **name**. Each of the role IDs should be separated by a comma within the `{}`
**Lastly** - one of the most relevant sections of the configuration process, is organising your periods/lessons for the regular day
```javascript theme={null}
["ClosureTime"] = "20:55",
["Periods"] = {
{ Name = "Form", Time = "19:10", AttendanceIsLogged = true},
{ Name = "Period 1", Time = "19:25", AttendanceIsLogged = true},
{ Name = "Period 2", Time = "19:40", AttendanceIsLogged = true},
{ Name = "Break", Time = "19:55", AttendanceIsLogged = false},
{ Name = "Period 3", Time = "20:05", AttendanceIsLogged = true},
{ Name = "Lunch", Time = "20:20", AttendanceIsLogged = false},
{ Name = "Period 4", Time = "20:30", AttendanceIsLogged = true},
{ Name = "Period 5", Time = "20:45", AttendanceIsLogged = true},
}
```
`["ClosureTime"] = "20:55",` - **this is the the time the last scheduled lesson ends**\
`AttendanceIsLogged = true` - **this is for lessons, not breaks or lunches**. Set this to `false` if you want to have a lesson or other timteabled session to **not **to be registered
## How to add a new lesson
Copy the template as shown below
```javascript theme={null}
{ Name = "Template", Time = "00:00", AttendanceIsLogged = true},
```
Your **Periods** table should now look like
```javascript theme={null}
["Periods"] = {
{ Name = "Form", Time = "19:10", AttendanceIsLogged = true},
{ Name = "Period 1", Time = "19:25", AttendanceIsLogged = true},
{ Name = "Period 2", Time = "19:40", AttendanceIsLogged = true},
{ Name = "Break", Time = "19:55", AttendanceIsLogged = false},
{ Name = "Period 3", Time = "20:05", AttendanceIsLogged = true},
{ Name = "Lunch", Time = "20:20", AttendanceIsLogged = false},
{ Name = "Period 4", Time = "20:30", AttendanceIsLogged = true},
{ Name = "Period 5", Time = "20:45", AttendanceIsLogged = true},
{ Name = "Template", Time = "00:00", AttendanceIsLogged = true},
}
```
You have successfully created a new period. You can now **edit the name and time** as shown above.
# Discord Bot Setup
Please read the information below before proceeding to setting up the Vision discord bot
You must have a **fully working Roblox-setup** before continuing with setup on the discord bot
If you have not already added the discord bot, you can do so [here](https://discord.com/oauth2/authorize?client_id=1333099278997913731\&permissions=148445195472\&integration_type=0\&scope=bot). Please note, that you must be an **Administrator** of the guild (server) you wish to setup the Vision bot in.
We recommend that you read through **all of the documentation** thoroughly before contacting support — our support agents follow the same documentation to assist you.
### Initial Setup
Please **ensure you have** each of the following pieces of information before continuing:
| **Information** | **Description** |
| --------------- | --------------------------------------------------------------------------- |
| Experience Id | The experience id of your game which contains the Vision System. |
| OpenCloud Key | An API key to interact with the in-game Vision System from Discord. |
| Community Id | The id of your Roblox group/community. |
| Log Channel Id | The id of a log channel within your Discord server to send all bot logs to. |
You can retrieve the information through each of the tabs below. **We'd recommend keeping all of this stored somewhere as you get each piece of information.**
To get started, head to the [Creator Dashboard](https://create.roblox.com), if you are not already logged in make sure to do so.
Once you are on the home page, you must click **View As** in the top left of the side-bar and switch to your **Roblox Community** **which owns your game with the Vision System** in
Once you have switched to your group, select the **Creations** tab and find your experience in the list. Once you find the experience with your Vision System in, click the 3 dots that appear **when you hover** over the game. Once this is done, click **Copy Universe ID**.
When you enter your **OpenCloud Key** into our system it automatically encrypts to ensure that, in the event of a data breach, your key remains secure and intact.
1. To get started, head to the [Creator Dashboard](https://create.roblox.com/dashboard/credentials?activeTab=ApiKeysTab), if you are not already logged in make sure to do so.
2. Once you have been brought to the API Key page, press **Create API Key.**
From there, you will be **presented a screen to fill in some general information** regarding the new API Key. You can fill in the fields with guidance below.
| **Field** | **Description** |
| :---------- | :---------------------------------------------------------------------------------- |
| Name | You may set any name you want, we recommend `jaVision-Bot` |
| Description | A description to describe the key, you may leave this field empty if you would like |
## Adding API Systems
### MessagingService
Next, scroll down until you find the **Access Permissions** section. Press the **Select API System** and scroll down until you find `messaging-service` , click on it and press **Add API System**.
After that, ensure to add your experience. You can do that by clicking **Select an Experience** and then clicking your experience from the given list and pressing **Add Experience**
The chosen experience **must** correspond with the experience id retrieved in the previous step. Your Vision system must also be **fully setup** and **working** in the experience you select.
Select the API System operation from the **Select Operations to Add** dropdown and click `publish`.
### Universe Datastores
Head back up to the **Select API System** dropdown, click it and scroll down until you find `universe-datastores` , click on it and press **Add API System**.
By using the same steps before, add your experience by clicking **Select an Experience** and then clicking your experience from the given list and pressing **Add Experience.**
Press the **Select Operations to Add** dropdown and select the following:
```
universe-datastores.objects:create
universe-datastores.objects:delete
universe-datastores.objects:list
universe-datastores.objects:read
universe-datastores.objects:update
```
If you **do not** select all the operations above, or select different ones your Vision Bot**will not** work as intended and may error.
### Security
Scroll down until you reach the **Security** section once the aforementioned steps are completed **fully.** Inside of the **Enter an IP Address or CIDR** enter the IP Address `0.0.0.0/0` Then press **Add IP Address**
*This IP Address allows our servers to communicate with Roblox systems through your API Key.*
Then make sure to set the **Expiration** to **No Expiration** to ensure that the key never expires. \
*You may set the key with an expiration date but you will have to update the key before it expires, it is recommended to set it to no expiration*
Once **all** the steps above have been completed fully, using the screenshots provided, press the blue **Create API Key** button and copy the key given to you.
The key given to you is your **Roblox OpenCloud Key**, keep it safe and never send it to anyone.
Vision Developers and jaDevelopment Staff Members will **never** ask you for your OpenCloud Key.
**To find your community id**, head to the [Roblox Communities](https://www.roblox.com/communities) page. Find your group on the left sidebar and click on it. **In the URL bar you will find some numbers**, this is your community/group id.
## Setting Up
Once you have retrieved the necessary information for system setup,
**Run the** `/setup` **command to initiate the setup process**. You will be prompted an embed with a button on it, click the button and a modal form will popup asking you to input the information you retrieved before.
Input the information into all the fields and then click **Submit.** If the setup was successful you will be notified, else you will receive an error message stating what went wrong.
If you do not want any system logs enter a **0 (zero)** when asked for a Channel Id.
If you update your in-game datastore names within your Vision settings, the cached datastore names in our database will become out of sync with the live stores. View the **System Refresh** section to refresh the cached names.
### System Permissions
Ensure that you setup the correct permissions before attempting to run any commands. By default, some commands are locked to "Staff" ranks and some to "Admin" ranks, much like the in-game Vision system. Currently, you are **unable** to specify which commands you want to lock to administrator or staff members.
**Our current command permissions are below:**
| **Staff & Admin Commands** | **Admin Commands** |
| -------------------------- | ----------------------------------------------- |
| analytics | attendance |
| year-analytics | timeout-pass **grant** timeout-pass **remove** |
| timetable | uniform-pass **grant** uniform-pass **remove** |
| search | |
| roleplay-name | |
| timeout-pass **has** | |
| uniform-pass **has** | |
| merit | |
| behaviour-point | |
| incident | |
| isolate | |
| detention | |
Guild Members who have any administrative roles can access both admin and staff locked commands. Guild Members who have any staff roles can only access staff locked commands.
## For all of the Discord bot features and commands, please go to [this section](/visionmis/fp/botfeatures)