Plugin Creation

Plugin Creation

Make your game have a product that feels made for you.

How to submit your plugin to the public

You can submit your plugin for the public to use by running/submit-plugin and complete the steps inside of your DM's.

Submitting your plugin does not mean it will be made available for everyone to use. We can accept or decline any plugin made. If your plugin breaks our Terms & Conditions or server rules your license will be taken away and your submission will be denied. Reviewing may take multiple days, a final decision will be sent in your DM's.

Server API

Runs once on the server when the game starts.

api.Config

The AriPoints config.

api.GetPoints(player) returns a number

Read a player’s points.

api.GetRank(player)

Their rank from the config.

api.GivePoints(player, n, reason)

Counts like a task: AFK, group rank, multipliers and modifiers all apply.

api.AwardPoints(player, n, reason)

Straight grant, or take with a minus. Shows the points awarded / deduction alert.

api.Demote(player, roleId, reason)

Ranks them down and shows the alert.

api.AddTask(prompt, n, name)

Makes any ProximityPrompt or ClickDetector pay out.

api.AddModifier(fn)

fn(player, points, reason) returns new points. Runs on every normal earning.

api.Notify(player, text, detail)

A little stretch of the island.

api.Alert(player, info)

Full alert. info = { Title, Hero, Message, Button, Color, Icon }.

api.Remote(name)

A RemoteEvent just for your plugin, or use api.Remote(name, “RemoteFunction”).

api.Log(…)

Print with your plugin’s name on it.

Server events

Use :Connect(function(…) end).

api.PointsChanged

(player, points, delta, reason)

api.TaskCompleted

(player, task, points)

api.RankChanged

(player, old, new, “up” / “down”)

api.PlayerLoaded

(player, points)

api.AFKChanged

(player, isAfk)

Client API

Runs on every player’s screen.

api.Player

The local player.

api.GetPoints() · api.GetRank()

Read the local player’s points and rank.

api.Notify(text, detail, color)

A little stretch of the island.

api.Alert(info)

Same info table as the server: { Title, Hero, Message, Button, Color, Icon }.

api.Open(name) · api.Close()

Open “history”, “ranks”, “shop”, or a tab / page you added. Close the current view.

api.IsOpen(name)

Is that open right now?

api.Refresh()

Redraw whatever is open.

api.Remote(name)

The remote your Server half made.

api.Colors

The island’s colours.

Client events

Use :Connect(function(…) end).

api.PointsChanged

(points, delta, reason)

api.RankChanged

(old, new, “up” / “down”)

Extend the island

Add tabs and pages, change the wording and make the UI yours.

api.AddTab(name, fill)

Your own tab next to Point history / Rank up. fill(list) runs every time it opens. Build it with the helpers below.

list.Heading(text)

Add a heading.

list.Row({ Title, Sub, Right, RightColor, Letter, Image, Divider })

Add a list row.

list.Empty(title, text)

Add an empty state.

list.Space(height) returns a frame

An empty frame for anything else.

api.AddPage(name, height, build, onOpen)

A whole page of your own. build(page, ui) runs once; onOpen(page) runs each time it opens. Open it with api.Open(name).

api.SetText(key, text)

Keys: HistoryTab, RanksTab, ShopButton, ShopTitle, ShopSubtitle, Back, Confirm, Price, Cancel, GotIt, Empty, EmptyText, TopRank, Points, Point.

api.SetColor(key, color)

Keys: black (the island), white, tile, tile2, line, sub, faint, green, red, amber, hover.

api.SetIcon(image)

Change the points icon.

api.OnRow(fn)

fn(row) runs before every list row is drawn. Change row.Title / Sub / Right / RightColor / Letter / Image, or return false to hide it. row.Tab and row.Data say what it is.

api.OnAlert(fn)

fn(alert) runs before every alert. Change alert.Title / Hero / Message / Color / Button, or return false to stop it. alert.Kind = rank, points, afk, purchase or plugin.

api.UI

Raw pieces: Gui, Island, Header; Pages.Compact / Activity / Panel / Shop / Checkout / Alert; Fonts.Regular / Medium / Bold; Colors, Width, Height, Pad.

UI builders

Text(props), Button(kind, label, props) — kind = “primary”, “secondary”, “text” — Corner(px), Line(parent, y), Back(page), Scroller(parent, y, height), FormatPoints(n).

Your starting point

Find the PluginTemplate module script to begin your work, you can duplicate this script and rename it what you wish to rename it.