# Metro: full reference > Metro is a Discord bot and website that adds a player economy to private servers of ER:LC (Emergency Response: Liberty County), a Roblox game. It reads each server through the official PRC Private Server API and pays players for what they do in game. This file describes every feature: what it does, how players use it, how owners set it up, what runs on its own, which plan it needs, which Access permission controls it, and its limits. Site: https://metrobot.app Short index: https://metrobot.app/llms.txt Security contact: legal@metrobot.app Privacy policy: https://metrobot.app/legal/privacy Terms of service: https://metrobot.app/legal/terms Add to Discord: the "Add to Discord" button on https://metrobot.app Listing: Metro for ER:LC on top.gg (the link is added once the listing is live). Metro for ER:LC is not the music bot also named Metro on top.gg. Not affiliated: Metro is not affiliated with, endorsed by or sponsored by Police Roleplay Community, Roblox or Discord. Conventions in this file: - Money amounts are in the server's own currency. The default symbol is `$` with no decimals. An owner can change the symbol and the number of decimals. - "Default" is the value a new server starts with. Most defaults can be changed on the dashboard under All settings. - "Free" and "Plus" are the two plans. Plus costs USD 4.99 per month per server. - "Manage Server" means the Discord permission of that name. The server owner always has it. - An "Access permission" is a permission the owner gives to a Discord role on the Dashboard > Roles & access page. See the section "Access (role permissions)". - Times are in UTC. - Slash command options are written as `name:value`, the way Discord shows them. ## 1. What Metro is Metro turns an ER:LC private server into a working economy. - Players earn money by driving jobs in game (deliveries, taxi fares, bus routes and more), by being on duty on an emergency team, by answering 911 calls, by racing and by finishing challenges. - Players spend money on cars, driving licences, perks, rent, businesses and crews. - Staff get police tools (person and plate lookup, warrants, BOLO alerts, fines), traffic cameras with a hotlist, 911 dispatch, and a record of how fast staff answer mod calls. - Responders and dispatchers get a CAD fed by the live game, free on every plan: units on duty, calls, a dispatch console, records, civilian characters with ID cards, courts, text radio and a panic button (sections 16c to 16g). Metro Dispatch, an automated voice dispatcher, is Plus and in beta (section 16h). - Owners can run a government with elections, laws, taxes and a treasury (Plus). - Everything is visible and adjustable on a web dashboard at metrobot.app. Metro has three parts that work together: | Part | What it does | |---|---| | Discord bot | Slash commands, direct messages (DMs) to players, posts in channels the owner picks, and Discord role changes. | | Game reader | Reads each connected ER:LC server through the PRC API every few seconds: who is online, where they are, their team, their vehicle, wanted stars, kills, staff commands, mod calls and 911 calls. It pays wages, checks job arrivals, runs elections and does everything else that happens on its own. | | Website | The public site, the owner and staff dashboard, and the player pages. | Who Metro is for: - **Server owners** who run an ER:LC private server with a Discord community and want players to have a reason to keep playing. - **Staff** (moderators, police, sheriff, fire and EMS, DOT, judges) who use the police and staff tools. - **Players** on those servers. Most players are teens on Roblox. Metro shows them only their own data and the public parts of their server. Important facts: - Money and progress belong to one server. A player's balance on one server has nothing to do with their balance on another server. Money can never move between servers. - The link between a Discord account and a Roblox account is shared. A player verifies once and it works on every server that runs Metro. - Metro runs beside a server's existing staff bots. It does not replace moderation bots. - Metro never asks for a Roblox password. Linking uses Roblox's own sign-in or a short code typed in game. - Metro uses only the official ER:LC API. It does not run anything inside the game. - New players start with a balance of 0. There is no starting balance setting. ## 2. Plans: Free and Plus Metro is free. Plus is an optional paid plan for one Discord server. | | Free | Plus | |---|---|---| | Price | $0 | USD 4.99 per month, per server. Monthly only. Tax may be added at checkout. | | Trial | Not needed | One free week per server, unlocked by the owner voting for Metro on top.gg (see "Vote trial" below). No card is taken | | Who can buy | Not applicable | The Discord server owner only | ### What Free includes - Jobs, wallet, transfers and banking (savings and loans) - Cars, driving licences, ranks, perks and achievements - Crime: robbery, contraband, heat and criminal records - Jail: arrests served in game - Police tools: lookups, warrants, BOLOs, fines issued by staff - Cameras and camera rules, at Free limits - 911 dispatch and on-duty pay - Staff accountability - The live map - Crews (without territory and wars) - Races, scavenger hunts, treasure drops and double-pay hours - Templates: save and apply (3 saved templates) - Workflows: up to 5, with every game, Discord and Metro trigger, if / else, random, variables, short waits and an error handler; export, import and publishing to the workflow gallery ### What Plus adds - Government: offices, elections, laws, taxes, the treasury, council votes and recalls - Property: zones players rent - Businesses: places players buy and run - Bounties (paid from the government treasury) - Bankruptcy in banking - Crew territory and crew wars - Event seasons and the event calendar - Camera analytics and evidence export (CSV or JSON) - Publishing templates to the public gallery - Workflows: up to 200, with Switch, Loop and schedule triggers (every N minutes, daily at a time), waits up to an hour, 600 runs an hour and 100 steps a run - Metro Dispatch (beta): an automated voice dispatcher for law enforcement radio in one voice channel - Higher limits (see below) - The option to hide the "Powered by Metro" line on public posts - Polling priority: when two servers are due to be read at the same moment, a Plus server goes first. The polling interval itself is the same on both plans. ### Limits by plan | Limit | Free | Plus | |---|---|---| | Cameras | 25 | 100 | | Camera rules | 20 | 100 | | Camera hotlist entries | 10 | Unlimited | | Camera search look-back | 24 hours | Everything still kept | | Camera observations kept | 24 hours | Up to 168 hours (7 days), set by the owner | | Robbery sites | 10 | 100 | | Contraband sites | 10 | 100 | | Water smuggling sites | 10 | 100 | | Saved templates | 3 | Unlimited | | Workflows | 5 | Up to 200 | | Workflow runs per hour | 60 | 600 | | Workflow steps per run | 25 | 100 | | Workflow Switch, Loop and schedule triggers | Not available | Available | | Active loans per player | 1 | Set by the owner, up to 10 | | Bankruptcy | Off | As configured | | Property zones | Not available | 200 per server | ### How plan changes work - Plus starts as soon as checkout finishes. - If a payment fails, the server keeps Plus for a 3-day grace period, then returns to Free. - When a server returns to Free, Plus features switch off, but their settings are kept. They come back as they were on upgrade. - A Free server can save settings for Plus modules, but they do not run until the server is on Plus. On the dashboard, a Plus module switched on for a Free server (Government, Property, Businesses, crew territory) shows "Saved, not running: needs Plus" with an Upgrade link, and its status reads "Off (needs Plus)". - Plus belongs to one Discord server. It does not move to another server. Removing and re-adding the bot does not reset it. - When a Free server runs a Plus-only command, Metro answers with a card: the feature name, "is part of Metro Plus, $4.99/month per server; tax may be added at checkout", that the server owner can upgrade, and an Upgrade button to the Billing page. - `/plus status` shows the server's plan and status, what Plus adds on a Free server, and a button to the Billing page. ### Buying and managing Plus - The owner buys Plus on the dashboard Billing page (`/g//manage/billing`). Only the Discord server owner can open Billing. Billing cannot be given to a role through Access. - Checkout asks for two confirmations: that Plus starts right away (which ends the 14-day right of withdrawal) and that the buyer is 18 or older or has a parent or guardian's permission. - Payment is by card through Stripe. The seller of record is Link, part of Stripe, which handles tax, receipts and payment support. - A server that bought Plus by card gets a "Manage subscription" link on the Billing page to cancel or change the card. Buyers can also manage the subscription at link.com. - The Billing page shows the plan, its status (Active, Past due, Cancelled, Grace period), when it renews or lapses, and where it came from (Stripe, or a grant from Metro). - Cancelling stops the next payment. Plus stays on until the end of the period already paid for, then the server returns to Free. - Payments are not refunded, including for a partly used month, except where the law requires it. A purchase by someone under 18 without a parent or guardian's permission is refunded when Metro is told about it. - A price change applies from the next billing period after at least 30 days' notice. - There is no yearly plan and no lifetime plan. Robux payment is not offered. ### Free ways to get Plus - **Referrals.** Each server has a referral link, `https://metrobot.app/r/`. When another owner adds Metro through it, and that new server keeps Metro for 14 days with at least 3 players seen, the referring server gets 30 days of Plus. Rules: the referred server must be new (added in the last 7 days), cannot be your own server or another server with the same owner, and can only be referred once. A referral that does not qualify within 60 days lapses. A server that already pays keeps the earned days for when its paid plan ends. - **Support helpers.** Metro staff invite a few community members who answer questions well in Metro support. While a helper has at least 10 replies in Metro support over the last 30 days, Metro Plus is on for one server they own or manage and pick at https://metrobot.app/me/helper. Below 10, they get a message and a 7-day grace week to get back to 10 before the Plus ends. They can switch servers once every 7 days. If the server already has Plus another way (a subscription, a referral, the launch offer), that Plus is left as it is and the helper's Plus starts only when it ends. Helpers are not paid. Nobody can apply: helpers are invited. - **Founding servers.** Metro staff gave the first servers 30 days of Plus by hand. The owner gets one reminder 3 days before a hand-given Plus period ends. - **Launch offer: the first 25 servers.** While launch spots last, a server that finishes setup (the `/setup` command or Dashboard > Setup) gets 30 days of Plus free, with no card and nothing to cancel. The first 25 servers count, and founding servers count toward the 25. metrobot.app shows "X of 25 launch spots left" on the home page and the pricing page, and stops mentioning the offer when the 25 are gone. Each server gets it once: running setup again, or removing Metro and adding it back, does not give a second month. A server that already has Plus keeps what it has and does not use a spot. The owner gets a message when the days are granted ("You're server #N of 25"), Dashboard > Billing shows the days left, and one reminder arrives 3 days before the end. Plus is $4.99/month and nothing is charged unless the owner subscribes; when the days run out the server goes back to Free and its saved Plus settings are kept. - **Vote trial: one free week.** A server owner can run `/plus trial` and vote for Metro on top.gg with the button it shows; the server then gets 7 days of Plus free, with no card and nothing to cancel. Only the owner's vote through that button counts. Each server gets it once, and only if it never had Plus before (paid, the launch offer or another grant). `/plus status` mentions it while the server can still get it, and one reminder arrives 3 days before the end. ## 3. Getting started (server owner) ### Step 1: Add Metro to Discord Add the bot from the button on https://metrobot.app. Metro asks for these Discord permissions: view channels, send messages, embed links, attach files, create public threads (for appeals and workflow ticket threads), manage nicknames (for the workflow nickname action) and manage roles (for rank, office and crew roles). It never asks for Administrator. When Metro joins, it posts a welcome with three steps and a dashboard link. It posts in the server's system channel. If it cannot, it DMs whoever added it, and then the server owner. ### Step 2: Run /setup `/setup key: log_channel:<#channel> [template:] [community_channel:<#channel>]` - Who: a member with Manage Server. - `key` (required): the ER:LC Server-Key. Find it in ER:LC: open your private server settings, then the ER:LC API section. Create one if you have none. - `log_channel` (required): a text channel where Metro logs payouts, purchases, fines and staff events. Pick a staff channel. - `template` (optional): the economy to start from. Choices: Light, Standard, Full RP, Civilian City, Strict RP. The default is Standard. See section 25 "Templates and the gallery". What happens: 1. Metro checks the key with the PRC API. A wrong or expired key gets: "PRC says that Server-Key is wrong or expired." If PRC is down: "PRC is having trouble right now. Try again in a minute." 2. Metro stores the key encrypted. It never shows the key again, not even partly. 3. Metro posts a "Metro is connected" test card in the log channel. If it cannot, nothing is saved and the reply says why: Metro can't see the channel (give the Metro role View Channel) or can't post there (give it Send Messages and Embed Links). 4. Metro applies the template, but only on a server that has never been configured, or when you pick a template on purpose. A server that already has settings keeps them. 5. The reply lists the next steps: the in-game webhook URL, a test job, an ER:LC authorize link, and telling players. You can also do all of this on the Dashboard Setup page (`/g//manage/setup`). It saves first, then the bot posts the same test card. When Metro cannot see or post in a channel it tries to use, the dashboard Home page shows "Metro can't post in a channel" with what to change. ### Step 3: Turn on in-game commands (webhook) The `/setup` reply contains a webhook URL. Paste it into your ER:LC private server settings as the webhook URL. This lets players type `;verify CODE` in game chat to link their account. The Setup page shows the URL again and can make a new one (the old one stops working). ### Step 4: Authorize Metro in ER:LC When the key allows it, the `/setup` reply includes a PRC authorize link. Only the Roblox account that owns the private server can approve it: sign in at https://api.erlc.gg/server-owners with that account first, then open the link and approve Metro so it can send in-game messages for your server. If PRC shows "No servers found", you're signed in with the wrong Roblox account or the server has no API pack. ### Step 5: Get paid once yourself Run `/verify` to link your Roblox account, join your server in game, run `/job start` in Discord, and drive to the address Metro DMs you. The money arrives when you get there. ### Step 6: Tell your players - `/help` lists every command. `/help contact subject message` sends a message to Metro support. - `/channels set` picks where Metro posts the weekly season board, election news, the 911 panel, new 911 calls and alerts. - The dashboard Home page shows a go-live checklist until the first player is paid: Server-Key stored, template chosen, first poll received, in-game commands working, first player paid. - Metro sends the person who added it a setup reminder by direct message when the server has been installed for 7 days and no job has been paid yet. It lists what is still missing (Server-Key, log channel, a job switched on, linked players, in-game linking, a first paid job). It is sent at most once a week and at most four times, and stops after the first paid job. Turn it off in Dashboard > Grow ("Owner reminders") or with the Stop these button. "Set it up for me" in the message, on Dashboard > Grow and on the dashboard home opens a support ticket with the server and the checklist; the team replies in the ticket. ### Removing Metro When Metro is removed from a server, it stops reading that server at once and deletes the stored Server-Key. The rest of the economy is kept. If you add Metro back, run `/setup` again with the key and everything returns. The owner can ask Metro to delete the rest of the server's data. ## 4. Getting started (player) 1. In the server's Discord, run `/verify`. Metro replies with a 6-character code and a link to https://metrobot.app/verify. 2. Either join the server in ER:LC and type `;verify CODE` in the game chat within 10 minutes, or sign in with Roblox on the website. 3. Run `/wallet` to see your money. 4. Run `/job start`, pick a job, and drive. You need to be on the Civilian team and in a vehicle. 5. Run `/help` to see everything else. Players can also open their own pages on the website: sign in with Discord at https://metrobot.app/servers, pick the server, and open the Me area. ## 5. How Metro talks to players | Where | What goes there | |---|---| | Slash command replies | Most replies are private (only you see them). `/profile`, `/event list` and `/event leaderboard` are public. | | DMs | Job and crime run steps with a small map, verification results, fines, achievements, challenges, streak rewards, camera "spotted" notices, vote reminders. If your DMs from server members are off, some messages go to the server's log channel instead, and a job cannot start (Metro tells you how to turn DMs on). | | Log channel | Payouts, purchases, fines, rent, loans, staff events, owner alerts. Picked by the owner in `/setup`. | | Other channels | Election news, the season board, the 911 panel, new 911 calls, camera alerts and staff alerts each go to a channel the owner picks with `/channels`. | | In game | Short private messages (`:pm`) and server hints (`:h`) through the ER:LC API. Metro switches in-game sending on per server. When it is off, Metro reaches players in Discord only. | Limits on in-game messages: at most one command per server every 5 seconds, at most one private message to the same player every 10 seconds, and messages to a player who has left are dropped. Metro limits each Discord user to 5 commands every 10 seconds. Past that it replies "Slow down, try again in a few seconds." Every name that comes from the game (Roblox usernames, callsigns, staff command text) is cleaned before Metro posts it in Discord, so it cannot ping anyone or break formatting. Pledge: Metro never sends your players ads or unsolicited messages. DMs only answer something they did or turned on. Metro's own scheduled posts (the Monday owner digest, the county report and the weekly jobs recap) are capped at 6 per channel per hour. Posts over the cap are queued and sent as the hour allows, not dropped. Logs, alerts, dispatch and camera posts and command replies are never held back. Plus servers can set the cap from 1 to 20 on Dashboard > Channels > Posting pace. ## 6. Verify: linking Roblox and Discord What it does: connects your Discord account to your Roblox account, so Metro knows which player in the game is you. Metro pays the Roblox player, so you must link before you can earn or spend. How a player uses it: - `/verify`: if you are not linked, Metro replies with a code. Typing it in game is the only way to link, and it works at any age: - **In game:** join the server's ER:LC game and type `;link CODE` in chat within 10 minutes. `;verify CODE` does the same. Metro confirms by DM, and with a private in-game message when in-game messages are on. This needs the server's webhook to be set up (see Getting started, step 3). A code from `/verify` or the website works on any server with Metro's webhook. - **On the website:** go to https://metrobot.app/verify, sign in with Discord and choose "Get a code". The page shows `;link CODE` to type in game and moves on by itself once it has been typed. - `/verify` when already linked: tells you which Roblox account you are linked to. - `/verify unlink:True`: removes the link. In-game reminder: when a player joins a server that runs Metro and has no linked Roblox account, Metro sends them one in-game message, "Link Discord for jobs and pay: run /verify in Discord". Each player gets it at most once every 24 hours. It needs in-game messages to be on for the server. The owner can switch it off with the setting `linking.nudge_in_game` (on by default) under All settings, and the owner overview has a Linking card showing how many players have linked, how many were reminded, and how many linked after a reminder. Rules and limits: - A code has 6 characters with no 0, O, 1, I or L, works once, lasts 10 minutes, and you can get at most 3 codes per hour. Capitals, spaces and dashes do not matter when you type it. - A player can try at most 5 codes every 10 minutes. After that Metro says how long to wait, once, and ignores further tries until then. - One Roblox account can be linked to only one Discord account, and the other way round. If the Roblox account is already linked to someone else, linking is refused. - Linking again replaces your old link. Linking the same Roblox account again always works; after you unlink or switch, you must wait 30 days before linking a different one. Server owners cannot skip this; Metro support can reset it. - Your money and items stay with your Roblox account on each server, not with your Discord account. - Unverified members can use `/verify`, `/help`, `/vote`, `/job list`, `/shop` (browse only), `/property list`, `/business list`, `/event list`, `/crime bounties`, `/crew info` and `/calls recent`. Plan: Free. Access permission: none. The in-game chat commands Metro itself reads are `;link CODE` and `;verify CODE` for linking, and the CAD's in-game command (`;cad` by default). Any other message starting with `;` is ignored, unless a server's workflow uses it as a Custom `;command` trigger (see "Workflows"). ## 7. Wallet and money transfers What it does: every verified player has a wallet on each server. Money comes in from jobs, duty, calls, prizes and rewards, and goes out on purchases, rent, fines and taxes. How a player uses it: - `/wallet`: your balance, today's net change and your latest payments, as a card. - `/wallet user:@member`: view another player's wallet. Needs Manage Server. - `/pay user:@member amount:`: send money to another verified player. Amount is a number like `10` or `10.50` (decimals only if the server uses them). The receiver gets a notice. - Website: "My wallet" (`/g//me`) shows your balance, the last 7 days in and out, and recent activity. "My bank" shows the full history. Rules (defaults, all changeable on the dashboard): | Setting | Default | Range | |---|---|---| | Transfers on | On | | | Transfer fee | 1% (paid into the treasury) | 0 to 20% | | Daily send limit per player | 10,000 (rolling 24 hours) | 0 or more | | Verified for at least | 24 hours before you can send | 0 to 168 hours | | Most a balance can go below zero | 5,000 | 0 or more | | Currency symbol | `$` | 1 to 4 characters | | Decimal places | 0 | 0 to 6 | - You cannot pay yourself, and you cannot send money while your balance is below zero. - Fines, taxes and loan defaults can push a balance below zero, but never past the debt limit. Purchases need enough money. - The Transfer fee waiver perk lowers your fee. Owner and staff tools: - `/admin adjust user:@member amount: direction: reason:`: add or remove money. Needs Manage Server. The reason is required and logged in the log channel. The player gets a notice. - `/admin refund entry_id:`: refund one transaction by its number. Needs Manage Server. - Dashboard Live panel: "Pay a player" and "Adjust a balance" need the `economy.manage` Access permission. Plan: Free. Access permission: none for players. Adjustments in Discord need Manage Server. ## 8. Jobs What it does: players earn money by driving jobs in game. Metro picks the stops, tracks the player's position, and pays the moment they arrive at each stop. Job types: | Job | On by default | Base pay | Per stud | Stops | |---|---|---|---|---| | Courier | Yes | 150 | 0.25 | A pickup, then a drop-off | | Taxi | Yes | 200 | 0.25 | Pick up a fare, then drop them off | | Bus | No | 100 per stop | 0.25 | 4 to 8 stops, stop for 15 seconds at each | | Garbage | No | 100 per stop | 0.25 | 5 to 10 stops | | Mail | No | 100 per stop | 0.25 | 5 to 10 stops | | Tow | No | 250 | 0.25 | A breakdown, then the impound lot | | Water taxi | Yes | 200 | 0.25 | A dock, then another dock, sailed over water | | Fishing trip | Yes | 100 | 0.2 | Hold position at a fishing spot for 60 to 90 seconds, then sell the catch at a dock | | Cargo run | Yes | 300 | 0.35 | Load at the cargo pier, then sail to a far dock | Job stops, docks, crime sites and robbery holds count you as there when you stand inside their circle (the edge counts). Owners can resize a job stop or dock circle on the Jobs map in the dashboard by dragging its edge or typing a size between 25 and 600 studs, and reset it to the default. When a check refuses you, Metro shows the circle on a map with your position, the distance and the postal to go to. Boat jobs start from a boat on the water. A boat that is stopped on the water, a little way from the shore, counts, and so does a boat you left less than 60 seconds ago while you are still on the water. Standing on the dock or beach does not count, and only then does Metro refuse the start and tell you where you are and where to go. Stand anywhere inside a dock's launch circle (on the dock, in a spawned boat or in the water) or be in a boat on the water. Outside, the refusal names the nearest launch and shows it on a map. Distance is measured over water, not in a straight line. Arriving at a stop in a boat counts even when you have slowed or stopped, as long as you are on the water inside the stop's circle. If you step onto the dock or beach you get 20 seconds from stepping onto land to get back in the water, and while sailing between stops you stay "in a boat" for 60 seconds after your last boat reading. "Get back in your boat" appears when that grace runs out, even if you stand still on the dock, and it shows a map with the stop's circle and where to go. If you stay on land for a second grace window the job ends. A fishing trip pays for the leg plus the catch, for example "3 bass, $240". Owners can turn each boat job on or off and set its pay in the dashboard, set each launch circle's size, and move, add or remove docks and fishing spots on the Jobs map. How a player uses it: - `/job list`: the jobs this server has on, with their pay ranges. - `/job start`: shows a menu of jobs; pick one to start it. - `/job start type:`: start that job directly. - `/job start type:taxi passenger:@member`: offer a ride to a real player. They have 60 seconds to accept with the "Accept pickup" button or `/taxi accept`. - `/job status`: your current stop, distance and pay so far. - `/job stop`: give up the current job. Unpaid stops are lost. - `/taxi accept`: accept a pending taxi pickup as the passenger. - Website: "Jobs" (`/g//me/jobs`) shows today, this week, the running job and your last 20 jobs, with the reason a job did not pay. Before you link Roblox it shows the jobs that are on and what each pays. What happens when you start: 1. Metro shows "Finding a job..." for a few seconds while it picks the route. 2. Metro DMs you the first stop with its street and, where one is near, its postal code, and a map. The reply says "sent to your DMs" with a Go to DMs button. 3. Drive there. When you are within 150 studs of the stop for two readings in a row, the stop is reached and paid. 4. Metro DMs the next stop. After the last stop the job completes and a final DM confirms it. If your DMs are closed, the job is cancelled with no penalty and Metro shows how to turn DMs on, with a Try again button. If the game cannot be reached within 20 seconds, the job is cancelled. Requirements and rules: - You must be verified, in the server, on the **Civilian** team, and driving a vehicle. Switching away from Civilian ends the job. A start outside the ER:LC server says to join it first; a start on another team says to switch to Civilian, or to use `/duty` for police pay. - One job at a time per player. - Every leg is at least 800 studs long, and the next stop is never in the postal you are standing in. - Pay per stop = (base + per stud x distance) x vehicle class multiplier x distance band bonus. - Class multipliers: courier 1.0, taxi 1.0, garbage and mail 1.2, bus 1.3, tow 1.4. - Distance bands: near (300 to 800 studs) x1.0, mid (800 to 1,800) x1.15, far (1,800 and more) x1.3. - Daily cap: 20,000 per player across all jobs, per UTC day. `/job start` is refused once you reach it, with the time it resets. A job already running finishes, and a stop past the cap says "Daily limit reached" with the reset time. An owner can set the cap to 0 for no cap. - Time limit: about 3 times the expected driving time (at least 4 minutes, plus 60 seconds per stop). Metro warns you when 60 seconds are left. Running out of time ends the job. - Arriving much faster than a normal drive (under 60% of the expected time) holds the payment until the normal time has passed, and Metro tells you "Paying in" how many seconds. It is then paid as usual. - A stop driven at an impossible speed is not paid, and the stop says "Not paid: too fast". - The same pickup and drop-off pair cannot repeat for you within 30 minutes. - Leaving the game gives 60 seconds of grace before the job ends. - Reaching a stop without a vehicle twice ends the job. - Income tax (Plus, when government is on) is taken from job pay and goes to the treasury. Taxi details: - Without a passenger, the fare is a made-up passenger (an NPC). Stop for 5 seconds at the pickup, then drive to the destination. Leaving the vehicle for more than 90 seconds loses the fare. A random tip of 0 to 20% is added at the end. - With a real passenger who accepts, the fare pays 1.5 times as much and the passenger gets 20% as their cut. If they do not accept within 60 seconds, the run becomes an NPC fare. - The same passenger can ride with any driver once every 10 minutes, and the same driver and passenger pair once every 30 minutes. The passenger must be verified and cannot be the driver's own account. Extra pay on top of a job (paid by Metro, not taken from the player): - Double-pay events multiply job pay while they run. - If you are in a crew, 5% of each job payment also goes to your crew's pot. - Plus: a business within 150 studs of a job pickup gets 10% of that payment, and lessees of a business zone get 5% of payments made inside it. - The Job pay boost perk adds a percentage to your own pay. Owner setup: - Dashboard > Features > Jobs (`/g//manage/features/jobs`): turn each job type on or off, change base pay and per-stud pay, see runs, completion and flagged runs. - All settings has every job setting, including the taxi options, the daily cap, cooldowns and time limits. Plan: Free. Access permission: `jobs.view` to see the dashboard Jobs page, `jobs.manage` to change it. ## 9. On-duty pay What it does: players on an emergency team earn money for every active minute they spend on duty in game. No command is needed. How it works: - Being on one of the paid teams starts a shift. Default teams: Police, Sheriff, Fire, DOT. - A minute counts as active when you moved at least 15 studs or got in or out of a vehicle. Standing still does not pay. - Default pay: 20 per active minute, paid out every 5 active minutes (100 each time). - Changing team or leaving ends the shift. A part-finished 5-minute window is not paid. - Duty pay is not taxed. - Each payout posts a "Shift pay" panel in the log channel. How a player uses it: - `/duty`: your current shift: team, active and idle minutes, earned this shift, and time to the next payout. If you are not on duty, it lists the paid teams. Owner setup: All settings > Duty: turn it on or off, choose the teams, set a rate per team or a default rate, the payout interval (1 to 60 minutes) and the movement threshold. The CAD "911 & duty" page shows who is on duty. Plan: Free. Access permission: `duty.view` to see duty on the dashboard, `duty.manage` to change duty settings. ## 10. 911 dispatch What it does: Metro reads 911 calls made in game, tracks which responders arrive, records response times, and pays the responders. How it works: - A response counts when a player on the call's team is within 150 studs of the call for two readings in a row. - Default pay: 150 per answered call, once per call per responder. - No pay for answering your own call. - A player can earn at most 2,000 from calls per 60 minutes. - Default paid teams: Police, Sheriff, Fire, DOT. Calls for other teams are recorded but not paid. - Each paid response posts a "Call answered" panel in the log channel. - If the owner sets a dispatch channel, Metro keeps a live panel of open calls there, updated every 20 seconds. Each call on it has a Close call button. It shows the 8 oldest open calls and counts the rest. - Each new call posts a short card with the team, place, description and caller, a small map and a Close call button. It goes to the new-calls channel, else the dispatch channel, else the log channel, and pings the responder role if one is set. Calls already more than 10 minutes old when Metro first sees them get no card. - Close call needs the `dispatch.manage` Access permission. A closed call stays closed. - Calls are tracked across game and Metro restarts: a call that ended while Metro was not reading the game is closed on the next reading, and a call number the game reuses starts a new call. How a player uses it: - `/calls recent [count:<1-25>]`: the latest calls (default 10) with team, place, outcome and response time. The newest call comes with a small map. Needs the `dispatch.view` Access permission. - `/calls stats`: your own response count, average and fastest response. - `/calls stats user:@member`: someone else's stats. Needs the `dispatch.view` Access permission. Owner setup: `/channels set purpose:911 dispatch channel:#channel` for the live panel, `/channels set purpose:911 new calls channel:#channel` for the new-call cards (also on Dashboard > Channels). All settings > Dispatch: teams, pay per team, default pay, the earnings cap, new-call cards on or off, and the responder role to ping. The CAD "911 & duty" page (`/g//cad/dispatch`) shows calls on the map. Plan: Free. Access permissions: `dispatch.view` (see recent calls and other players' stats), `dispatch.manage` (assign and close calls on the dashboard and in Discord). ## 11. Vehicles: shop, garage and licences What it does: players buy cars from a shop with Metro money, keep them in a garage, and buy driving licences for the classes that need one. Metro can also check that players drive cars they own and are licensed for. Vehicle classes: civilian, sport, super, heavy, bus, truck, tow, emergency, special. The default catalogue has 136 ER:LC vehicles. Default price ranges: civilian 12,000 to 25,000, sport 50,000 to 70,000, super 150,000 to 250,000, heavy 30,000, special 500,000. Bus, truck and tow vehicles are free. Emergency vehicles cannot be bought; they come with the team. Licence classes (defaults): | Licence | Price | Covers | |---|---|---| | standard | Free (everyone holds it) | civilian | | commercial | 1,500 | truck, bus, tow | | performance | 5,000 | sport, super | | business | 2,500 | no vehicles; some businesses need it | How a player uses it: - The Shop: cars are bought in the Shop, on the website or in Discord (see "The Shop" below). - `/garage`: a private card with the cars you own (registered plate, what each is worth now, and whether it is paid off or still on a loan) and your licences (held, suspended until when, or revoked, and what each unlocks). Each car has a Sell button that opens a private confirm; selling pays 60% of the car's current price. A car still on a loan cannot be sold until the loan is paid. The card shows up to 5 cars; the rest are on the website. Its Shop button opens the Shop on Licences. - `/licence list`: every licence class, its price, what it covers and whether you hold it. - `/licence buy class:`: buy a licence. - Website: "Garage & licences" (`/g//me/vehicles`) shows each car's plate, value and loan status with a Sell button and a confirm, and your licences with Take test and Buy. - Plates: when you drive a car you own in game while your Roblox account is verified, Metro registers that car's in-game plate to you. A car shows "not registered yet" until then. Police plate lookups show the registered owner. The Shop: one shop sells everything on this server, on the website and in Discord. It has five categories: Cars, Licences, Perks, Server items (things the owner made, such as a role for 30 days or something staff do by hand) and Properties & businesses. - Website: "Shop" (`/g//me/shop`). Pick a category, search, and filter cars by class, price, "I can afford" and "I have the licence". Each item shows its picture, its price, a sale badge with the time left ("Sale - ends in 2h", old price struck through) and a stock badge ("3 left", "Sold out"). Open an item, press Buy, and a confirm step shows your balance after the purchase and whether you meet the licence, role or one-per-player rule. A receipt follows. Pressing twice never charges twice. - Purchase history: the Shop's "My purchases" tab lists everything you bought with its status: completed, waiting for staff, fulfilled, refunded, or until when a timed role lasts. - Discord: the owner can post a shop panel in a channel; it updates itself when prices, sales or stock change, and its Buy buttons open a private confirm. `/shop` opens the same shop only for you, with search and autocomplete. - Properties and businesses are bought on the website on their map pages ("Property" and "Businesses"); the Shop links to them, and Discord shows a "Buy on the website" link. - Sales and stock: an item's own sale or a server-wide percentage sale applies the best single discount, never both. A limited item is sold to one buyer at a time, so the last one goes to one person. - Pictures: cars show a picture stored by Metro, or the owner's own upload; the few cars without a picture show a class icon. Vehicle pictures come from the ER:LC Wiki under CC BY-SA 3.0, with a credit and a link to each picture's wiki page wherever it shows. - Owners open Dashboard > Shop (`/g//manage/shop`) to create, edit, disable or archive server items; set item stock and timed sales; upload pictures; run a category sale; and post, move or remove the Discord shop panel in a text channel. A role item gives a chosen Discord role permanently or for a set number of days. A staff request item sends a card to the chosen staff channel. The page lists pending requests and links to their Discord cards. Built-in cars, licences and perks can have stock, timed sales and an uploaded picture there; their base prices and switches remain in Vehicles and Ranks and perks. Changes to listings use the page's Save bar. Uploaded pictures take PNG, JPEG or WebP up to 5 MB and are stored as WebP by Metro. Server items can use at most 21 categories. Buying is refused when the car is not for sale, you lack the licence it needs, your garage is full, or you do not have enough money. Licence tests: commercial, performance and business can only be bought after you pass a short test (10 road-rule questions, 8 to pass, retake after 24 hours by default). Take it on the website at "Garage & licences" (`/g//me/vehicles`), one question at a time. A pass lets you buy that class in the Shop; a fail shows when you can retake. `/licence` and the Shop link to the test. A suspended licence cannot be bought again until the suspension ends, and a revoked licence needs a new pass. Staff-granted licences need no test. Owners edit questions, pass mark and cooldown, and switch each class's test on or off, at Dashboard > Features > Vehicles > Licences. Vehicle checks (automatic): - On every reading, Metro looks at each spawned vehicle and its driver. Staff, whitelisted players and vehicles, and emergency vehicles driven by a player on a non-civilian team are skipped. - A driver who does not own the car in Metro, or lacks the licence for its class, starts a check: first seen, then a 45-second grace period, then an infraction is recorded. - What players see depends on the enforcement level: - `off`: nothing. - `log` (default): logged only. No message to the player. - `warn`: an in-game message when the car is first seen and a last warning after the grace period. - `enforce`: also respawns the player. Metro does not send respawn commands at this time, so `enforce` behaves like `warn`. - Optional: an automatic fine of 500 for a recorded violation, when the owner turns on the violation fine (off by default). - Owners can whitelist players and vehicle names. Staff tools: - `/admin licence grant user:@member class:`: give a licence for free. - `/admin licence suspend user:@member class: days:`: suspend a licence for some days. - `/admin licence revoke user:@member class:`: take a licence away. - All three need Manage Server, post in the log channel and notify the player. Owner setup: Dashboard > Features > Vehicles (`/g//manage/features/vehicles`): prices, which cars are for sale, licence classes, enforcement level and the infraction list. Settings: resale percentage (default 60%), garage limit (default none), grace seconds (default 45), what to do with unowned cars (warn) and unknown cars (ignore), whitelists. Plan: Free. Access permissions: `shop.view` and `shop.manage` for the dashboard Vehicles page. ## 12. Banking: savings, loans and credit What it does: players keep money in savings that earns interest, take personal loans, finance cars, and build a credit score. How a player uses it: - `/bank balance`: wallet, savings, credit score and active loans. - `/bank deposit amount:`: move money from wallet to savings. - `/bank withdraw amount:`: move money from savings to wallet. - `/bank statement [limit:]`: recent wallet and savings activity (default 20 rows). - `/bank loan apply type:personal amount:`: take a personal loan. The money goes to your wallet at once. - `/bank loan apply type:car vehicle:`: buy a car with a down payment and finance the rest. - `/bank loan pay loan_id: amount:`: pay extra toward a loan. - `/bank loan list`: every loan you have had on this server. - `/bank bankruptcy file confirm:True` (Plus): clear all active loans for a fee. - Website: "My bank" (`/g//me/bank`): move money, see your credit score, pay loans, apply for a loan, finance a car, file for bankruptcy, and search your full history. Defaults: | Setting | Default | |---|---| | Savings interest | 5% a year, paid weekly | | Personal loan, most you can borrow | 10,000 | | Personal loan interest and length | 15% a year, 8 weeks | | Car loan down payment | 10% | | Car loan interest and length | 10% a year, 12 weeks | | Active loans per player | 1 (Free is always 1; Plus up to 10) | | Total loan limit | 5 x the debt limit (25,000 by default) | | Missed payments before default | 3 | | Bankruptcy fee | 250 | | Bankruptcy cooldown | 90 days | How loans work: - Loans are paid in equal weekly payments, interest first. - Each week's payment is taken from your job pay as you earn it. You can also pay with `/bank loan pay` or on the website. - If a week's payment is not covered by its due date, it counts as a missed payment. - After 3 missed payments the loan defaults. A car loan's car is repossessed and removed from your garage. A personal loan's remaining balance is taken from your wallet, which can go below zero down to the debt limit. Metro posts in the log channel and messages you in game. - Loan interest goes to the treasury by default. Credit score: - Starts at 650. Always between 300 and 850. - Goes up 5 for each on-time payment (up to 30 payments). - Goes down 15 for a late payment, 25 for a missed payment, 100 for a default, 200 for a bankruptcy, and 5 per fine (at most 50 from fines). - Bands: Poor under 580, Fair 580 to 669, Good 670 to 739, Great 740 and up. - The owner can set a minimum score for each loan type (default 0). Bankruptcy (Plus): - Clears every active loan. Cars on car loans are repossessed. A fee is charged. - You cannot file again until the cooldown (90 days) ends. - Your credit score is held at 300 for 90 days. Owner setup: Dashboard > Features > Banking (`/g//manage/features/bank`) and All settings > Banking: turn savings, loans, credit score and bankruptcy on or off, and set rates, limits and terms. Plan: savings, loans and car financing are Free. Bankruptcy is Plus. On Free each player can have only 1 active loan. Access permissions: `economy.view` and `economy.manage` for the dashboard Banking page. ## 13. Ranks and perks What it does: ranks show how far a player has come. Perks are extras players buy with Metro money. Ranks (defaults): | Rank | From | |---|---| | Rookie | 0 | | Worker | 5,000 | | Established | 25,000 | | Wealthy | 100,000 | | Tycoon | 500,000 | - By default a rank is based on net worth: wallet balance plus the resale value of owned cars. The owner can base it on total money earned instead, and can make ranks "sticky" so they never go down. - An owner can link a Discord role to each rank. How a player uses it: - `/rank`: your rank, the value it is based on, and how much more you need for the next one. Running it also updates your rank role in Discord. - `/rank user:@member`: someone else's rank (no role change). - `/perks list`: every perk, its price and whether you hold it. - `/perks buy`: opens the Shop on the Perks category, privately, to buy a perk there. - Website: "Perks" (`/g//me/profile/perks`) shows the rank ladder and what you hold; each perk's Buy opens it in the Shop (`/g//me/shop`). Perks (default prices): | Perk | Price | What it does | |---|---|---| | Callsign reservation | 1,000 | Reserves a callsign (2 to 12 letters, numbers or dashes). If another player uses it in game, staff get an alert in Discord. | | Embed colour | 500 | Sets the colour of your Metro profile card in Discord. Give a hex code like `#3d7bf2`. | | Job pay boost | 10,000 | Extra pay on every job you finish. Default +10%. | | Transfer fee waiver | 15,000 | Lowers the fee on money you send. By default it takes 1 percentage point off, so the default 1% fee becomes 0. | - Buying the same perk again replaces the old value. - Sales tax is added when government and its sales tax are on (Plus). - Callsign reservation and Embed colour are Free perks. Job pay boost and Transfer fee waiver are tagged as Plus perks. Owner setup: Dashboard > Features > Ranks and perks (`/g//manage/features/ranks`): rank names, thresholds, Discord roles, the basis (net worth or total earned), perk prices and which perks are for sale. Plan: Free. Access permission: none for players. ## 14. Achievements, challenges, streaks and profiles What it does: rewards players for playing, and gives them a card to share. Achievements (each pays once): | Achievement | Goal | Reward | |---|---|---| | First delivery | Finish 1 job | 100 | | Century run | Finish 100 jobs | 5,000 | | Road warrior | Finish 500 jobs | 20,000 and the Job pay boost perk | | Small fleet | Own 5 cars | 1,000 | | Collector | Own 15 cars | 10,000 | | Public office | Win 1 election | 2,500 | | Career politician | Win 3 elections | 15,000 | | Clean record | 7 days without a fine | 1,500 | Challenges: - 3 daily challenges (reward 300 to 900 each) and 2 weekly challenges (1,500 to 4,000 each), picked automatically. - Daily kinds: finish 2 to 4 jobs, earn 1,500 to 4,000, send 1 transfer. - Weekly kinds: finish 10 to 20 jobs, buy a vehicle, get no fines all week. Streaks: - Login streak: join the server on consecutive days. Pays 500 every 7 days. - Job streak: finish a job on consecutive days. Pays 750 every 7 days. Server milestones: the server as a whole reaches jobs completed (100, 500, 1,000, 5,000), treasury size (10,000, 50,000, 250,000) and players (10, 50, 200). An in-game announcement for milestones is off by default. How a player uses it: - `/achievements`: every achievement with your progress. - `/challenges`: today's and this week's challenges with your progress. - `/profile [user:@member]`: a public profile card to share in a channel: rank, the stats the owner allows (balance, earned, spent, cars owned, elections won, fines, studs driven, jobs by type, streaks) and the trophy case. With the Embed colour perk, the card uses your colour. The card can include a picture that stays valid for 30 days. - Website: "My profile" (`/g//me/profile`): stats, challenges, trophies, jobs by type, a link to your card image, and a switch to hide yourself from every server's public page. Rewards arrive with a DM card and, when in-game messages are on, an in-game message. Owner setup: Dashboard > Features > Achievements (`/g//manage/features/achievements`): turn achievements, challenges and streaks on or off, change rewards, and choose which stats `/profile` shows. Plan: Free. Access permission: none for players. ## 15. Events: races, scavenger hunts, double pay, treasure drops, seasons What it does: owners schedule events that give players something to do together. Event types: | Type | What happens | Plan | |---|---|---| | Race | A time trial: reach every checkpoint in order. Entry fees form a prize pool that the fastest finishers split by place, using the split the owner sets (for example 50, 30 and 20 percent). Optional entry fee (up to 5,000) and vehicle class limits. | Free | | Scavenger hunt | Find every checkpoint in any order for a completion bonus (default 500). | Free | | Double pay | Jobs pay extra while it runs (default x2, up to 3 hours). Nothing to sign up for. | Free | | Treasure drop | A point on the map. The first verified player to reach it wins the prize (default 1,000, open for 30 minutes). | Free | | Season | For 7 days, every payout earns points (1 point per 1 unit of money). The top 3 share a pool paid from the treasury (default 50,000, split 50/30/20). Renews on its own. | Plus | | Calendar | Repeating events (once, daily, weekly or monthly) created automatically. | Plus | How a player uses it: - `/event list`: scheduled and active events, with their id, type, times and entry fee. - `/event leaderboard [event_id:]`: a race's results, or the season table when no id is given. - `/event calendar` (Plus): replies that the calendar is on the dashboard. - `/race register event_id:`: sign up for a race or scavenger hunt. The entry fee is charged when the sign-up is processed. - `/race start event_id: [vehicle_class:]`: start your run. You must be registered and inside the start window (default 2 minutes). - `/race status`: your checkpoint, progress and pay so far. - `/race stop`: give up your run. The entry fee is not refunded. - Website: "Join events" (`/g//me/events`): browse events, register, start and stop runs, and see the season table. Owner setup: - Dashboard > Features > Events (`/g//manage/features/events`): create events, place checkpoints on the map (2 to 20 for races, up to 15 for hunts), set prizes, fees and times, and schedule repeating events (Plus). - `/channels set purpose:Season board channel:#channel`: Metro keeps a pinned season leaderboard there, updated every 5 minutes. - In-game announcements for race start and finish, treasure claimed and double pay start can be turned on (off by default). Plan: races, hunts, double pay and treasure drops are Free. Seasons and the calendar are Plus. On Free, seasons earn no points and pay nothing. Access permissions: `events.view` and `events.manage`. ## 16. Crime: robbery, contraband, water smuggling, heat, records and bounties What it does: gives the criminal side of roleplay a payout and a cost. Crime is off until the owner turns it on, and each part (robbery, contraband, water smuggling, bounty) has its own switch. Staff are never targets or beneficiaries. Robbery (Free): - Owners place robbery sites on the map (a bank, a store). Free allows 10 sites, Plus 100. - A player with at least 1 wanted star who stays inside a site for 45 seconds starts a robbery. - Escaping (leaving the site with stars still on) pays a random amount from 500 to 2,000 and starts a 20-minute cooldown for that player at that site. - Being arrested (wanted stars drop to 0 during the robbery) costs a fine of 50% of the site's top payout, and no pay. - Dying ends the robbery with no pay and no fine. - `/crime start type:Robbery` starts a guided robbery: hold a target, then reach the escape point. Updates arrive by DM with a map. - A robbery in progress (a site robbery starting, or a guided robbery's hold at its target beginning) posts one alarm per robbery with a small map to the camera alert channel, else the log channel, pinging the camera alert role if one is set. The robber is not named. It also shows on the live map next to 911 calls. Contraband (Free): - A pickup and a drop-off. Pays 400 plus 0.35 per stud. - The run is voided if you gain wanted stars, die or leave the game. - Time limit: the larger of 5 minutes or 3 times the driving time, plus 2 minutes. Metro warns you at 60 seconds left. - A 30-minute cooldown follows a run. - Without owner-placed sites, Metro picks road stops. Water smuggling (Free): - A boat run: collect unmarked crates at a pickup in open water, then take them to a quiet shore drop, both in a boat. You cannot start it on land. - Pays 700 plus 0.6 per stud of water distance, more than a boat cargo run. - A little while after the crates are loaded (2 minutes by default), the CAD and the police log channel get a vague area tip-off such as "near Beach Pier". It never names the player. The owner sets the delay and how exact the area is: broad, area or close. - If an officer arrests or cites you during the run, it ends: you lose the crates and pay a fine (600 by default, never more than you hold). No wanted stars and no bounty come with it. - Cancelling or leaving the game ends the run with no pay and no fine. A 30-minute cooldown follows a run. - Owners can place their own water pickups and shore drops; without any, Metro uses places from the map. An active run shows on the live map to staff only. Heat and record (Free): - Heat rises with robberies (+15), arrests (+8), contraband (+10) and fines (+5). It falls by 2 per hour. The maximum is 100. - The criminal record lists heat, priors (fines), crime runs (paid, arrested, voided) and bounties. Bounties (Plus, and government must be on): - Bounties are paid from the government treasury. - Optional auto-posting when a player reaches a set number of wanted stars (off by default). Amount: 500 plus 250 per star. At most 20 active bounties. - A bounty is claimed when a player on an emergency team (Police, Sheriff, Fire, DOT) kills or jails the target within 100 studs. - New bounties are posted in the log channel. Office holders can also pay bounties with `/gov treasury bounty`. How a player uses it: - `/crime start [type:]`: start a run, or pick from a list. - `/crime contraband`: start a contraband run. - `/crime smuggle`: start a water smuggling run. You need to be in a boat on the water. - `/crime status`: your current run. - `/crime record`: your heat, priors and run history. The owner can hide this from players. - `/crime record user:@member`: another player's record. Needs the `players.view` Access permission. - `/crime bounties` (Plus): the active bounties ("Most wanted"). - `/crime sites`: every crime site. Needs the `staff.view` Access permission. - Website: "My record" (`/g//me/record`): heat, priors, bounties and runs. Owner setup: Dashboard > Features > Crime (`/g//manage/features/crime`): turn crime and each part on or off, place sites on the map (including water pickups and shore drops), and set payouts, cooldowns, heat and bounty rules. The Water smuggling panel sets its on/off switch, pay, fine, cooldown, tip-off delay and accuracy, and the cargo label. Plan: robbery, contraband, water smuggling, heat and records are Free. Bounties are Plus. Access permissions: `players.view` (other players' records), `staff.view` (crime sites). ## 16a. Jail: arrests served in game What it does: a player arrested during a robbery goes to jail on that server for a set time. Jail is off until the owner turns it on. Staff are never jailed. Jail is tracked by Metro only: Metro does not move the player in the game, and the owner's rule text carries the roleplay rule. What happens: - The player gets one in-game message: "You are in jail for N minutes." followed by the owner's rule text. - While in jail the player earns no job pay and no on-duty pay, and cannot start a job or crime run. Any active job or crime run ends. - A second arrest extends the sentence to the later end time. It never goes past the maximum. - When time is up, Metro sends "You are free to go." and releases the player. A player who rejoins while jailed is reminded. - Early release: a player holding the `jail.release` Access permission can release anyone from CAD > Jail, the person lookup or `/jail release`. The player is told "You were released early." - Bail (off by default): the player pays minutes left, rounded up, times the bail rate. The money goes from their wallet to the treasury. Bail needs enough money; it never overdraws. The player is told "Bail paid. You are free to go." - Turning jail off releases everyone with no message. - A later arrest report system will start sentences the same way. The record shows `In jail ยท N min left` in CAD > Jail, the CAD person lookup, Me > Record and `/crime record`. It keeps every sentence and the total time served. On Me > Record the player also sees the owner's rule text and, when the owner has bail on, a Pay bail button with the price. CAD > Jail counts the minutes down and refreshes about every 30 seconds. Defaults and ranges: | Setting | Default | Range | |---|---|---| | Jail | Off | On or off | | Maximum minutes | 60 | 1 to 1440 | | Robbery arrest minutes | 10 | 0 to 1440, no more than the maximum; 0 means a robbery arrest fines but does not jail | | Bail | Off | On or off | | Bail per minute | 100 | 0 or more | | Rule text | "Stay in the cell until your time is up." | Up to 140 characters | Commands: - `/jail status`: your sentence and time left. - `/jail bail`: pay bail, when the owner has turned it on. - `/jail release user:@member`: release a player early. Needs the `jail.release` Access permission. - `/jail list`: who is in jail. Needs the `jail.view` Access permission. Owner setup: Dashboard > Features > Jail (`/g//manage/features/jail`): the module switch, maximum and robbery minutes, bail, the rule text and who can release (the roles that hold the Release early permission). Save with the bar at the bottom. Access permissions: `jail.view` (roster), `jail.release` (release early), `jail.manage` (release and change jail settings). Police have view; Sheriff, Judges and Staff have view and release. Plan: Free. ## 16b. Medical: EMS patient reports, history and hospital bills What it does: EMS members file a patient report after treating a player. The reports make up the player's medical history, can bill the player a hospital fee, and count toward the filer's department activity. Medical is off until the owner turns it on. Who files: a member who holds the `medical.file` Access permission and belongs to a department that has the Medical tool. `medical.view` reads a patient's history. The Fire & EMS preset has both; Police, Sheriff, Judges and Staff do not, and medical data never shows in the person lookup. The owner, the Manager role and server admins can always file and view. A report has: - the patient, picked from the live in-game players first, then players Metro has seen; - an injury type from a fixed list (minor injury, cut or laceration, broken bone, burn, gunshot wound, stab wound, vehicle collision, fall, overdose, unconscious, cardiac arrest, other); - the treatment given (3 to 200 characters); - whether the patient was transported; - optional notes (up to 500 characters). A medic cannot file on themselves, and filing on the same patient again within 2 minutes is refused. Where: - `/ems report` files a report in Discord and `/ems history` shows a patient's history. Both need the permission and the department. - CAD > Medical (`/g//cad/medical`) files a report on the website, lists the server's recent reports and shows a patient's history. - Me > Record > Medical (`/g//me/record?tab=medical`): the player's own history, when the owner allows it. It shows reports, transports and bills paid, then each report with the date, injury, treatment, whether they were taken to hospital or treated on scene, any notes and the bill. The department is shown, never the medic. - The department Roster (`/g//d//roster`) shows each member's medical reports over the last 7 days, for a department that has the Medical tool. Hospital bills (off by default): the patient is charged one amount per transport and an optional amount for on-scene treatment. The money goes to the city treasury. Like a fine, a bill can push the player into debt up to the server's debt limit, never past it. Each report bills once, and the patient gets a DM saying what the bill was for and that it went to the city treasury. The Medical insurance perk (5,000, Free) waives the bill when the owner allows it; the history then shows "Waived by insurance". Defaults and ranges: | Setting | Default | Range | |---|---|---| | Medical | Off | On or off | | Patients see their own history | On | On or off | | Hospital bills | Off | On or off | | Amount per transport | 250 minor units | 0 to 1,000,000 | | Amount for on-scene treatment | 0 | 0 to 1,000,000 | | Insurance waives bills | On | On or off | Owner setup: Dashboard > Features > Medical (`/g//manage/features/medical`): the module switch, which departments file reports (the Medical tool on Dashboard > Departments), whether patients see their history, bills and their amounts, and whether insurance waives. Save with the bar at the bottom. Access permissions: `medical.view`, `medical.file` (implies view) and `medical.manage` (implies file). Plan: Free. ## 16c. CAD: units, calls and dispatch Metro has a computer-aided dispatch (CAD) for responders and dispatchers, at `/g//cad`. It is fed by the live game: units follow their in-game player, the game's own 911 calls arrive in the call queue, and every screen updates as the game does. Free on every plan. Panels (`/g//cad`): the CAD opens on a panel picker with a card for each panel the member can use, and nothing else: - Dispatch, for `cad.dispatch`, with the units on duty and the open calls across the server. Calls of departments that dispatch themselves are left out of its count. - One card per CAD department the member can go on duty in (`cad.unit`), with that department's units on duty and the open calls routed to it. - Courts, for any court key. - Civilian, for players who can make characters, which opens Me > Characters and Me > 911. - The card opened last on that browser is marked Last used. The picker always shows; it never skips itself, even with one card. Who can use it: - A department is in the CAD when its type is Law enforcement, Fire & EMS, DOT, Dispatch or Law & Courts, unless the owner takes it out on Dashboard > CAD settings. Members of those departments open the CAD. - The Access permissions in the CAD area of Roles & access are `cad.view` (open the CAD), `cad.unit` (go on duty as a unit), `cad.dispatch` (dispatch), `cad.records.read`, `cad.records.write`, `cad.warrants`, `cad.courts.judge`, `cad.courts.prosecutor`, `cad.courts.lawyer`, `cad.radio` and `cad.settings`. A department type gives its members the keys of its job: law enforcement gets `cad.unit`, `cad.records.read`, `cad.records.write`, `cad.warrants` and `cad.radio`, Fire & EMS and DOT get `cad.unit` and `cad.radio`, Dispatch gets `cad.dispatch`, `cad.records.read` and `cad.radio`, and Law & Courts opens the CAD only (judges, prosecutors and lawyers get their court keys from Access). The owner and Discord administrators hold every key. - Every part of the CAD checks the member on the server, not only in the menu. Units (CAD > Units, `/g//cad/units`): - A member of a Law enforcement, Fire & EMS or DOT department with a linked Roblox player goes on duty with a callsign (1 to 16 letters, digits, spaces, dashes or slashes). The callsign goes through the name filter and must be free among the units on duty, in any case. A member in several of these departments picks one. - Callsigns are typed at sign-on by default. The owner can set Callsigns to From the roster on Dashboard > CAD settings; then a member signs on with a callsign the roster gives them in that department, and a member who is not on the department's roster cannot sign on there. - The unit sets a status from its department type's list, each shown with its signal code (for example Available 10-8, En route 10-76, On scene 10-23, Out of service 10-7). Fire & EMS and DOT have their own statuses, such as Transporting and At hospital, or Towing and Road work. The owner edits the lists on Dashboard > CAD settings. - The unit goes off duty from the same page, which clears it from the calls it was on. - The board shows every unit on duty, grouped by department: callsign, status, the in-game name, the vehicle and plate it is in, the postal it is at, and the call it is on. A Map view shows every unit and every open call on the county map. Position, team and vehicle come from the game by themselves; nobody types them. - A unit is set to Out of service by itself when its player leaves the server or leaves the department's team (Police or Sheriff for law enforcement, Fire or EMS for Fire & EMS, DOT for DOT). It is set to On scene by itself when a unit on a call reaches the call's position. A unit sets its own status back when it is ready. Unit panel (`/g//cad/unit/`): - Each Law enforcement, Fire & EMS and DOT department has a unit panel for its members with `cad.unit`. It opens on sign-on while the member is off duty there. - Sign-on: by default the member types a callsign, with the last one they used filled in. When the server takes callsigns from the department roster, the member signs on as their rostered callsign, and a member who is not on the roster sees "You are not on the roster for . Ask a supervisor." A member on duty in another department signs off there first, from the same screen. A taken or refused callsign is explained in words. - Home: the status buttons, the unit's call with its timeline (filters All, Notes, Status, Voice), a note box and Clear from call, the calls holding for the department, and announcements and questions from dispatch. Attach on a holding call shows only when the server's assignment mode lets units attach: in "dispatchers assign" mode it hides while a dispatcher is signed on. It is greyed out while the unit is Out of service or already on a call, with the reason. - New call opens a call from the unit itself (a type, title, postal and details, filled from the call type's templates); the unit is attached and the call is active at once. Traffic stop opens one at the unit's postal in one press when the game has placed the unit. - Map shows the live county map with units, calls and panic alerts, beside the unit board. Records holds one Lookup (person, plate or report number) and the unit's reports, active warrants and BOLOs; each part needs its records permission, and a member without it sees that the server has not given them records access. - A department can have up to 6 custom views in the server's CAD settings, each with a name, an icon and widgets from a fixed list: status, my call, holding calls, unit board, map, lookup, BOLOs, warrants, announcements, radio and notepad. The notepad is kept in that browser only and is never sent anywhere. - Questions: when dispatch or Metro Dispatch asks the unit something, it opens as a sheet over the panel with a countdown (60 seconds for a confirm). When the last unit clears from a call and the server requires a disposition, that unit is asked how the call ended, one button per disposition, for up to 10 minutes. The sheet can be closed and reopened from Home until the question expires. An answer that came too late or was already given is explained in words. - On a phone (under 640 px wide) the panel is an MDT: a top bar with the callsign, the status and the panic button (press once to arm, again to send), tabs for Home, Calls, Map, Records and More, and buttons at least 48 px tall. More holds the radio, the custom views, Day or Dark, New call and Sign off. - A panic flashes the edge of the panel red three times (no flash when the device asks for reduced motion), then a red bar at the top shows the callsign, postal and call. The bar hides after 30 seconds or a tap; the call stays on the board and the map. When units may attach themselves, Respond puts the unit on the panic call and sets it En route. Once a dispatcher acknowledges the panic, the bar says who. Calls and dispatch: - A call has a number and, for calls opened after the owner's numbering is on, a reference per service such as P-0042 (Police), F-0007 (Fire & EMS) or D-0003 (DOT). Older calls show as #N. A call also has a source (the game's 911, dispatch, a civilian's 911 from the website, or `/911` from Discord), a type and priority (P1 Emergency to P4 Low, set by the owner), a title, a description, a postal and a status: waiting, active or closed. Each call keeps a timeline of everything that happened. - Every 911 call made in the game becomes a CAD call, once, at its postal. When the game moves or closes the call, the CAD call follows. - CAD > Calls (`/g//cad/calls`) lists the open calls, most urgent first, and the recently closed ones. A call opens with its full timeline. A unit on duty can attach to a call and clear from it there. - A dispatcher (`cad.dispatch`) works the dispatch console on CAD > 911 & duty (`/g//cad/dispatch`, described below): the incoming queue, a call made by hand (type, priority, title, description and a postal), assigning and unassigning units, changing the priority, adding notes and closing a call with a disposition. A unit that is off duty or Out of service cannot be assigned. Assigning a unit sets it En route and tells its player once in game (the owner can change the message on Dashboard > CAD settings; the default is "Dispatch: 12A-4, you are assigned to P-0042, Shots fired near the bank."); Metro sends no other private messages from the CAD. - Each call type has a signal code (for example 10-31) and optional title and description templates that fill in the make-a-call form. The close dialog offers the owner's list of dispositions (for example Report taken RPT). - A call has a landmark when it is within reach of one: the owner's own landmarks (up to 10 on Free, 100 on Plus) or the county map's. A dispatcher can pick one when making a call, and calls from the game and from Me > 911 get the nearest one. - Routing: a call goes to the services its type names, and the owner's routing rules (up to 3 on Free, 100 on Plus) can add services and departments by type, landmark, postal, priority or source. Rules only add, never remove. Boards show a service's calls first, and a dispatcher can re-route a call by hand. - Duplicates: when a new call is the same type, near and soon after an open one, Metro flags it as a possible duplicate. A dispatcher (`cad.dispatch`) merges it into the main call: the duplicate closes as "Merged into P-0042" and its units and notes move to the main call. Metro never merges by itself. Merging works on every plan. - Dashboard > CAD settings holds numbering, call types and codes, dispositions, landmarks, duplicate detection, routing rules, the assignment message and an optional Discord channel per service. When a call is routed to a service with a channel, Metro posts a card there with the reference, type, priority, landmark and an Open in CAD button. - Sign-on and dispatch (Dashboard > CAD settings): Callsigns (typed at sign-on, or from the roster); who puts units on calls (dispatchers and units, the default; dispatchers, where a unit attaches itself only while no dispatcher is signed on; or units, where a dispatcher can still send help); the departments that dispatch themselves, whose calls stay off the dispatch console; whether closing a call needs a disposition (on by default); and 911 from Discord, which lets members call 911 with `/911` (on by default). - Roster (Dashboard > CAD settings > Roster): the callsign roster per Law enforcement, Fire & EMS or DOT department in the CAD. Add a member by Discord user id and callsign, change a callsign, move an entry to another department or remove it, or paste a list with one `discord id, callsign` per line (up to 500). Pasting gives members already on that roster the new callsign. One bad line stops the whole list and names the line. A callsign is used once across the server, in any case. Roster changes save straight away; a unit on duty keeps its callsign until it signs on again. It needs `cad.settings`. - A dispatcher can announce to every unit or to one department. The announcement shows on the Units and Calls pages for an hour. - Road closures (a DOT call type) show on the map as closures, not as calls. The dispatch console: - The console fills the browser window and is for members with `cad.dispatch`. On the left are the open calls in three groups: Holding (no unit has been on it yet), Active (a unit is on it) and Clearing (its units have cleared and it waits to be closed). Each group is sorted by priority, newest first within a priority, with P1 and panic calls on top. Under the calls is the open call: its reference, type and code, priority, postal and landmark, age, the units on it with their status, the timeline (filtered by all, notes, status or voice) and a note box. Call history lists the closed calls. - On the right are the units on duty, grouped by department, with status (colour and words), callsign, call, postal and time in status; units in a union share one row. Under them is a map of the open call and its nearest available units, or of every unit and open call when no call is open. - Three layouts, picked in the top bar and kept in that browser: Standard (as described above), Map (the map fills the middle, the calls and the units become narrow rails either side, and the open call is a card over the map) and Supervisor (Standard with a strip on top: units per department and status, calls per group with the age of the oldest, the dispatchers signed on, and a department filter for both columns). Where the owner lets units attach themselves only, the console opens on Map. - The map's pop-out button opens the map in its own window, for a second screen. It runs on the same live feed and frames the call open in the console. - Calls routed only to departments the owner has set to dispatch themselves (Dashboard > CAD settings) stay off the console. When the owner lets units attach themselves only, the Holding group says so instead of offering to assign. - To act, a dispatcher takes dispatch under a position name of 1 to 16 characters (letters, digits, spaces, `-` and `/`, for example Dispatch 1). Two dispatchers cannot hold the same position at once. A second tab joins the same session. The session stays open while a console tab is open and ends about 90 seconds after the last one closes or loses its connection; the console then says so and offers to take dispatch again. Leave dispatch ends it at once. Until they take dispatch, a dispatcher sees the console read only. The dock shows how many dispatchers are on. - On dispatch, a dispatcher makes calls, assigns and unassigns units, changes priority, adds notes, re-routes, merges a duplicate into the open call, and closes a call with a disposition (without one only when the owner allows closing calls without a disposition). Right-clicking or long-pressing a unit opens its menu: assign to the open call, set status, clear from its call, add a note, show on the map, union with another unit, and split a union. - A union puts 2 to 8 units on duty in one row, the lead first; a unit is in one union at a time. Assigning or clearing any member moves the whole union, and a status set on the lead applies to every member. A union left with one unit ends. - The command bar (press `/` to reach it) takes `D [call]` to assign, `OS ` to set a unit on scene, `CLR [call]` to clear a unit off its call, `ST ` to set a status by its code, `N [call] ` to add a note, `NC [title]` to make a call, `P <1-4>` to set the priority, `U [...]` to make a union with the first unit leading (or add units to the first unit's union) and `U- ` to take a unit out of its union. Units are matched by callsign and calls by reference or number; without a call, the open call is used. When a name matches more than one, the bar lists the choices. Every refusal is shown in words. - A panic flashes the edge of the console red three times (no flash with reduced motion) and keeps a red bar at the top with the callsign, postal and call, and the units nearest the panic when it was pressed: on duty, with a position on the map, not out of service and not already on a P1 call, 3 by default (1 to 6 on Dashboard > CAD settings > Panic). On dispatch, a tap on one of them sends it to the panic call, and Acknowledge writes "Panic acknowledged by ." to the call and ends the bar on every console. Everything on these pages is live: a call, a status change or an announcement appears within a few seconds, without reloading, and the page never asks the server for more often than the game itself refreshes. Names, vehicles, plates and descriptions that come from the game are cleaned before they are shown, so they cannot ping anyone or change how a page looks. In-game commands: - An officer can run the CAD from the game with `;cad`, typed in the in-game chat. The word `cad` is the default; the owner can pick another on Dashboard > CAD settings > In-game commands, and can switch single commands off or the whole thing off. It works for a member with a linked Roblox account who holds the CAD key a command needs, on the same rules as the website. A command nobody may run answers "You cannot use that command." If Metro does not know the member's Discord roles yet, it asks for them and the officer sends the command again a few seconds later. - `;cad on CALLSIGN [department]` goes on duty and `;cad off` goes off. A status is its signal code, for example `;cad 10-23`, or its name, for example `;cad on_scene`. `;cad calls` lists the top open calls with their reference, priority, type, code and landmark, `;cad attach [N or P-0042]` attaches to a call, `;cad clear` clears from it and `;cad note [N or P-0042] TEXT` adds a note of up to 200 characters. `;cad run PLATE` and `;cad id NAME` look up a plate or a person. `;cad panic` presses the panic button. `;cad help` lists what the member may use. CAD > Units shows each officer the commands they may use. - Every command gets one short private message back. Changes show on the Units and Calls boards within a few seconds, like changes made on the website, and are recorded in the audit log as coming from the game. - Free: every command, with 60 lookups (`run` and `id`) an hour per officer. Plus: 600 lookups an hour per officer, and `;cad run` also shows the plate's last camera sighting and how many citations its owner has on file. Any officer may send at most 30 commands a minute, on any plan. Plan: Free. ## 16d. CAD: records CAD > Lookup and CAD > Records (`/g//cad/lookup` and `/g//cad/records`) are the law enforcement side of the CAD: look people and plates up, file citations and arrest and incident reports, issue warrants and put out BOLOs. Both open for `cad.records.read`; filing reports and BOLOs needs `cad.records.write`, warrants need `cad.warrants`. Law enforcement departments have all three, Dispatch can read, and Judges can read and handle warrants. Fire & EMS do not open them. Each of these is checked on the server. Lookup: - Find a person by their in-game (Roblox) name, their Roblox id or a civilian's CAD character name. Players are found by name once they have linked their Roblox account. - A person's page shows their Metro fines, filed reports, live warrants, licences, registered vehicles and plates, jail time left, any BOLO on them and their recent camera sightings. A character's page shows that character's own reports and registered vehicles. - A plate's page (2 to 10 letters, digits or dashes) shows who it is registered to, the character it is registered to if any, any BOLO on it, the camera hotlist and recent camera sightings. - Expunged reports are hidden from everyone except judges and CAD managers. Reports (CAD > Records): - A citation, an arrest report or an incident report is a draft until it is filed. A draft is visible to its author and to CAD managers. A new report starts from the template the owner set on Dashboard > CAD settings. "File report" on a call links the report to that call. - Citations and arrests pick charges from the shared penal code (the owner edits it on Dashboard > CAD settings), with a count each. The fine and the jail minutes are worked out by the server from the penal code when the report is filed, never taken from the page. - Filing a citation or an arrest writes a Metro fine to the person's wallet (up to the server's allowed debt) and tells the player in game. An arrest that carries jail time starts the player's jail sentence, when jail is turned on. A report is filed once: filing it a second time changes nothing. If the fine is refused, the report stays a draft. - A person who is a CAD character is fined as the player behind the character. A person with no linked Roblox player cannot be fined or jailed. - An incident report is a narrative only: no charges, no fine, no jail. - A filed report keeps its charges and person. Its author or a CAD manager can amend the narrative, and each amendment is logged and listed on the report. - Fire & EMS get a Patient report entry that opens the existing CAD > Medical report form. Warrants (CAD > Records > Warrants): - A warrant is a person, charges (optional) and a reason of 3 to 500 characters. Issuing one also puts a Metro warrant on the player (a player can have 5 live warrants), so cameras flag them, and sends an alert to every unit. - A live warrant is marked served or cancelled, which clears the Metro warrant as well. BOLOs (CAD > Records > BOLOs): - A BOLO is for a person or a vehicle, with a description and a time it stays live (2 hours to 1 week). A new BOLO sends an alert to every unit. It ends when it is cleared or runs out. - A vehicle BOLO with a plate also goes on the camera hotlist for the same time, with the hotlist's own approval rule and plan limit; when the hotlist is full the BOLO is still made. - When a camera sees a plate with a live vehicle BOLO, every unit gets an alert with the camera's name and postal, once for each time the camera sees it. Alerts show on the Units and Calls pages for a while, like dispatch announcements, and arrive live. Names, plates, narratives and camera names are cleaned before they are shown, so they cannot ping anyone or change how a page looks. Plan: Free. ## 16e. CAD: civilians Me > Characters (`/g//me/characters`) lets a player with a linked Roblox account make fictional roleplay characters and see each one's ID card, driver licence, registered vehicles, weapons permit and criminal record. They can also call 911 from the website as a character. Free on every plan. - Characters are made up: a first and last name (letters, spaces, hyphens and apostrophes, up to 24 each), a made-up date of birth (16 to 100 years ago), a picture (one of six illustrations, or the linked player's public Roblox headshot; there is no upload) and an address (a postal from the county map and a street line of up to 40 characters). Names and the street go through the server's name filter. - A player may have 3 characters by default; the owner sets the limit (1 to 10) on Dashboard > CAD settings. One character is the active one. Deleting a character keeps the reports and warrants that name it and removes its vehicle registrations. - The ID card shows the character's details and an ID number that means nothing outside Metro. The driver licence is the player's own Metro licences (a character holds the licences of the player behind it): valid, suspended with its end, or revoked. Registered vehicles are the player's own cars, with the plate the game showed; a car is registered to one character at a time, and sold or repossessed cars drop off. The criminal record is the character's filed citations and arrests and live warrants; expunged reports are left out. - Weapons permit: the player requests one of the owner's permit types (Concealed carry, Open carry and Hunting by default; the owner edits the list). A member with `cad.records.write` issues or revokes it from the CAD person lookup. A player can have one pending, issued or suspended permit of a type at a time. - 911 from the website: pick a character, say what is happening, give a postal and up to 500 characters. It joins the dispatcher queue like any call, with the type's own priority. A player has one open civilian call at a time and waits 2 minutes between calls. The text goes through the name filter. - 911 from Discord: `/911 what: where:`, with an optional call type (Other when left out) and character (the active one when left out). It works in any channel of the server, is answered privately with the call's reference, and joins the queue like a website call. The one open call and the 2-minute wait are shared with the website. Owners turn it off on Dashboard > CAD settings. - Only the player sees and edits their own characters. A member with `cad.records.read` can read any character's page and search characters by name in CAD > Lookup. Another player's character is "not found". Plan: Free. ## 16f. CAD: courts CAD > Courts (`/g//cad/courts`) is for judges, prosecutors and defense lawyers: cases from arrest reports, court dates, rulings that change the fine, the jail time and the record, and expungement. It opens for `cad.courts.judge`, `cad.courts.prosecutor` or `cad.courts.lawyer` (the Judges, Prosecutors and Lawyers Access presets; the owner and administrators act as judges). Each rule is checked on the server. Free on every plan. - A prosecutor opens a case from a filed arrest report that has no case yet. The defendant is copied from the report. A case is open, scheduled (a judge set a date), ruled or dismissed. - A judge assigns the judge, prosecutor and defense, sets the court date (not in the past), adds notes, dismisses a case and rules. A prosecutor can take an empty prosecutor slot, add notes and dismiss their own case. A defense lawyer sees only the cases they are assigned to and can add notes. A case a member may not see is "not found". The docket lists scheduled cases from now on, soonest first. - A guilty ruling takes the arrest report's fine and jail time unless the judge sets other amounts: the fine is adjusted (the old one refunded, the new one charged) and jail time is added to the player's sentence, never shortened. A not guilty ruling refunds the report's fine and releases the jail time the report started. A defendant with no linked Roblox player cannot be fined or jailed. A ruling is made once; a judge can later make a correction with a note, and every ruling stays on the timeline. - A judge can expunge the arrest report of a closed case with a reason. It then disappears from officers' lookups and records; only judges and CAD managers still see it. The fine is not refunded by expunging; the ruling decided it. - Every case has a timeline: filed, assigned, scheduled, notes, rulings, dismissal and expungement, each with its author. A defendant sees their own cases (parties, court date, rulings), not the staff notes. Plan: Free. ## 16g. CAD: radio and the panic button CAD > Radio (`/g//cad/radio`) is text radio for members with `cad.radio` (law enforcement, Fire & EMS, DOT and Dispatch departments, and roles with the matching Access presets). Radio stays on the website: Metro never sends radio into the game as private messages. Free on every plan. - Channels: All units and Dispatch are shared and every member with the radio can use them. Each CAD department also gets its own channel (the owner can turn that off and add or rename channels on Dashboard > CAD settings), and only that department's members see it. - A unit on duty sends as its callsign; a dispatcher sends as "Dispatch". A message is at most 300 characters, goes through the server's name filter and is limited to one message every 1.5 seconds per member. The last 30 days are kept. Messages appear live without reloading. - A dispatcher announcement also shows in the Dispatch channel while it is up. - On every CAD page, members with the radio get a slim radio bar along the bottom of the page to read and send without leaving the board. The page ends above it, so it never covers a button or a list. - The panic button is on the radio bar and the Radio page for units on duty. Pressing it twice (it asks to confirm) sets the unit to its department's Panic status (10-99), opens a P1 call at the unit's live position and postal with the unit attached, puts a panic line in every channel, and alerts every unit and dispatcher with a sound, a banner with the callsign and postal, and a ring around the unit on the map. On the dispatch console, the unit panel and the phone MDT the alert is their own red bar, with the sound and no extra banner or pop-up. A unit can press panic once every 60 seconds. Panic changes nothing in the game. - If the owner sets a CAD alerts channel on Dashboard > CAD settings, panic alerts and dispatcher announcements are also posted there as a Discord card with the unit, department, postal and call number. It is posted once per alert. The panic card pings the roles picked on Dashboard > CAD settings > Panic, and only those; it never pings @everyone or @here, and no other CAD card pings anyone. - Names, callsigns and messages are cleaned before they are shown, so they cannot ping anyone or change how a page looks. Plan: Free. ## 16h. CAD: Metro Dispatch (Plus, beta) Metro Dispatch is an automated voice dispatcher for law enforcement radio. It is a separate Discord bot, "Metro Dispatch", that sits in one voice channel, listens to what units say there, answers by voice and in that channel's text chat, and keeps the CAD up to date for them. It is in beta: it understands English only and can mishear. - Setup: Dashboard > CAD settings > Metro Dispatch (`/g//manage/cad/metro-dispatch`), with `cad.settings`. Add the Metro Dispatch bot with the button on that page (it asks for View Channel, Send Messages, Connect, Speak, Move Members and Use Voice Activity), pick its voice channel and switch it on. Optional: the name it uses on the air (default "Dispatch", up to 32 characters, checked by the name filter), the time zone its time checks use, a supervisor role and an alert role. Changes are picked up within 30 seconds. - The page shows where it stands: Offline (not running), Off, Starting, Joining, On the air, Not in this server (add the bot), No channel (the channel is gone), Cannot join (it needs View Channel, Connect and Speak there) or Needs Plus. - Calling it: a unit starts with "Dispatch", then its callsign and what it needs ("Dispatch, 2 Adam 12, 10-8"). After a reply the unit can carry on without "Dispatch" for 15 seconds. Talk without "Dispatch" is ignored, and a plain "10-4" gets no reply. - It works for units that are on duty in the CAD, found by their Discord account: status changes (10-8, en route, on scene, busy, transporting, clear, off duty), joining a call, notes on a call, closing a call with a disposition, a new call for what the unit reports, priority changes, plate, name and warrant checks, citations, "calls holding", "who is available", the nearest unit and the panic. Every change goes through the CAD's own rules and shows as Metro Dispatch; when the CAD refuses, it says why on the air. - It reads out what is new in the CAD: new calls, a dispatcher on the console assigning a unit, BOLOs, announcements, and a call nobody has taken for 5 minutes (once). - When a person is signed on as dispatcher in the CAD, it stays off the air and leaves the radio to them. - A panic or 10-33 gets an emergency tone, restricts the channel until the unit says code 4 or a supervisor releases it, and pings the alert role in the channel chat; it checks on the unit after 30 seconds of silence. A unit quiet for 10 minutes on a stop gets a status check. "Page my supervisor" and PIT requests ping the supervisor role; it never authorises a PIT itself. "Switch me to TAC 2" moves the unit to that voice channel. It pings only those two roles, never a player, @everyone or @here. - Voice in its channel is turned into text to act on. No recordings are kept: each transmission's audio is deleted as soon as it is heard. Names and text from the game are cleaned before they are spoken or posted. - Plus runs one dispatcher, for law enforcement, in one voice channel. If the server's Plus ends, it leaves the channel and the settings are kept. Plan: Plus (beta). ## 17. Crews What it does: players form crews with a shared money pot, ranks and, on Plus, territory and wars. Crews are off until the owner turns them on. How a player uses it: - `/crew create name: tag:`: found a crew. Costs 10,000 by default. You become its Leader. - `/crew invite user:@member`: invite a verified player (needs the invite rank permission). Invites expire after 24 hours. - `/crew accept` and `/crew decline`: answer your pending invite. - `/crew kick user:@member`: remove a member (kick permission). - `/crew leave`: leave. If you are the last member, the crew is disbanded and its pot is lost. - `/crew disband confirm:True`: Leader only. Removes everyone; the pot is lost. - `/crew deposit amount:`: put money into the pot. - `/crew withdraw amount:`: take money out (withdraw permission). At most 50% of the pot per day by default. - `/crew info [name:]`: a crew's pot. Without a name, your own crew. - `/crew mine`: your own crew. - `/crew leaderboard [metric:]`: the top 10 crews. - `/crew rank set user:@member rank:`: set a member's rank (manage ranks permission, only below your own rank). - `/crew leader transfer user:@member`: hand leadership to another member (Leader only). - `/crew territory list` (Plus): every territory zone and who controls it. - `/crew war declare crew:` (Plus): declare war (declare war permission). - `/crew war status` (Plus): your crew's current war. - Website: "My crew" (`/g//me/crew`): found or join a crew, deposit, withdraw, invite by Discord user ID, kick, declare war and leave. Crew ranks (defaults): Recruit (no permissions), Member (no permissions), Officer (invite, kick, withdraw), Leader (everything). The owner can change ranks (2 to 10). Permissions: invite, kick, withdraw, manage ranks, declare war, edit territory. Rules (defaults): - Up to 15 members per crew and 50 crews per server. - 5% of each job payment a member earns also goes into the crew pot (extra money, not taken from the member). - Crew founding, disbanding and wars are announced in the log channel. - Optional Discord role per crew, added when a member joins and removed when they leave (off by default). Territory (Plus): a crew takes a territory zone after 60 minutes of presence there. A held zone earns 100 per hour for the pot, paused while another crew contests it. Wars (Plus): a war lasts 24 hours and is scored on kills. The winner takes 10% of the loser's pot. A crew can declare a new war 24 hours after its last one. Owner setup: Dashboard > Features > Crews (`/g//manage/features/crews`): turn crews, territory and wars on or off, set the founding cost, size limits, ranks, the job cut, and draw territory zones. Plan: crews are Free. Territory and wars are Plus. Access permissions: `crews.view` and `crews.manage` for the dashboard Crews page. ## 18. Police tools: lookups, warrants, BOLOs and fines What it does: gives police, sheriff, judges and staff a records system for the server. Person lookup: - `/lookup person player:`: a player's record. Shows live warrants, standing fines and their total, number of priors, heat, licences (with any suspension), vehicles, and, if you also have `cameras.search`, where a camera last saw them. Ends with a link to the full record on the dashboard. - Anyone the server has seen can be found by username or Roblox id: linked players first, then players in the server right now, then players a camera saw in the last 7 days. A player who has not linked a Discord account shows with a "Not linked" note and no mention. - CAD Person lookup (`/g//cad/lookup?mode=person`): search by name or Roblox id, with the same order; results not linked are marked "not linked" or "seen on camera". From here you can issue and clear warrants, fine the player, and see licences, vehicles, camera sightings and the record. - Access permission: `lookup.person`. Plate lookup: - `/lookup plate plate:`: whether the plate is on the hotlist, who it is registered to (their Discord account and Roblox name, the car, and when Metro last saw them driving it), and, if you also have `cameras.search`, where it was last seen (postal, time, vehicle), the postals it has been seen in (up to 5, with how often and when), and up to 5 recent camera sightings (driver's Roblox id, camera, vehicle, time). Ends with a link to the dashboard. - CAD Plate lookup (`/g//cad/lookup?mode=plate`): a plate is 2 to 10 letters, digits or dashes. Shows who the plate is registered to, then, for holders of `cameras.search`, where it was last seen, every postal it has been seen in, and its camera sightings. - Where a plate has been: every poll, Metro notes the postal and position of each spawned car with a plate and who is driving it, whether or not the server has cameras. These sightings are kept 7 days by default (`plates.sighting_retention_h`, 1 to 720 hours). - Access permission: `lookup.plate`. Camera sightings in either lookup need `cameras.search` as well. - Every person and plate lookup, in Discord or on the website, is written to the camera search log the owner can read. Warrants: - `/warrant issue player: reason:<3-200 characters>`: put a live warrant on a player, linked or not, as long as the server has seen them. Needs `warrants.issue`. - `/warrant clear id: reason:<3-200 characters>`: close a live warrant. The number comes from `/lookup person`. Needs `warrants.clear`. - `/warrant list`: up to 20 live warrants. Needs `warrants.view` (or `lookup.person`). - CAD Warrants page (`/g//cad/warrants`): up to 50 live warrants, with Clear. Issuing is on Person lookup. - A player can have at most 5 live warrants. - While a warrant is live, camera sightings of that player are flagged. See section 19 for the current state of camera alerts. BOLOs (be on the lookout): - The CAD Hotlist page (`/g//cad/bolos`) adds plate and player entries to the camera hotlist with a reason (up to 200 characters). - BOLOs follow the hotlist rules: a second staff member approves each entry by default, entries expire after 7 days, and Free servers can have 10 active entries. - Access permissions: `bolo.view` to see, `bolo.manage` to add, approve and remove. Fines issued by staff: - `/fine player: amount: reason:`: fine anyone the server has seen, linked or not. Needs only `fines.issue`; works with Government off. A name that matches several players lists up to 5 with their Roblox ids; run it again with the id. The fine is posted to the log channel, and linked players get a DM. - CAD Person lookup "Fine" and Staff Panel Live panel "Fine a player": amount and reason. Needs `fines.issue`. - `/gov fine user:@member amount: reason:` (Plus): needs the Issue fines office power or `fines.issue`. - The biggest fine by hand is 5,000 by default. A fine can take a balance below zero, down to the debt limit. - The player is told about the fine and how long they have to appeal (3 days by default). - See section 21 for appeals. - Department page Fines section, for holders of `fines.manage` (the Judges preset has it): open appeals with Uphold and Void, and the 25 newest fines, each with Void fine. Voiding refunds the player and closes any open appeal on that fine. Plan: lookups, warrants, BOLOs, `/fine` and dashboard fines are Free. `/gov fine` and `/gov appeal` are Plus. ## 19. Cameras and camera rules What it does: owners place virtual traffic cameras on the county map. Metro works out when a player's path crosses a camera and records a sighting with the plate, vehicle and speed. Owners write rules that react to sightings, and staff can search sightings and keep a hotlist. How a camera works: - A camera is a line (a gate) across a road, placed on the dashboard map. The default half-width is 60 studs (range 20 to 200). - The game reports positions every 5 to 6 seconds, so Metro rebuilds the likely route on the road network between two positions. If the route crosses the gate, it records a sighting. On foot or off road it uses a straight line. - A camera can watch one direction only (a heading window). - Speed is the average over the path between two readings, in studs per second. It can read low for a short burst but never reads high. Unclear routes are marked as probable and with low speed confidence. - The same player at the same camera is recorded at most once every 30 seconds by default. Rules: - Owners write rules in a small rule language on the Cameras page. Example: ``` rule "No licence, no drive" when camera "Main St north" spotted if vehicle.class == "performance" and licence.performance != "valid" then fine 500 "Driving a performance car without a licence" cooldown 1h per player ``` - `when camera spotted` is the trigger. - `if` lines test fields such as `player.team`, `player.wanted`, `player.balance`, `vehicle.class`, `vehicle.plate`, `vehicle.owned`, `licence.`, `speed`, `speed.confidence`, `time.hour`, `zone.names`. Operators: `== != < <= > >= contains in`. - `then` actions: `fine`, `warn`, `pm`, `log`, `notify staff`, `escalate respawn after `, `tag`, `treasury` (a toll). - Every rule needs a `cooldown ... per player`. - A rule that does not parse is not saved, and the error shows its line and column. - New and edited rules run in trial (log only) for 24 hours by default. The owner can end a trial early. - CAD Replay (`/g//cad/cameras/replay`) runs a rule against the kept sightings and shows what it would have done. - Staff (players with an in-game permission above Normal) never get fines, warnings or respawns from rules. - Rule fines per player per day are capped by `government.fines.max_auto_per_day` (default 2,000). - Ready-made rule sets to copy: Licences matter, Speed traps, Wanted watch, Downtown curfew, Toll bridge, Stolen cars. "Cameras act" (`cameras.enforce`) is off by default. In this trial mode Metro logs matches without fines or actions, and the Cameras page shows a "would have fined" weekly summary. Owners can turn actions on. "Hotlist alerts" (`cameras.hotlist_alerts`) is on by default but needs `cameras.alert_channel_id` to send alerts. The Metro-wide camera pause overrides both switches for every server. Hotlist: - A hotlist entry watches a plate, a vehicle fingerprint (name, colour and livery) or a player (Roblox id), with a reason. - `/cameras hotlist add kind: value: reason:`: add an entry. Needs `cameras.hotlist`. - `/cameras hotlist remove entry_id:`: remove an entry. Needs `cameras.hotlist`. - `/cameras hotlist list`: up to 20 entries with their status (live, pending, expired, removed). Needs `cameras.view` or `cameras.hotlist`. - By default a second staff member must approve each entry (you cannot approve your own). An approval card is posted in the camera alert channel. - Entries expire after 7 days by default (1 to 90). - Free: 10 active entries. Plus: unlimited. Live BOLO cards: - When a live hotlist plate or player entry is seen in the game, Metro posts one BOLO card in the camera alert channel, else the log channel, whether or not a camera saw them. Fingerprint entries do not post cards. - The card shows the county map with a moving pin and the last few positions, "Seen near postal X" and when they were last seen. Later sightings edit the same message, at most once every 10 seconds per target. - After 15 minutes with no sighting the card is edited to "Lost" and its button is removed. The next sighting opens a new card. - An on-duty member with `cameras.view` can press "Mark found" to close the card. The target cannot open a new card for 10 minutes afterwards. - Needs `cameras.alert_channel_id`, and "Hotlist alerts" (`cameras.hotlist_alerts`, on by default) stays on. The Metro-wide camera pause stops the cards. Search: - `/cameras search [plate:] [roblox_id:] [fingerprint:] [camera:] [zone:]`: give at least one filter. Needs `cameras.search`. - CAD Camera search (`/g//cad/cameras/search`): plate, player, car fingerprint, camera, zone, and a time range. - Free searches the last 24 hours. Plus searches everything still kept. - Every search is logged with who ran it. The owner can see who looked up whom. - Plus: export results as CSV or JSON as evidence. Player view: - When the owner turns on the player camera view (off by default), players see "Camera sightings" (`/g//me/sightings`): every sighting about them in the kept window, rule matches, a map, and an Appeal button for camera fines. Players can delete every camera observation about themselves on that server. - With the player view on, a linked player also gets a "spotted" DM with the camera, the pass speed and a map, at most once per 10 minutes per camera. Owner setup: - Dashboard > Features > Cameras (`/g//manage/features/cameras`): switch cameras on (off by default), choose Cameras act or trial mode and hotlist alerts, place cameras on the map, load a layout (Minimal 22 cameras, Dense 50, Mass surveillance 100 which needs Plus), import or export a camera file, write rules, manage the hotlist, and set the alert channel and an optional role to ping. - `/channels set purpose:Camera alerts channel:#channel` also sets the alert channel. Without one, alerts fall back to the log channel. Defaults: | Setting | Default | Range | |---|---|---| | Cameras on | Off | | | Cameras act | Off (trial, log only) | | | Hotlist alerts | On; needs an alert channel or a log channel | | | Camera fines per player per day | 2,000 | 0 or more | | Most cameras | 25 | Free up to 25, Plus up to 100 | | Most rules | 20 | Free up to 20, Plus up to 100 | | Gate half-width | 60 studs | 20 to 200 | | Sightings kept | 24 hours | 1 to 168 hours (more than 24 needs Plus) | | Speed tolerance | 10% | 0 to 50% | | Rule trial | 24 hours | 0 to 168 | | Hotlist approval | On | | | Hotlist expiry | 7 days | 1 to 90 | | "Seen earlier" window | 15 minutes | 1 to 120 | | Player camera view | Off | | Plan: cameras, rules, search (24 hours) and the hotlist (10 entries) are Free. Analytics (passes per hour, busiest cameras, rules by firing, fines by rule), longer search, evidence export, 100 cameras and rules, and an unlimited hotlist are Plus. Access permissions: `cameras.view` (see cameras, list the hotlist), `cameras.search` (search sightings), `cameras.hotlist` (add and remove hotlist entries), `cameras.manage` (place cameras, write rules, set alerts). ## 20. Staff accountability What it does: builds a record of how staff work, from data the game already reports. It covers mod calls, the staff command log and callsigns. It never punishes anyone on its own. Mod calls: - When a player calls for a moderator in game and a staff member takes the call, Metro records who answered and how fast. - A response time is only recorded if Metro saw the call while it was still unanswered. - The moderator who takes a call is paid 60 by default (not for their own call), up to 600 per 60 minutes. - A call counts as missed after 600 seconds (10 minutes) unanswered. - Each answered call posts a "Mod call answered" panel in the log channel. Command log flags: Metro reads the in-game staff command log and flags patterns: - A burst of destructive commands: 5 or more of kill, respawn, refresh, jail, kick or ban within 60 seconds. - Repeated teleports: 6 or more of tp, bring or to within 120 seconds. - Staff permission changes: any mod, unmod, admin, unadmin, helper, unhelper or owner command. Flagged every time. - Burst flags wait 15 minutes before flagging the same staff member again. - Flags post to the staff alert channel, or the log channel when none is set. A flag stays open until someone clears it on the dashboard. Callsigns: Metro records each player's in-game callsign when they join and when it changes. Staff lists show callsigns next to names. When a player uses a callsign another player reserved (the Callsign reservation perk), Metro posts an alert in the staff alerts channel, or the log channel when none is set. It takes no action on its own. How staff use it: - `/staff scoreboard [days:<1-90>]`: who answered how many mod calls, their median response time, and missed calls. Default 7 days. - `/staff calls [count:<1-25>]`: the latest mod calls and who took them. Default 10. - `/staff flags`: flags still waiting for a human, with the command lines that caused them. - `/staff commands [player:] [count:<1-25>]`: the raw staff command log. - Staff Panel > Staff logs (`/g//staff/logs`): flags with Clear, staff money adjustments from the last 30 days, and recent admin commands. Staff Panel > Mod calls (`/g//staff/calls`): the staff roster and a calls chart for the last 24 hours, 7 days or 30 days. Owner setup: All settings > Staff: rewards, caps, thresholds, the command lists, the unanswered time, callsigns on or off. `/channels set purpose:Staff alerts channel:#channel` sets the alert channel. Punishment log: every moderation command staff run in game (kick, ban, unban, warn, and any other command word the owner maps) is recorded as a punishment on the player it names. An unban ends the matching open ban, and a ban with an end date shows as expired once that date passes. Staff can also record something done outside the game. - `/punish add player: type: reason: [duration_days:<1-3650>]`: records a punishment by hand. The reason is up to 500 characters. Only a ban takes a duration; without one it is permanent. - `/punish log player:`: that player's punishment history. - On servers using the new dashboard, the Staff Panel's Live panel (`/g//staff/panel`) has Log punishment, which records the same as `/punish add`. - Staff Panel > Punishments (`/g//staff/punishments`): the whole log with search by player and filters for staff member and type, plus one player's history. Settings: All settings > Staff > Punishments (on or off, and which command word maps to which type). Plan: the punishment log is Free with the last 28 days of history and 25 rows per page. Plus unlocks history beyond 28 days, 100 rows per page and CSV export. Access permissions: `staff.punishments.view` for the Punishments page and `/punish log`, `staff.punishments.add` for `/punish add`. Plan: Free. Access permissions: `staff.view` for every `/staff` command and the Staff logs page, `staff.manage` to clear flags. Remote moderation: staff with the `staff.moderate` Access permission ("Moderate remotely") kick, ban, unban, warn, message and announce in the game without being in it. Only a player who is in the server right now can be kicked, warned or messaged, an unban or ban can name anyone, and staff in the game cannot be moderated this way. Every action asks for a reason or text, is logged under the staff member's name, and a kick, ban, unban or warn is added to the punishment log. - `/mod kick player: reason:`, `/mod ban player: reason:`, `/mod warn player: reason:`: player names are suggested from who is online. Metro shows the action and asks for Confirm before it sends. - `/mod unban player: [reason:]`: suggests players with an open ban. - `/mod pm player: message:`: a private message to one player. - `/mod announce style: message:`: shows a message to everyone in the server. - Staff Panel: Kick, Ban and PM actions on the live map's player list and on player pages, and Staff Panel > Remote moderation (`/g//staff/moderate`) to pick a player, send an action and see recent actions with their outcome. An action shows as sent, dry run (nothing reached the game), failed or dropped (the player left or it waited too long). - Settings: All settings > Staff > Remote moderation (on or off, text length, hourly limits). Plan: Free. Plus raises the hourly limits: per staff member 20 on Free and 60 on Plus, per server 60 on Free and 240 on Plus. Access permission: `staff.moderate`, in the Staff and Management presets. Shifts, quotas and leave of absence: Metro clocks staff in and out and measures each week against a quota. - Automatic shifts: a staff member is clocked in while they are in the server and listed in the game's Staff section, hold an in-game permission above Normal, or are on a team the owner named as a staff team. They are clocked out when they leave or stop being staff. Time while Metro could not read the server is never counted. - A week runs from Monday 00:00 UTC to the next Monday, for every server. - Weekly activity per person: minutes on shift, mod calls answered and staff commands run. Someone who answered a call or ran a command without ever being on shift is listed without a quota. - Quotas: the owner sets weekly minutes per staff level (admin, mod, helper, team). 0 means no quota. A person is above or below quota only when a quota applies to them and they were not on approved leave. - Weekly summary: after each week closes, Metro posts who was above quota, who was below and who was on leave, in the staff summary channel (falling back to the staff alert channel, then the log channel). It also saves that week's figures, and they never change afterwards, even if the quota is changed later. - `/shift start`: clock in by hand, for staff the game does not list as staff. It counts only while their linked Roblox account is in the server and ends when they leave. - `/shift end`: clock out. An automatic shift stays ended until the player leaves and rejoins. - On servers using the new dashboard, the Staff Panel's Live panel has Start shift and End shift, which work like `/shift start` and `/shift end` for the signed-in member's linked Roblox account. The same page shows a live feed of staff commands, mod calls, job pay, purchases and fines, the latest punishments and who is on shift. - `/shift status`: your shift, minutes this week against your quota, and any leave. - `/loa request from: to: reason:`: asks for leave. Dates are UTC days and the reason is up to 500 characters. The longest leave is 60 days by default, and it cannot overlap your other pending or approved leave. A card with Approve and Deny buttons goes to the leave channel. Only approved leave excuses a quota. - `/loa list`: your leave requests. `/loa cancel id:`: withdraws a pending or approved request. The requester gets a direct message when it is decided. - Staff Panel > Shifts & activity (`/g//staff/shifts`): who is on shift and each person's week. Staff Panel > Quotas (`/g//staff/quotas`): who is above or below quota and the weekly history. Staff Panel > Leave of absence (`/g//staff/loa`): requests, with Approve and Deny for reviewers. - Owner setup: All settings > Staff > Shifts, quotas and leave (`/g//settings/staff`): turn the feature, automatic shifts and the weekly summary on or off, set the quotas, the staff team names, the longest leave and the channels. Plan: automatic shifts, quotas, leave with approvals and the last 4 closed weeks of history are Free. Plus unlocks quota history beyond 4 weeks (up to 104 weeks) and CSV export. Access permissions: `staff.shifts.view` for `/shift` and the Shifts page, `staff.quota.view` or `staff.quota.manage` for the Quotas page and its history, `staff.loa.request` for `/loa`, `staff.loa.review` to approve or deny leave. Staff departments can be given the Shifts & activity, Quotas and Leave of absence tools. ## 20a. Automations What it does: seven things Metro can do in your server on its own. All are Free and all are off until you switch them on. Set them up at Dashboard > Automations (`/g//manage/automations`); each has its own switch and shows the last 20 things it did. Settings save from the bar at the bottom of the page. Staff are never targeted by the AFK check, the welcome message or team restrictions. | Automation | What it does | Defaults and limits | |---|---|---| | AFK check | Sends a private message to a player who has not moved, then records that they stayed | Warns after 10 minutes still (2 to 60); records 5 minutes after the warning (1 to 60); moving more than 5 studs (0 to 50) counts as moving. Metro does not remove players: it only warns and records | | Welcome message | Sends one private message when a player joins; adds a hint to run `/verify` if they have not linked | Once per player per 24 hours. Message up to 180 characters with `{server}`, `{player}` and `{verify}` | | Timed messages | Sends a hint (`:h`) or pop-up (`:m`) on an interval or at a time of day, only while players are online | Up to 10 messages, each up to 180 characters. Intervals from 5 to 1440 minutes; a daily message goes out at its time, up to 30 minutes late. At most one timed message per 5 minutes | | Team restrictions | Players on a chosen team need one of its Discord roles. Warns, waits, then sends a second message or respawns the player | Up to 8 teams. Grace 60 seconds (15 to 600). Action: message, respawn or kick (kick currently sends a second message and records it). Unlinked players count as missing the role by default. A team can also be limited to zones: a player outside them gets a message at most every 5 minutes. Metro acts on a role only when it knows it is current, and otherwise does nothing | | Weather and time | Keeps the in-game time and weather set | Time: real (server timezone), fixed hour, or a full day every 24 to 240 minutes (default 48). Weather: clear, fog, rain or thunderstorm, fixed or rotating every 15 to 240 minutes (default 60). At most one command per 10 minutes, only while players are online. Weather needs the game's Premium Server Pack | | Priority and peacetime | Players ask for a priority, staff approve, Metro announces it in game and ends it on time. Staff can set peacetime to off, on or strict | Lasts 20 minutes by default (5 to 120). Cooldown 15 minutes after one ends (0 to 120). Up to 3 requests waiting (1 to 10). One priority at a time. A request nobody decides within 15 minutes expires | | Mass-command alerts | Flags a staff member who runs a burst of destructive commands, or runs a moderation, teleport or permission command without your on-duty role | The burst rule is the one under Staff accountability. The on-duty flag needs the on-duty role set and the staff member linked with `/verify`. A flag has no in-game effect | Priority in detail: - A linked player runs `/priority request reason:`, or uses the strip at the top of CAD Live units (`/g//cad/map`) and 911 & duty. The reason is up to 150 characters and goes through the name filter. - A card with Approve and Deny buttons appears in the channel you pick, or the log channel. The staff role you choose, Administrators, the owner and roles with `dispatch.manage` can press them. - When approved, Metro announces the priority in game. It ends after its time, or earlier with `/priority end` or the CAD strip, which staff and the player who has the priority can use. Metro announces the end too. - `/priority peacetime mode:` (staff) sets peacetime and announces it in game. `/priority status` shows the active priority, how many requests wait and the peacetime mode. - The CAD strip shows the same: whether a priority is running, how many requests wait, and the peacetime mode. Staff Panel: the Live page shows how many AFK warnings and team warnings went out in the last hour, and how many players stayed AFK after the warning today. A count appears only while its automation is on. Server timezone: set on the same page (default UTC). Timed messages with a time of day, and the "real" time setting, follow it. Plan: Free. Setting up the page needs Dashboard access (the owner, Administrators and the Manager role). `/priority` needs the permissions above. ## 20b. Economy insights What it does: Metro records your economy once a day: how much money was created (job pay, duty pay, staff adjustments, grants) and how much was removed (purchases, fines, taxes, rent, fees), plus the total money players hold, the median balance and the richest player's share. Today's figures update every hour. Read them at Dashboard > All settings > Insights (`/g//manage/advanced/insights`). Nothing is posted to Discord. The page shows: - A verdict (Inflating or Steady, or Not enough days yet until there are 7 full days), the net change, the money supply and the median balance. - Money created against money removed, one point per day, for the last 30 days. - Sources and sinks: the biggest ways money came in and went out, with their share. - Leak hints, ranked by how serious they are, each with a link to where you can look into it. | Warning | When | Suggested fix | |---|---|---| | Inflating | Each of the last 7 full days created more than twice what it removed | Raise income tax by 5 points, up to the highest the Mayor can set. When government or income tax is off, or tax is already at its highest, raise every vehicle price by 10% instead | | One job makes most of the money | One job paid out more than 60% of the money created over the last 7 days | Lower that job's base pay so it lands near 60%, cutting at most half. When the base pay is already 0 or 1, a link to the Jobs page instead | | One player holds a large share | The richest player holds more than 25% of all player money | Link to the Staff Panel's Live panel | | Staff adjustments are the biggest source | Money added by staff was the largest single source over the last 7 days | Link to Staff logs | A fix changes nothing until you press Apply and confirm. Metro checks the suggestion again when you confirm and applies it only if it is still the change you saw, so an old page applies nothing. Each suggestion can be applied once per day of figures. Tax and pay changes show in the Audit log. Applying a fix also needs access to the page it changes (Government, Jobs or Vehicles). The Overview shows one line, such as "Created $120k and removed $40k this week: prices will feel cheap.", with a link to Insights when the economy is inflating, shrinking or leaking. Settings: All settings > Telemetry. Turn it off to stop recording and hide Insights; figures already recorded are kept. You can also change the thresholds (inflating days in a row, 3 to 30; the inflating ratio, 1.2 to 10; the job share, 30% to 95%; the richest player's share, 5% to 90%), switch off the staff adjustment warning, and set how far a fix moves income tax (1 to 10 points) and vehicle prices (5% to 50%). Plan: Free. On by default. Insights needs Dashboard access (the owner, Administrators and the Manager role, or the Insights page granted in advanced mode) and the Manage Server permission in Discord. ## 20c. Game logs and server status What it does: Metro posts what happens in your ER:LC server to Discord, and keeps one live status message for the server. Both are Free and use the same game reading Metro already does, so they add no load to your server. Game logs. Five kinds: - Joins and leaves - Kills - Staff commands - Mod calls (a player asks for a moderator, and who answered) - Vehicle spawns (off by default; a busy server spawns dozens a minute) Picking channels: run `/channels set` with purpose "Game logs" to send every kind to one channel, or give a kind its own channel with "Join logs", "Kill logs", "Command logs", "Mod call logs" or "Vehicle logs". A kind's own channel wins over the combined one. Switch the whole feature or any kind on or off at Dashboard > All settings > Game logs. Nothing posts until a channel is set. Batching: Metro posts one message per channel each time it reads the server, never one message per event. A section shows up to 50 lines, then "and N more". When Metro restarts, or logs are switched on, it does not repost older lines. Server status: run `/channels set` with purpose "Server status". Metro keeps one message there with the server name, players and maximum, queue, staff in game, players per team, the join code, a "Join server" button and a "Powered by Metro" button. Metro edits the same message instead of posting new ones: at most once a minute on Free and every 15 seconds on Plus, and only when something changed. If the message is deleted, Metro posts it again. If Metro has had no data from the server for 3 minutes, the message says so. Clearing the channel leaves the last message in place. Safety: every player name, command, vehicle name and plate is cleaned before it is posted. Metro collects no real names, ages or other personal data for these features. Plan: Free. Plus refreshes the status message faster. ## 20d. Applications and ban appeals What it does: staff applications and ban appeals run as web forms. An owner builds the form on the dashboard, players fill it in on metrobot.app, reviewers decide in Discord or on the dashboard, and Metro grants the roles and sends the result by DM. What owners build (Dashboard > Forms): - A form has a title, a description, 1 to 25 questions, a review channel, the roles that may review, and the roles a player gets when accepted. - Question kinds: short text (up to 200 characters), long text (up to 2000), choice (2 to 10 options), yes or no, and two filled-in kinds that show the player's linked Discord account and Roblox account. Players never type those. - There is no number, date, age or real-name question. Forms cannot ask players for personal details: a label, help text or option that asks for an age, birthday, real name, address, phone number, school or email address, or for a photo of the player, is refused when the owner saves. Most players are teenagers, and Metro does not collect that. - A denied player can apply again after a cooldown (24 hours for applications, 168 hours for appeals by default). A form is closed rather than deleted. A player has one waiting submission per form. Public pages (both are kept out of search engines): | Page | What it is | |---|---| | `metrobot.app/apply//
` | One application form. The player signs in with Discord. If the form asks for a Roblox account they link it first (the in-game code on the Verify page) and come back | | `metrobot.app/appeal/` | The server's ban appeal form. The player signs in, links Roblox, and Metro looks for their ban | How appeals find the ban: - Metro first looks for an active ban in the server's punishment log, matching the player's linked Roblox id or username. That shows when, by whom, why and, for a timed ban, until when. Ended and expired bans do not count, and Free servers' history window does not hide a player's own ban. If the log has no active ban, Metro falls back to `:ban` lines in the server's command log, ignoring a ban with a later `:unban` of the same player; those record no reason. The page says "No reason was recorded" when there is none. Partial names that the game accepts are not matched. - If no ban is found, the page says so and shows no form; the player can still contact the staff in Discord. The ban that was shown is stored with the appeal. - Looking up a ban is limited to 10 times per 10 minutes per player. Submitting is limited to 5 per hour per player across all forms. Reviewing: Metro posts a card with Approve and Deny buttons in the review channel. Reviewers can also decide from the dashboard inbox. Nobody reviews their own submission, and the first decision wins. On accept Metro grants the roles and sends the player a DM; a reviewer can add a reason that goes in the DM. Accepting an appeal tells staff the exact `:unban ` command to run in game. Metro does not lift the ban itself yet. Plan: | | Free | Plus | |---|---|---| | Application forms | 3 | Unlimited | | Ban appeal form | 1 | 1 | | Review | One reviewer decides | Vote thresholds and multi-reviewer flows | | Result messages | Default wording | Custom accept and deny messages | | CSV export | No | Yes | | Kept after a decision | 90 days | 365 days | A server that goes back to Free keeps its forms and settings. Names and answers shown in Discord are cleaned first, like every player-supplied name. ## 20e. Workflows What it does: a no-code automation builder. You stack a trigger ("when this happens"), conditions, loops, variables and actions ("do this") into a workflow in the dashboard, and Metro runs it. A workflow adds no new power of its own: its in-game messages go through the same command queue as everything else, its payments and fines through the same ledger, and its Discord actions through the same bot. Workflows are off until you switch one on. Open them at Dashboard > Workflows (`/g//manage/workflows`); the editor opens from a workflow's row. Examples: welcome a player who joins with an in-game message and a Discord post; add a Discord role when someone clicks a button; open a form and log what the player types; pay a bonus when a player finishes a job; post a daily reminder at a set time (Plus). Triggers (what starts a workflow). Every filter is optional. | Group | Triggers | |---|---| | In the game | Player joined, Player left, Player killed someone (killer, killed and time only: the game's kill log has no weapon), Vehicle used (name, livery, plate), Callsign changed, Team changed, Mod call, Player kicked or banned by staff, Command used (any `:command` in the command log), Custom `;command` (a `;name` a player types in chat that nothing else in Metro uses) | | In Discord | Button clicked, Form submitted (a button can open a form), `/flow` command | | In Metro | Job finished, Fine issued, Bounty placed (the closest thing Metro has to a warrant), Election news, Shift started, Shift ended | | On a schedule (Plus) | Every N minutes (5 or more), Every day at a time in a chosen time zone | Not offered, on purpose: a weapon on kills (the game does not report one), "member got or lost a role" (Discord only sends that to bots with a privileged permission Metro does not have), leave of absence (Metro has no such feature), and tickets (the action opens a thread instead). Blocks (what a workflow does). A workflow is a stack of blocks; an `if`, `switch` or `loop` block holds blocks of its own. A workflow can also have an error handler, a second stack that runs when a block fails. | Kind | Blocks | |---|---| | Logic | If / else, Switch (Plus), Loop (Plus, at most 20 passes), Random, Set variable, Wait (up to 60 seconds; Plus up to an hour), Stop | | Discord | Send message (a card with optional buttons and a form), Reply (only the person who started it sees it), Direct message, Add role, Remove role, Set nickname, React to a message the workflow posted | | Game | In-game message: a private message (`:pm`), a hint (`:h`) or a pop-up (`:m`), one line of at most 200 characters | | Metro | Pay player, Fine player, Start job, Log a note, Open a ticket thread (a thread in a channel you choose) | Text can use variables written `{{player.name}}`. The editor lists what each trigger provides: the player's name, Roblox id, Discord id, team and balance; the event's own details (the job and payout, the fine amount, a form's inputs, the text after `/flow`); the server name and player list; and the time. A name or text that came from the game or from a player is cleaned before it is used, and can never ping anyone. Safety rules (they cannot be switched off): - In game, a workflow can only send `:pm`, `:h` and `:m`. It cannot run any other command (no kick, ban, jail or respawn), and its text cannot start like a command or hold a link. Messages share the normal per-player message cooldown and queue. - On Discord, a workflow can mention only the person who started it, and nothing it posts pings anyone. It can send a direct message only to that person or to a player who linked their account. It never changes the server owner, never gives or takes a role that can ban, kick, manage the server or manage roles, and the bot checks the role again when it acts. It never fines staff. - Money: one payment is at most 1,000 on Free and 5,000 on Plus; payments a server's workflows make add up to at most 5,000 an hour on Free and 50,000 on Plus. One fine is at most 5,000; fines add up to 5,000 an hour on Free and 25,000 on Plus. Direct messages: 20 an hour on Free, 100 on Plus. - A workflow runs at most once for the same player every 10 seconds, and an effect on a player does not start the same workflow for that player again for a minute, so a workflow cannot trigger itself in a loop. - A run that reaches its step budget stops (Free 25 steps, Plus 100; a loop counts every pass). A workflow that fails five runs in a row switches itself off and the owner is told; it can be switched on again after it is edited and saved. - Imported workflows are always saved switched off. Run history: Dashboard > Workflows > Workflow runs (`/g//manage/workflows/runs`) lists every run, newest first, filtered by workflow and by result (finished, failed, refused, stopped at the step budget, skipped, waiting). A row expands to what started it, the reason in plain words if it failed or was refused, and the step log (the first 100 steps). Runs are kept 14 days. Export, import and the gallery: - Export downloads a workflow as a JSON file (`metro.workflow`, version 1). Every Discord channel, role and user in it is replaced by a named placeholder such as `channel:alerts`, so the file holds nothing that belongs to one server. - Import (Workflows > Import JSON) takes pasted JSON or a file. Metro checks it (size at most 64 KB, valid format, the same rules as a hand-built workflow, your plan's limits), shows what it holds and asks you to choose the channel, role or user for each placeholder. The workflow is saved switched off, and cannot be switched on while a placeholder is still open. - The public workflow gallery (https://metrobot.app/workflows) lists workflows other servers published, most imported first, with the trigger, the number of blocks and how many times each was imported. Every entry shows the whole file. "Import into a server" sends you, signed in with Discord, to the Import dialog of a server you manage with the file loaded. - Publishing is Free, up to 5 a day per server, from a workflow's row (Publish). Only placeholders are published; a workflow with a Discord id typed into its text is refused. The author server can unpublish its entries from the Workflows page, and Metro staff can take any entry down. Limits by plan: | Limit | Free | Plus | |---|---|---| | Workflows per server | 5 | Up to 200 | | Runs per hour (whole server) | 60 | 600 | | Steps per run | 25 | 100 | | Triggers | Every game, Discord and Metro trigger | Plus schedules | | Blocks | Everything except Switch and Loop; waits up to 60 seconds | Switch, Loop, waits up to an hour | | Run history kept | 14 days | 14 days | When a server returns to Free, its workflows are kept but one that uses a Switch, a Loop or a schedule does not run until Plus returns. Slash command: `/flow name: [input:]` runs a workflow whose trigger is a `/flow` command. The name autocompletes from the server's switched-on workflows. A button a workflow posted keeps working as long as the button still exists in a switched-on workflow of the server; otherwise it answers "This button is no longer active." Plan: Free for up to 5 workflows; Plus for more and for Switch, Loop and schedules. Access: the owner, Discord Administrators and the Manager role open Workflows; a role can be given the Workflows pages in advanced mode (Dashboard grants). ## 21. Government (Plus) What it does: players run the server's government. Offices hold powers, elections fill them, the Mayor sets taxes and laws, the treasury pays for bounties and stipends, and players can appeal fines and recall the Mayor. Government is off by default and needs Plus. Offices: - Turning government on creates three offices: - **Mayor**: elected, 14-day term. Powers: set taxes, turn laws on and off, spend the treasury, appoint other offices. - **Police Chief**: appointed. Powers: issue fines, suspend and restore licences. - **Judge**: appointed. Powers: void fines, restore licences. - The owner can add offices (name up to 40 characters), set how each is filled (Elected, Appointed by the Mayor, Assigned by the owner), seats (1 to 25), term length (0 to 3,650 days; empty means no end), a Discord role, and its powers. - Powers: Set taxes, Turn laws on and off, Spend the treasury, Appoint other offices, Issue fines, Void fines, Suspend and restore licences. - An office's Discord role is added to the holder and removed when the term ends. Elections: - Phases: sign-up, then voting, then a runoff if there is a tie, then the count. - Lengths: Quick (15 minutes sign-up, 15 minutes voting), Evening (2 hours and 2 hours), Week (3 days and 2 days). The default length is Quick. - An election card is posted in the election news channel (or the log channel) with Run and Vote buttons, and updates as the election moves on. A role can be pinged when an election starts. - Each elected office can repeat its election automatically every N days (default 14). - To run (defaults): a linked Roblox account, at least 7 days in the Discord server, no debt, and a 500 deposit. Candidates who get at least 10% of the votes get the deposit back. If the election is cancelled, every deposit is refunded. At most 10 candidates. - To vote: a linked Roblox account. The owner can require roles or a minimum number of days in the server (default 0). - The ballot is secret by default. Voters can change their vote until voting closes, unless the owner turns that off. - Ties go to a runoff by default. The owner can choose "sitting holder stays" or a coin toss instead. - Results are announced in the election news channel with the vote split, and in game when in-game announcements are on. Taxes (all go to the treasury): | Tax | Default | Owner's bounds | Applies to | |---|---|---|---| | Income tax | On, 10% | 0 to 25% | Job pay and business income. Not duty, 911 or mod-call pay. | | Sales tax | Off | 0 to 15% | Perk purchases, at the lowest rate the owner allows (0% by default) | | Property tax | 5% | 0 to 20% | A share of each rent payment | - Tax rates can change at most once per 24 hours per tax. - The owner chooses who sets rates: the Mayor (default), a council vote, or only the owner. - The owner can exempt teams from income tax. Laws: - Five laws the Mayor can turn on and off within the owner's bounds: Speed limit, Licence enforcement, Curfew zone, Transfer tax, Job subsidy. - A law can change at most once per 24 hours. - Speed limit scales the top speed Metro treats as normal for each vehicle class (bounds x0.5 to x1.5). - Curfew zone makes entering a restricted zone during the curfew window (default 00:00 to 06:00 UTC) finable, when the owner has turned on the curfew fine (300 by default). - Transfer tax, Job subsidy and Licence enforcement can be switched and are listed in the weekly county report, but they do not change transfer fees, job pay or enforcement at this time. Automatic fines (each off by default): | Fine | Amount | When | |---|---|---| | Wanted stars | 250 per star | A player reaches the star level the owner sets | | Random killing | 1,000 | A civilian kills another civilian and neither has wanted stars | | Violation | 500 | A vehicle check records an infraction | | Curfew | 300 | Entering a restricted zone during the curfew window | A fined player gets a DM, a line in the log channel, and an in-game message when in-game messages are on. Fine appeals: - `/gov appeal file fine_id: reason:`: appeal one of your own fines within the appeal window (default 3 days, up to 30; 0 turns appeals off). The fine list fills in as you type. - `/gov appeals`: list open appeals. Needs the Void fines power or `fines.view`. - `/gov appeal resolve fine_id: decision: reason:`: decide an appeal. Needs the Void fines power or `fines.manage`. Voiding refunds the fine. The player is told the decision. - Camera fines can also be appealed on the website ("My sightings"). Treasury: - Money comes in from taxes, fines, transfer fees and loan interest. - `/gov treasury bounty user:@member amount: [reason:] [interval_hours:] [budget:]`: pay a bounty, or set up a repeating one every N hours until the budget runs out. - `/gov treasury stipend user:@member amount: [reason:] [interval_hours:]`: a one-off or repeating payment. - `/gov treasury grant user:@member amount: reason:`: a one-off grant. - All three need the Spend the treasury power. When the council decides treasury spends, they become a proposal instead. Repeating payments run on their own. - The owner can require approval for spends above an amount (default: never), cap spending per day (default: no cap), and keep a minimum reserve (default 0). Spends above the approval amount wait for the owner on Dashboard > Features > Government. Council: - By default the council is the office holders. Tax changes and law changes proposed with `/gov propose` go to a council vote. - `/gov propose tax tax: rate:`, `/gov propose law key: enabled: [value:]`, `/gov propose treasury spend_kind: user:@member amount: [reason:]`, `/gov propose appointment office: user:@member`: needs the matching office power. Decisions the council does not vote on are applied at once. - `/gov proposals`: the server's proposals with yes and no counts. - `/gov vote-proposal id: vote:`: council members only. - A proposal closes after 24 hours. It needs 50% of members to vote (quorum) and more than 50% yes to pass. Appointments: - `/gov appoint office: user:@member`: appoint someone (Appoint other offices power). The office role is added. - By default the owner can veto an appointment within 24 hours, with the Veto button in the log channel, on Dashboard > Features > Government, or `/gov veto-appointment id:` (needs `government.manage`). Direct law change: - `/gov laws key: enabled: [value:]`: turn a law on or off at once, or send it to a council vote when the council decides laws. Needs the Turn laws on and off power or `government.manage`. Posted in the log channel and announced in game when in-game announcements are on. While Government is on and a law is in force, transfer tax takes the set percentage of every `/pay` amount into the treasury as its own tax row and receipt line. Job subsidy adds the set percentage to every job payout from the treasury, within its daily budget, the treasury's daily spend cap and minimum reserve; job pay still succeeds if no subsidy can be paid. Licence enforcement makes an owned car driven without its required licence one restricted-car enforcement step stricter, up to the owner's cap. Government > Records > Law effects shows tax collected, subsidy paid, licence violations and law flips; treasury spend history names job subsidies. Recall: - `/gov recall`: sign a petition to recall the elected office that has the Set taxes power (normally the Mayor). - When signatures reach 40% of active players (players paid in the last 7 days), the holder's term ends, a snap election starts and the office role is removed. - If the owner turned on recall approval, the request waits instead: a card in the log channel with Approve and Reject buttons (valid 7 days), and the "Waiting on you" list on Dashboard > Features > Government. Anyone with `government.manage` can decide. Rejecting still starts the cooldown. - After a recall, another cannot start for 14 days. Holders and status: - `/gov assign office: user:@member` and `/gov unassign office: user:@member`: put a player in an office or take them out. Needs `government.manage`. The same is on Dashboard > Features > Government > Offices. - Every change of holder (election, appointment, council-approved appointment, veto, assign, unassign, recall) adds or removes the office role in Discord. The old holder always loses the role. - `/gov status`: who holds each office, the taxes, the laws that are on and the treasury balance. Read only. - Government, election, crew and event news go to the news channel when one is set, otherwise to the log channel. - Candidate statements show in `/gov candidates`, on the election card and on Me. Elections in Discord: - `/gov run [statement:] [office:]`: sign up as a candidate. - `/gov candidates [office:]`: the candidates. During voting it includes a menu to vote. - `/gov vote candidate:@member [office:]`: vote. - `/gov election start [office:] [preset:]`, `/gov election end [office:]` (moves to voting, or counts), `/gov election cancel [office:]` (refunds deposits): need Manage Server. Weekly county report: every Sunday from 18:00 UTC, servers with government on post a summary in the election news channel (or the log channel): the treasury, money in and out by kind, office holders and term ends, the next election and the laws in force. Quiet weeks are skipped. The owner can turn it off. Website: City Hall (`/g//city`) lets players run, vote and see laws, the treasury and past results; office holders get the Office page. If the server limits running or voting by role, players use Discord instead. Owner setup: Dashboard > Features > Government (`/g//manage/features/government`): turn government on, start and manage elections, edit offices and powers, who can run and vote, election rules, the election card channel and ping role, in-game announcements, taxes, laws, fines and treasury limits, and a "Waiting on you" list where the owner approves or rejects held spends and vetoes appointments. Council members vote on open proposals in City Hall > Office (`/g//city/office`). Plan: Plus. On Free every `/gov` command answers with the Plus message. Access permissions: `government.view` to see the Government page, `government.manage` to change it and to veto appointments. `fines.issue`, `fines.view` and `fines.manage` work in place of the matching office powers for fines. ## 22. Property (Plus) What it does: owners draw zones on the map. Players rent homes and business spaces with weekly rent. Property zones are rented land. Businesses are shops players buy and run (see Businesses). Zone kinds: | Kind | Rentable | What it is for | |---|---|---| | Residence | Yes | Homes. A player entering their own residence gets "Welcome home" in game once per session. | | Business | Yes | Lessees get 5% of every job payment made inside the zone, up to 5,000 per zone per day (extra money, not taken from the worker). | | Restricted | No | Entering is recorded. Can be fined during a curfew (see Government). | | Public | No | Shown on the map. | | Territory | No | Crew territory (see Crews). | How a player uses it: - `/property list`: zones for rent, with id, kind, weekly price and free places. - `/property rent zone_id:`: rent a zone. The first week is charged at once. - `/property mine`: your leases and the next rent date. - `/property leave lease_id: confirm:True`: end a lease. Nothing is refunded. - Website: "My property" (`/g//me/property`): a map of zones, your leases, rent and leave. Rules: - Rent comes out of your wallet every week. 5% of each payment goes to the treasury as property tax by default. - If you cannot pay, you get 3 days of grace. After that the lease ends, with a post in the log channel and an in-game message. - Renting is refused when your balance is below zero, the zone is full, or you cannot pay the first week. - Each zone has a capacity (how many players can rent it). Owner setup: Dashboard > Features > Property (`/g//manage/features/property`): draw zones by placing 3 to 64 corners on the map, set kind, capacity and weekly price, and turn zones on or off. At most 200 zones per server. A business zone has a "Turn into business" action: pick a business type and a name, then keep the zone or remove it. The new business sits at the middle of the zone with a radius that covers it. Removing the zone ends its lessees' share of job income, with no rent refunded (the dialog lists them first); keeping it means jobs there pay both the lessees and the business. Turn the module on under Dashboard > Features. Settings: business cut (default 5%), business daily cap (5,000), grace days (3). Plan: Plus. Access permissions: `economy.view` and `economy.manage` for the Property page. ## 23. Businesses (Plus) What it does: owners place businesses on the map. Players buy them, earn from customers and nearby jobs, hire other players and buy upgrades. Default business types: | Type | Price | Income multiplier | Needs the business licence | |---|---|---|---| | Gas Station | 20,000 | 1.0 | No | | Dealership | 60,000 | 1.6 | Yes | | Repair Shop | 15,000 | 0.8 | No | | Diner | 10,000 | 1.0 | No | | Taxi Company | 30,000 | 1.3 | Yes | How income works (defaults): - Each player who arrives at the business pays it 40, once per player every 5 minutes. - 10% of each job payment picked up within 150 studs of the business goes to it (extra money, not taken from the worker). - Income is multiplied by the type's multiplier and the upgrade bonus, and goes to the owner's wallet. - Each business earns at most 8,000 per day. The daily total is posted in the log channel. - Income tax applies when government is on. Upgrades: level 1 costs 5,000 (+15% income), level 2 costs 15,000 (+35%), level 3 costs 40,000 (+75%). Employees: up to 5 per business. The owner sets a wage per pay cycle. Wages are paid every 24 hours from the owner's wallet, and skipped when the owner cannot afford them. How a player uses it: - `/business list`: businesses for sale, with price and licence need. - `/business buy business_id:`: buy one. - `/business mine`: your businesses, upgrade level and staff count. - `/business hire business_id: user:@member wage:`: hire a verified player. They get a notice. - `/business fire business_id: user:@member`: fire an employee. - `/business upgrade business_id:`: buy the next upgrade. - `/business sell business_id:`: sell for 50% of what you paid. Every employee is let go. - Website: "My businesses" (`/g//me/businesses`): buy, hire by Discord user ID, fire, upgrade and sell. Owner setup: Dashboard > Features > Businesses (`/g//manage/features/businesses`): turn the module on, place businesses on the map (type, name; click the map to set the position, drag the dashed circle to set the radius, default 60 studs; the coordinates can be typed instead, and Edit moves or resizes a business on the same map), add custom types (name, price, income multiplier, licence needed, buyable). Settings: income per arrival, cooldown, pickup radius and cut, daily cap, wage interval, staff limit, upgrade levels, resale percentage, and the licence class needed. Plan: Plus. Access permissions: `businesses.view` and `businesses.manage`. The difference from Property: property zones are rented land with a shared cut of job income, while a business is a shop one player owns and runs. An owner can turn a business zone into a business from the Property page. ## 24. Live map What it does: shows Liberty County with live player positions, 911 calls, robberies in progress, cameras and job stops, updated as Metro reads the game. - CAD Live units (`/g//cad/map`) for departments with the Units map tool, and Staff Panel Live (`/g//staff`) for staff. 911 calls and robberies in progress show to departments with the 911 & duty tool, cameras to departments with the Live cameras tool, and job stops to roles with `jobs.view`. - Every editor that places something (cameras, crime sites, zones, event checkpoints, businesses) uses the same map, so a click lands at the right spot in studs. - `/calls recent` and job DMs include a small map image. Plan: Free. ## 25. Templates and the gallery What it does: a template is a complete set of economy settings (pay, prices, taxes, which modules are on). Owners start from one, save their own, and copy others from the public gallery. Templates Metro ships: | Template | What it sets | |---|---| | Light | Government on with a flat 5% income tax, and nothing else turned on. | | Standard (default) | Metro's balanced defaults. On Plus it adds government: an elected Mayor on 14-day terms who appoints a Police Chief and Judge, income tax 0 to 25%, sales tax available but off. | | Full RP | Standard plus sales tax, 5% property tax, recalls, property, crews and businesses, and an automatic fine at 3 wanted stars (200 per star). | | Civilian City | No government and no fines. Every job type on with about 25 to 30% higher pay, a 30,000 daily job cap, duty at 26 per minute, cheap property with generous business cuts, businesses on, 70% car resale, a 0.5% transfer fee with a 20,000 daily limit, and a 5% car loan down payment. | | Strict RP | Lower job pay (courier 105 plus 0.18 per stud, 12,000 daily cap, duty 14 per minute), vehicle enforcement at warn, sales tax of at least 5%, a minimum credit score of 670 for loans, and week-long elections. | How an owner uses it: - `/setup template:`, or the Setup page: pick the starting template. - Dashboard Templates page (`/g//manage/templates`): - "Save current economy" with a name and an optional description. - "Review" on any template lists every setting it changes (now and after), then applies it. Applying replaces pay, prices and rules. The Server-Key, channels and roles are kept. - "Publish to gallery" (Plus) shares a saved template on the public gallery. - Template pages (https://metrobot.app/templates): one public page per template Metro ships, with every setting it changes and the steps to load it. The pages need no sign-in; loading happens on the Templates page of your server's dashboard. - Public gallery (https://metrobot.app/gallery): every published template with every setting it changes. (Workflows have their own gallery at https://metrobot.app/workflows; see "Workflows".) "Clone" asks you to sign in with Discord and pick a server you manage, then opens that server's All settings. - On Free, applying a template that turns on Plus modules writes those modules switched off, with their settings kept for later. Plan: saving and applying are Free (3 saved templates). Unlimited saved templates and publishing are Plus. Access permissions: `settings.view` to see, `settings.manage` to save and apply. ## 26. Growing your server Votes for Metro: - `/vote`: shows what a vote for Metro on top.gg pays in this server, with a "Vote on top.gg" button. Players can vote every 12 hours. - `/wallet` shows the same link button on your own wallet when you can vote and the top.gg listing is live. Refresh keeps it up to date. - A vote pays the voter in every server with Metro where they have played and that pays for votes. Default reward: 250, doubled on weekends (Friday to Sunday, UTC). - If a vote could not be paid at the time (for example the player had not verified yet), running `/vote` in a server claims it within its 12 hours. - `/vote remind:True`: Metro DMs you when you can vote again. `/vote remind:False` turns it off. - Owner setting (Grow page): "Pay players who vote" on or off, the reward (0 to 1,000,000) and the weekend multiplier (1 to 5). - Vote perks: players who vote for Metro on top.gg keep a daily streak (UTC days). Streaks of 3, 7 and 14 days pay a bonus of 1x, 3x and 6x the vote reward, then every 14 days. Votes from a server's verified players count toward that server's monthly goal (default 30, set on the Grow page, 10 to 500); reaching it gives the server 7 days of Plus once a month. Anyone who voted in the last 30 days shows a Voter badge on /profile, the profile card and their wallet. Owners can set an optional Voter role, which is cosmetic only. Vote reminders can be stopped with the button on the DM or `/vote remind:False`. Public server page: - An owner can turn on a public page at `https://metrobot.app/s/
` on the Grow page. - Settings: address (3 to 40 lowercase letters, numbers and single dashes, unique), page on (off by default), listed in the directory (on by default), tagline (up to 140 characters), ER:LC join code, and a Discord invite (discord.gg links only). - The page shows the join code, the invite, players seen, jobs and money earned this week, top earners, the richest players, and the government, crews and businesses when present. It shows Roblox usernames only. It never shows ages, locations, positions or camera data. - Any player can hide themselves from every server's public page with the switch on "My profile". - Owners can list up to five join requirements (whitelist, Discord, boost, other; 120 characters each) and a minimum age shown as "13+" to "21+". The same lines are added to the `/advertise` ad. - Owners can also switch on weekly staff activity (off by default): staff on duty, total shift hours and mod calls answered over the last 7 days, as totals with no names. - A player whose server does not use Metro can open `https://metrobot.app/request` for a message to send their own server owner. Metro sends nothing itself. - Listed pages appear in the directory at https://metrobot.app/servers (https://metrobot.app/servers/directory when signed in), ordered by jobs paid this week. Server ad: - `/advertise [length:] [style:]`: writes a recruiting ad for ER:LC advertising servers. It lists what your players get from the modules you have on, your tagline, join code, Discord invite and public page. Needs Manage Server. - The reply also includes your referral link. - The Grow page has the same ad writer. Referrals: each server has a referral link (see section 2, "Free ways to get Plus"). The Grow page shows pending and rewarded referrals and the banked Plus days. During a server's first 7 days, its owner can type a referral code on the Grow page. "Powered by Metro": public posts (the season board, `/profile` cards and election results) carry a small "Powered by Metro" line and an "Add Metro to your server" button. Free servers always show it. Plus servers can turn it off on the Grow page. "Get Metro": six Metro cards carry a "Get Metro" link button, always last in its row and never pinging anyone: the `/help` reply, the verify success DM, a player's first-job DM, the paid-run DM after a job pays, election results and the `/wallet` reply. It opens https://metrobot.app, so players who see Metro work can add it to their own server. Free servers always show it. Plus servers can hide it with the "Get Metro" switch under Dashboard > Settings > Server > Branding (Plus only). Every card Metro sends ends on a small "metrobot.app" footer line. Install sources: when a new server sets up Metro after arriving from a Metro card link, a referral link or a Metro link posted on a channel (`metrobot.app/invite?src=youtube`, also `tiktok`, `instagram`, `x`, `reddit`, `topgg`, `discord`), Metro counts it once under where it came from (the card, "referral", or the channel). The site remembers the card or channel in a `metro_src` cookie for 30 days, used only for this count. `GET /api/public/stats` reports the week's installs by source under `growth.installsBySource`. Creator links: some invited creators share a link like `metrobot.app/?via=`, and their viewers get a 20% off Plus code with it. The creator program is invite-only. Owner digest: every Monday from 16:00 UTC, Metro posts a summary in the log channel: jobs and money paid this week, players and new players, the top earner, votes for Metro, and ways to grow. Quiet weeks are skipped. It can be turned off on the Grow page. Community posts: two optional posts that Metro can make in a channel the server owner picks. Both are off by default. The owner turns them on in `/setup` (the optional community channel) or on the dashboard's Grow page, where each has its own switch and channel. - Weekly recap: posted on Saturday from 18:00 UTC. It shows the jobs paid this week, the money they paid, the top three earners by Roblox name and the new players. A week in which no job was paid gets no post. - Start-here panel: one pinned message that explains how to link an account (`/verify` or `;verify` in the game), how to start a job with `/job start`, how to check the balance with `/wallet`, how to vote with `/vote` when vote rewards are on, and the server's public page when it is on. It updates itself when those settings change and is not posted again. - If the chosen channel is deleted, Metro switches that post off and says so in the log channel. Plan: Free, except turning off "Powered by Metro" or the "Get Metro" button, which is Plus. Access permissions: `settings.view` to see the Grow page, `settings.manage` to change it. ## 27. Access (role permissions) What it does: lets the owner decide which Discord roles can use which staff tools, in Discord and on the dashboard. Who has everything: - The server owner has every permission. In Discord commands, members with Manage Server have every grantable permission. On the website that is Discord's Administrator instead: Manage Server alone gives a member only what their roles give. - The owner can choose a Manager role, which gets every grantable permission except billing. Only the owner can set or clear it; @everyone and bot roles cannot be selected. Give it only to someone trusted with settings, fines, the treasury, cameras and rules. - Billing is always the owner's alone and can never be given to a role. How the owner sets it up: - Dashboard > Roles & access (`/g//manage/access`). The owner, Discord administrators and the Manager role can open it; only the owner can change which role is Manager. - "Add role", pick a Discord role, then switch permissions on. "Fill from" applies a preset. - Turning on a "Manage" permission also turns on that area's "See" permission and its other actions. - Every change is recorded in the server's audit log. - With the new dashboard, the same page is called Permissions. It lists the server's Discord roles on the left, each with its colour, member count and preset. Choosing a role shows its permissions on the right, one section per area, with a description on each permission and an "All" switch per area. A search box and an "Enabled only" filter narrow the list. Permissions for Plus-only features (Businesses, Government) sit in their own section; a Free server can set them, and they take effect once it is on Plus. With "Page access" on, each area section also lists the single Dashboard pages that can be given to the role. Grants, presets and the Manager role work the same on both versions. Who opens the Dashboard: the server owner, members with Discord's Administrator, and the Manager role. With advanced mode on (Roles & access), the owner can also give a role single Dashboard pages. Roles & access and Billing can never be given this way. Departments: - Dashboard > Departments (`/g//manage/departments`) lists the server's departments. Each has a name, icon, colour, type (law enforcement, fire and EMS, DOT, dispatch, staff or other), member roles, leader roles, and the tools it can use. - Tools open CAD and Staff Panel pages: units map, 911 & duty, person lookup, plate lookup, warrants, hotlist, live cameras, camera search, camera replay, staff live players, mod calls, staff logs, live panel, and the department roster. CAD tools are for law enforcement, fire and EMS, DOT and dispatch departments; staff tools are for staff departments. - A server starts with five departments made from its Access roles: Police, Fire & EMS, DOT, Dispatch and Staff. Roles with the Police, Sheriff or Judges preset, or with lookup, warrant, BOLO, camera or fine permissions, join Police; roles with staff permissions join Staff. Camera tools start on for Police only when a role already had a camera permission. - These five follow Roles & access until the owner gives one roles or tools of their own: their members are the roles whose permissions put them there right now, and each member gets only the tools their own permissions cover (for example, Person lookup needs `lookup.person`, Plate lookup `lookup.plate`, Camera search `cameras.search`). Removing or narrowing a role on Roles & access takes effect at once. Renaming a department or changing its icon, colour or leaders keeps it following. - Once the owner changes a department's member roles or tools, the department gives exactly what the owner set. The owner can edit or delete any department and put a preset back, which makes it follow Roles & access again. - A member of a department opens CAD pages for its tools and the department's own pages at `/g//d/`. Staff Panel pages also open for roles with `players.view` (Live, Live panel) or `staff.view` (Mod calls, Staff logs). Permissions: | Area | Permission | Lets a role | |---|---|---| | Cameras | `cameras.view` | See live cameras and the hotlist | | Cameras | `cameras.search` | Search sightings of a player or plate | | Cameras | `cameras.hotlist` | Add and remove hotlist entries | | Cameras | `cameras.manage` | Change cameras, rules and alerts | | Lookup | `lookup.person` | See records, fines, warrants, licences and vehicles | | Lookup | `lookup.plate` | See plate owners and hotlist status (sightings need `cameras.search`) | | Warrants | `warrants.view` | Read warrants | | Warrants | `warrants.issue` | Put a warrant on a player | | Warrants | `warrants.clear` | Close a live warrant with a reason | | Warrants | `warrants.manage` | Issue and clear warrants | | Fines | `fines.view` | Read fines and open appeals | | Fines | `fines.issue` | Fine a player | | Fines | `fines.manage` | Issue fines and decide appeals | | Jail | `jail.view` | Read the jail roster and sentences | | Jail | `jail.release` | Release a player early | | Jail | `jail.manage` | Release players and change jail settings | | BOLO alerts | `bolo.view` | Read active BOLOs | | BOLO alerts | `bolo.manage` | Create, approve and close BOLOs | | Dispatch | `dispatch.view` | Read 911 calls and other players' response stats | | Dispatch | `dispatch.manage` | Assign and close calls | | Duty | `duty.view` | See who is on duty | | Duty | `duty.manage` | Change duty settings | | Staff | `staff.view` | Read staff logs, mod calls and flags; list crime sites | | Staff | `staff.manage` | Clear flags; post to the log channel from the Live panel | | Players | `players.view` | Read player profiles and records; open the Live panel and Live map | | Players | `players.manage` | Change player records | | Jobs | `jobs.view` | See jobs and runs | | Jobs | `jobs.manage` | Change jobs and pay | | Economy | `economy.view` | See banking, ranks, achievements and property | | Economy | `economy.manage` | Change those settings; pay or adjust a balance from the Live panel | | Shop and vehicles | `shop.view` | See the car lot and licences | | Shop and vehicles | `shop.manage` | Change cars, licences and enforcement | | Businesses | `businesses.view` | See businesses | | Businesses | `businesses.manage` | Place and change businesses | | Events | `events.view` | See events and schedules | | Events | `events.manage` | Create and change events | | Government | `government.view` | See offices, laws and elections | | Government | `government.manage` | Change government; veto appointments | | Crews | `crews.view` | See crews | | Crews | `crews.manage` | Change crew settings; disband crews | | Settings | `settings.view` | See setup, modules, templates, Grow, Crime and All settings | | Settings | `settings.manage` | Change server settings, module switches, API keys | Presets: | Preset | Permissions | |---|---| | Police | cameras view, search and hotlist; lookup person and plate; warrants view and issue; fines view and issue; jail view; BOLO view and manage; dispatch view and manage; duty view | | Sheriff | Police, plus warrants clear and jail release | | Fire & EMS | lookup person; dispatch view and manage; duty view; players view | | DOT | lookup plate; fines view and issue; dispatch view; duty view | | Judges | lookup person; warrants view, issue and clear; fines view, issue and manage; jail view and release | | Staff | staff view and manage; players view and manage; cameras view and search; lookup person and plate; warrants view, issue and clear; fines view and issue; jail view and release; dispatch view; duty view | | Management | everything | | Everyone | jobs, shop, businesses, events, government and crews (view only) | Notes: - Players never need a permission for their own things (wallet, jobs, bank, crew and so on). - A member without a needed permission gets: "You need the permission. Ask the server owner to give your role access on metrobot.app." - A few Discord commands check Manage Server instead of Access: `/setup`, `/admin`, `/channels`, `/advertise`, `/wallet user:`, and `/gov election`. Plan: Free. ## 28. Channels Metro posts in `/channels` (needs Manage Server): - `/channels set purpose: channel:#channel`: post one kind of thing in a channel. - `/channels clear purpose:`: stop posting it there. - `/channels list`: where each kind goes now. | Purpose | What goes there | Without a channel | |---|---|---| | Log | Payouts, purchases, fines, rent, loans, duty and call panels, staff events, owner alerts, the Monday digest | Set by `/setup`; required | | Election news | Election cards and results, the weekly county report | Uses the log channel | | Season board | The pinned weekly season leaderboard, updated every 5 minutes | Not posted | | 911 dispatch | A live panel of open 911 calls, updated every 20 seconds | Not posted | | Camera alerts | Hotlist and warrant hits, hotlist approval cards | Uses the log channel | | Staff alerts | Flagged staff command patterns | Uses the log channel | | Game logs | Joins, kills, staff commands, mod calls and vehicle spawns from the game | Not posted | | Join, kill, command, mod call and vehicle logs | One kind of game log in its own channel | Uses the game logs channel | | Server status | One live server status message, edited in place | Not posted | Make sure Metro can view and send messages in each channel. The camera alert role and the election ping role are set on the Cameras and Government pages. ## 29. Website reference Open https://metrobot.app/servers and sign in with Discord. It lists every server you are in that has Metro, with your balance and quick links to the areas you can open. Signed out, the same address shows the public server directory. Each server's site lives under `/g/` and has six areas. The switcher in the top bar shows only the areas you can open, and each area has its own sidebar, icon and colour, on a phone too. Ctrl+K searches every page and setting you can open. | Area | URL | Use | Who opens it | |---|---|---|---| | Me | `/g//me` | Your wallet, bank, jobs, vehicles, property, businesses, record and profile | Every member can open it and read what is public; your own numbers and actions need a linked Roblox account | | Staff Panel | `/g//staff` | Live players, mod calls, staff logs and the live panel (the Live page also shows AFK and team warning counts) | Staff department members, or roles with `players.view` or `staff.view` | | CAD | `/g//cad` | Units, 911, cameras, lookups, hotlist and warrants | Members of a department with CAD tools | | Departments | `/g//d/` | The department's home and roster | Members of that department | | City Hall | `/g//city` | Elections, laws, treasury and records; office tools for office holders | Every member | | Dashboard | `/g//manage` | Every server setting | The owner, Discord Administrator and the Manager role | Server settings are only in the Dashboard; the other five areas are for using a feature. Cameras are set up at `/manage/features/cameras` and used at `/cad/cameras`. Government is set up at `/manage/features/government` and used at `/city`. Staff tools are set up at `/manage/features/staff` and used at `/staff`. Old links to pages that moved still open the page at its new address. Opening `/g/` takes you to the first area you can open. Staff Panel: | Page | Path | What it does | Tool | |---|---|---|---| | Live | `/g//staff` | Online players on the map and in a list | Live players & map | | Mod calls | `/g//staff/calls` | Open and recent mod calls | Mod calls | | Staff logs | `/g//staff/logs` | Staff commands, flags and staff money changes | Staff logs | | Shifts & activity | `/g//staff/shifts` | Who is on shift and each person's weekly minutes, mod calls and commands | Shifts & activity | | Quotas | `/g//staff/quotas` | Who is above or below the weekly quota, history and CSV export (Plus) | Quotas | | Leave of absence | `/g//staff/loa` | Leave requests, approve or deny | Leave of absence | | Live panel | `/g//staff/panel` | Online players and quick actions: pay, adjust, fine, enforcement level, post to log | Live panel | CAD: | Page | Path | What it does | Tool | |---|---|---|---| | Panels | `/g//cad` | The panel picker: Dispatch, each CAD department, Courts and Civilian, with units on duty and open calls | Any CAD member | | Live units | `/g//cad/map` | The county with units, calls, cameras and job stops; a priority and peacetime strip while priority requests are on | Units map | | 911 & duty | `/g//cad/dispatch` | Calls from the last 7 days, who is on duty, first on scene; the same priority and peacetime strip | 911 & duty | | Cameras | `/g//cad/cameras` | Live camera map and sightings | Live cameras | | Camera search | `/g//cad/cameras/search` | Search sightings; export (Plus) | Camera search | | Replay | `/g//cad/cameras/replay` | Test a rule on kept sightings | Camera replay | | Hotlist | `/g//cad/bolos` | Plate and player alerts | Hotlist (BOLOs) | | Person lookup | `/g//cad/lookup?mode=person` | Records, warrants, fines, licences | Person lookup | | Plate lookup | `/g//cad/lookup?mode=plate` | Registered owner, plate sightings and hotlist status | Plate lookup | | Warrants | `/g//cad/warrants` | Live warrants | Warrants | | Jail | `/g//cad/jail` | Who is in jail, time left, early release | Jail | The CAD menu shows Lookup, Person lookup and Plate lookup as one Lookup entry. They are modes of one Lookup page, with tabs for the modes the member can open; the old `/cad/people` and `/cad/plates` addresses open the matching mode. Issuing a warrant, fine or hotlist entry still needs the matching Access permission (`warrants.issue`, `fines.issue`, `bolo.manage` and so on). Departments: each department has a Home page (`/g//d/`) and, with the Roster tool, a Roster (`/g//d//roster`) listing its members and leaders. City Hall: | Page | Path | What it does | |---|---|---| | Elections | `/g//city` | Open elections and candidates; run and vote with a linked Roblox account | | Laws | `/g//city/laws` | The laws in force and their fines | | Treasury | `/g//city/treasury` | The city's money and spending | | Records | `/g//city/records` | Offices, holders and past elections | | Office | `/g//city/office` | Office holders only: appoint, set laws, spend from the treasury | Dashboard: | Page | Path | What it does | |---|---|---| | Overview | `/g//manage` | Players, money, jobs and calls at a glance, the go-live checklist, and a CSV export | | Features | `/g//manage/features` | Turn modules on and off; each module's settings page sits under it | | Jobs, Vehicles, Banking, Businesses, Property, Crime, Jail, Cameras, Government, Staff, Events, Crews, Ranks and perks, Achievements | `/g//manage/features/` | That module's settings | | Automations | `/g//manage/automations` | AFK check, welcome message, timed messages, team restrictions, weather and time, priority and peacetime, mass-command alerts | | Workflows | `/g//manage/workflows` | Build, switch on, export, import and publish workflows (a trigger and blocks); the editor is at `/g//workflows/` | | Workflow runs | `/g//manage/workflows/runs` | What each workflow run did and why, kept 14 days | | Channels | `/g//manage/channels` | Where Metro posts | | Roles & access | `/g//manage/access` | Role permissions, the Manager role and advanced mode | | Departments | `/g//manage/departments` | Create and edit departments, their roles and tools | | Setup | `/g//manage/setup` | Server-Key, log channel, starting template, webhook URL | | API keys | `/g//manage/setup/api-keys` | Keys for other bots | | Templates | `/g//manage/templates` | Save, apply and publish templates | | Grow | `/g//manage/grow` | Public page, referrals, server ad, votes, digest | | Billing | `/g//manage/billing` | Plan and payment (server owner only) | | Audit log | `/g//manage/audit` | Who changed what | | All settings | `/g//manage/advanced` | Every setting, grouped by module, with search | | Insights | `/g//manage/advanced/insights` | Money created against money destroyed over 30 days, where it came from and went, inflation and leak warnings with suggested fixes | | Export | `/g//manage/export` | Download server data as CSV | Saving settings: changing a setting on a dashboard page opens one bar at the bottom with Reset and Save. Save (or Ctrl+S, Cmd+S on a Mac) stores every changed section of the page at once, without reloading it; a value that is not accepted is shown next to its field and nothing else on the page is lost. While changes are unsaved, the sidebar, links and the Ctrl K search ask you to save or reset first, and closing the tab asks for confirmation. One-off actions (adding, deleting, approving, starting an election) keep their own buttons and also run without a reload. Dashboard > Features: each module shows On, Off, Always on or Off (needs Plus). | Module | Switch | Default | Plan | |---|---|---|---| | Economy | Always on | | Free | | Jobs | Yes | On (courier, taxi and on-duty pay) | Free | | Vehicles | Always on | | Free | | Banking | Yes | On | Free | | Crime and bounties | Yes | Off | Free (bounties Plus) | | Jail | Yes | Off | Free | | Cameras | Yes | Off | Free | | Crews | Yes | Off | Free (territory and wars Plus) | | Events | Yes | On | Free (seasons and calendar Plus) | | Ranks and perks | Always on | | Free | | Achievements | Always on | | Free | | Templates | Always on | | Free | | Government | Yes | Off | Plus | | Property | Yes | Off | Plus | | Businesses | Yes | Off | Plus | Turning Jobs off stops every job type and duty pay. Turning it back on restores courier, taxi and on-duty pay. Duty, 911 dispatch, staff accountability, vote rewards and Telemetry (Insights) are on by default and have their own switches under All settings. All settings groups: Economy (Money, Banking, Businesses, Property, Telemetry), Jobs and work (Jobs, Duty, Dispatch), Law and order (Cameras, Rules, Crime, Jail), Community (Government, Votes, Crews, Ranks, Staff), Engagement (Achievements, Challenges, Streaks, Events, Perks), Server (Vehicles, Branding, Growth). Changes collect in a bar at the bottom and are saved together after a review. On Free, Plus settings can be edited and saved but only run on Plus. ### Docs https://metrobot.app/docs is the Metro help guide as web pages, one page per topic (what Metro is, setting Metro up, slash commands, the website and dashboard, Metro Plus, troubleshooting, what needs a person on the Metro team, and privacy), each with a list of its sections at the top. The text is the same as the plain-text guide at https://metrobot.app/help-guide.txt. No sign-in is needed. https://metrobot.app/templates has one page for each economy template Metro ships; see "Templates and the gallery". ### Status https://metrobot.app/status shows whether Metro is working. It lists the Discord bot, game polling, the ER:LC API, the website and dashboard, and payments. Each is green, yellow or red, with a 30-day history bar. Incidents are listed below with every update, and they are kept after they are resolved. `GET https://metrobot.app/api/status` returns the same data as JSON. ### Credits https://metrobot.app/credits thanks Metro's support helpers: the community members, invited by Metro staff, who answer questions in Metro support. A helper is listed only if they turn it on at https://metrobot.app/me/helper, under a display name they choose (2 to 32 letters, numbers, spaces and . - ', at least two of them letters, with no links), with the month they became a helper. The page never shows Discord names, ids or reply counts. A helper who is removed, or turns the listing off, leaves the page straight away. ### Postal map and free tools https://metrobot.app/map is a map of Liberty County (the Summer 2026 map) with every postal Metro has traced. Search a postal number, a place or a street name, then click a result or a pin to copy it. A click on bare map copies the nearest postal when one is close. Drag to pan, scroll or use the buttons to zoom. No sign-in. Free tools at https://metrobot.app/tools, no sign-in, nothing stored: - https://metrobot.app/tools/server-ad writes the same server ad as /advertise from a form: server name, an optional one-line description, server code, Discord invite and the features to list, in a full or short length, as Discord text or plain text. The invite must be a Discord invite link. The ad always fits Discord's 2,000 character limit and ends with a Metro credit line. - https://metrobot.app/tools/callsign makes up to 50 callsigns for a department (Police, Sheriff, Fire and EMS, DOT, Dispatch, State Patrol) in one of four number schemes: prefix and number (PD-214), phonetic letter and number (Adam-12), beat, letter and number (3-Adam-14) or a plain unit word (Unit 214). - https://metrobot.app/tools/server-names gives twelve server name ideas for a tone (serious, casual, rural or big city), optionally built around a word you choose. The names come from word lists. Check that a name is free before you use it. ## 30. Player pages on the website Every member of a server with Metro can open the Me area and City Hall before linking a Roblox account. Without a link, a slim "Link your Roblox account" banner sits at the top of each page, the public information is shown (players online, jobs running and what they pay, events and the season table, open elections, perks for sale), and each personal section says "Link Roblox to see ..." instead of your numbers. Nothing can be done until you link: banking, buying, registering, voting and the rest need a linked Roblox account. Every Link Roblox button opens https://metrobot.app/verify and, once you are linked, returns you to the page you came from with a "Linked as " note; with nowhere to return to it opens your server list. This works with both Sign in with Roblox and the in-game `;verify` code. Dates are in UTC. | Page | Path | What a player can do | |---|---|---| | Wallet | `/g//me` | Balance, the last 7 days in and out, recent activity, the vote offer | | Bank | `/g//me/bank` | Move money to and from savings, credit score, pay loans, apply for a personal loan, finance a car, file for bankruptcy (Plus), search full history | | Garage & licences | `/g//me/vehicles` | Cars you own, your licences, and the licence tests before buying one | | Property | `/g//me/property` | Map of zones, rent a zone, leave a lease (Plus) | | Businesses | `/g//me/businesses` | Buy, hire, fire, upgrade, sell (Plus) | | Jobs | `/g//me/jobs` | Today and this week, the running job, the last 20 jobs and why one did not pay | | Record | `/g//me/record` | Heat, priors, bounties, crime runs, fines and appeals (when crime and the player record view are on); also your jail sentences and time served | | Camera sightings | `/g//me/sightings` | Camera sightings, appeal camera fines, delete your camera data (when the player camera view is on) | | Profile & rank | `/g//me/profile` | Stats, challenges, trophies, card image link, hide from public pages | | Perks | `/g//me/profile/perks` | Rank ladder, buy perks | | Crew | `/g//me/crew` | Found or join a crew, pot, members, invites, wars | | Events | `/g//me/events` | Browse, register, start and stop event runs, season table | Elections are in City Hall (`/g//city`), which anyone can read and where a linked player can run and vote. Pages for a module the owner has turned off say so and fill in once it is turned on. ## 30a. Suggestions The suggestion board at https://metrobot.app/suggestions is where anyone tells Metro what to build next. It is for the whole of Metro, not for one server: every owner and player sees the same board. Who can do what: - Anyone can read the board and open a suggestion, without signing in. - Anyone signed in with Discord can post a suggestion, upvote one, comment and report. Only the Discord display name and avatar of an author or commenter are shown, never an id. - One upvote per person per suggestion. The author's own upvote is counted when they post. Pressing the vote again takes it back. Three ways to post: 1. On the website: "New suggestion" at https://metrobot.app/suggestions. 2. In the dashboard and the player pages: the "Suggest a feature" button (in the side rail, in the phone menu and next to Help). It opens a panel over the page you are on and fills in the page for you. "Point at it" lets you click the exact button or section you mean; Metro saves its name and a screenshot of that area with the suggestion. 3. In Discord: `/suggest`. Pick a category, optionally pick the feature it is about (the list follows Metro's commands), then fill in the title and description. Metro posts it to the same board and replies with the link. A suggestion has a title (8 to 100 characters), a description (20 to 2,000 characters), a category and up to 3 pictures (PNG, JPEG or WebP, 1 MB each; larger pictures are shrunk in the browser). Categories: Jobs, Shop, Vehicles, Police, Crime, Government, Banking, Property, Businesses, Events, Map, Dashboard, Discord bot and Other. While you type a title, the form lists similar suggestions with their vote counts, so you can vote instead of posting a duplicate. Each suggestion has its own page at `https://metrobot.app/suggestions/` that can be shared. It shows the title, status, description, pictures, the page or feature it is about, comments and the vote count. Statuses: | Status | Meaning | |---|---| | Under review | New. The Metro team has not decided yet. | | Planned | Accepted and queued. | | In progress | Being built. | | Shipped | Released. The page shows the release date, and Metro sends a Discord DM once to the author and to everyone who voted. | | Not planned | Declined, with a short reason on the page. | The board sorts by Top (most votes), New and Recently shipped, and filters by status, category and a text search. Twenty suggestions show per page. Limits and moderation: - A person can post 3 suggestions per hour and 10 per day, vote 60 times per hour, comment 10 times per 10 minutes and 50 times per day, and report 20 times per day. - A comment is 1 to 1,000 characters. - Posts and comments that look like insults, adult content, self-harm baiting, Discord invites, links to other sites, email addresses or phone numbers are held for a Metro operator before they show. The author can still see them, with a note that they are held. - Anyone can report a suggestion or a comment. Three different people reporting the same one hides it until an operator has looked at it. - Operators can set the status with a note, merge duplicates (the votes move to the suggestion it is merged into, and the merged page links there), hide or approve posts and comments, and stop a person from posting. - A suggestion that is merged, held or hidden cannot be voted on or commented on. ## 31. API for other bots Other Discord bots can ask Metro who a server member is on Roblox, and issue in-game verify codes. - Keys: Dashboard > Setup > API keys (`/g//manage/setup/api-keys`), needs `settings.manage`. Up to 10 active keys per server. A key is shown once when created and can be revoked. - Send the key as `Authorization: Bearer `. Each key can make 60 requests per minute. - A key only answers for members of its own Discord server. Anyone else gets the same "not verified" answer as a member who never linked. | Request | Answer | |---|---| | `GET https://metrobot.app/api/public/v1/verifications/` | 200 with `discordId`, `roblox.id`, `roblox.username`, `roblox.displayName`, `verifiedAt`; 404 if not linked or not a member | | `GET https://metrobot.app/api/public/v1/verifications/roblox/` | The same, looked up by Roblox id | | `POST https://metrobot.app/api/public/v1/verifications//code` | 201 with a `code`, `expiresAt` and the `command` to type (`;verify CODE`). Only for members who are not linked yet. The code works only in that server's game and expires after 10 minutes. 3 codes per member per hour. | Errors come as JSON with `error` and `message`: 400 bad id, 401 bad or revoked key, 403 Metro is no longer in the server, 404 not a member (code requests), 409 already verified, 429 rate limited (with `Retry-After`), 503 try again later. A link made with an API code can be unlinked or switched at once, without the usual 30-day wait. `GET https://metrobot.app/api/public/stats` needs no key. It returns totals across Metro: servers, players seen, jobs and money paid in the last 7 days, the biggest payout and elections closed, plus how many new servers this week came from each source (`growth.installsBySource`). It is cached for 15 minutes. It also reports how many visits metrobot.app had in the last 7 days from links tagged `?ref=tiktok`, `?ref=youtube` and `?ref=instagram`, under `channels`. These links are counted without cookies, IP addresses or anything stored on the visitor's device. `GET https://metrobot.app/api/public/v1/changelog` needs no key. It returns `{ "v": 1, "entries": [...] }`: up to the latest 100 changelog entries, newest first, each with `id` (never changes), `date` (`YYYY-MM-DD`), `kind` (`new` or `fixed`) and `text` (one sentence). It is cached for 60 seconds. The same entries are on https://metrobot.app/changelog and are posted to the Metro Discord. ## 32. Data, privacy and safety - Server-Keys are encrypted. The website can store a key but cannot read it back. Keys are never logged or shown again. - Metro reads only what the ER:LC API reports: usernames, ids, teams, staff permission levels, callsigns, wanted stars, vehicles, positions, kills, staff commands, mod calls and 911 calls. | Data | Kept | |---|---| | Live position in the game | 15 minutes | | Raw API responses | 7 days | | Camera sightings | 24 hours by default, up to 7 days if the server sets it (Plus) | | Camera search log (camera searches and person and plate lookups) | 90 days | | Voice in a Metro Dispatch channel | Not kept: turned into text to act on, audio deleted as soon as it is heard | | Election ballots | 30 days after the election, then only totals | | Discord to Roblox link | While linked; unlinking keeps a history row until you delete your data everywhere | | Economy records (balances, history, vehicles, fines and so on) | While the server uses Metro, or until deleted on request | | Plus purchase records | 5 years, for bookkeeping law | | Workflow run history (what started a run, its steps and errors) | 14 days | | Help tickets (messages and a snapshot of the server and account) | Until deleted on request | | Suggestion board posts, comments, pictures, votes and reports | Until deleted on request | - You must be 13 or older to use Metro. A parent or guardian can ask for a child's data to be deleted by email to legal@metrobot.app with the child's Roblox username and the server. - Players can delete their own camera observations on a server from "My sightings", and hide themselves from public server pages. - Your data (`/me/data`, also Me > Your data on each server): **Download my data** gives a JSON file of what Metro stores about you, for one server or every server. **Delete my data** (type DELETE to confirm), for one server or everywhere, replaces your name in the ledger, audit log and camera search log with "deleted-user", deletes your camera sightings and the position and plate kept with fines made from them (a fine under an open appeal keeps them until the appeal is resolved), and removes you from the address-learning tallies. Everywhere also deletes every Roblox link you have had, history included. Balances, amounts and fines stay, without your name. Help tickets and suggestions are not part of it; email legal@metrobot.app to have them deleted. - When camera sightings expire or are deleted, fines made from them lose the position and plate too, unless the fine's appeal is still open. - Public pages show Roblox usernames only. - Visit counts: metrobot.app counts visits in Metro's own database, with no third-party tracker and no analytics cookie. A visitor is a hash of the connection and browser that changes every day and cannot be matched to the next day, and no IP address is stored. It records the page, the site or video link that brought the visit, whether Add to Discord was clicked, and the country. If you are signed in or add Metro to a server, your Discord ID is kept with those steps. Per server it counts how many players were online and how many jobs were finished each day, never which players. Events are kept 90 days, then only daily totals for 13 months. You can leave your browser out on the Your data page (`/me/data`) or at `metrobot.app/?optout=1`, and count again with `metrobot.app/?optout=0`. - Owners can see who searched the cameras or looked up a person or plate, and when. - Full details: https://metrobot.app/legal/privacy. Security reports: legal@metrobot.app, see https://metrobot.app/security. ### Safety: the name filter (owners) Metro checks every name and reason players write (crew names, business names, callsigns, campaign statements, fine, warrant and BOLO reasons, department, event and template names, the public tagline) before anyone sees it. Blocked text is never saved or posted; the player gets a private "That name isn't allowed here". The filter cannot be turned off. At Dashboard > Safety (`/g//manage/safety`) you choose: - **Standard**: blocks slurs, sexual terms and strong swearing. - **Strict**: also blocks mild swearing and innuendo. - **Extra blocked words**: your own words, 2 to 32 characters each, up to 200. Spacing, look-alike letters and repeated letters are seen through. The page also lists blocked attempts: who, where and when. The blocked text is never kept. Roblox usernames are never filtered. ## 33. Command index "Verified" means the user must have linked a Roblox account with `/verify`. "Manage Server" includes the server owner. Office powers come from holding a government office. | Command | Subcommands and options | Who can use it | Plan | |---|---|---|---| | `/help` | `commands`, `contact subject message` | Anyone | Free | | `/flow` | `name` (autocomplete), `input` | Anyone, in a server. Runs one of the server's switched-on workflows whose trigger is a `/flow` command | Free | | `/setup` | `key`, `log_channel`, `template` | Manage Server | Free | | `/channels` | `set purpose channel`, `clear purpose`, `list` | Manage Server | Free | | `/advertise` | `length` (Full, Short), `style` (Discord, Plain text) | Manage Server | Free | | `/verify` | `unlink` | Anyone | Free | | `/wallet` | `user` | Verified; `user` needs Manage Server | Free | | `/pay` | `user`, `amount` | Verified | Free | | `/admin adjust` | `user`, `amount`, `direction` (credit, debit), `reason` | Manage Server | Free | | `/admin refund` | `entry_id` | Manage Server | Free | | `/admin learning` | | Manage Server. Shows how well Metro has learned addresses on the map. | Free | | `/admin licence grant` | `user`, `class` | Manage Server | Free | | `/admin licence suspend` | `user`, `class`, `days` | Manage Server | Free | | `/admin licence revoke` | `user`, `class` | Manage Server | Free | | `/job list` | | Anyone | Free | | `/job start` | `type` (courier, bus, garbage, mail, taxi, tow), `passenger` (taxi) | Verified | Free | | `/job status` | | Verified | Free | | `/job stop` | | Verified | Free | | `/taxi accept` | | Verified passenger | Free | | `/duty` | | Verified | Free | | `/calls recent` | `count` (1 to 25) | Anyone (when dispatch is on) | Free | | `/calls stats` | `user` | Verified; `user` needs `dispatch.view` | Free | | `/shop` | `item` (autocomplete) | Anyone to browse; verified to buy | Free | | `/garage` | | Verified | Free | | `/licence list` | | Verified | Free | | `/licence buy` | `class` | Verified | Free | | `/bank balance` | | Verified | Free | | `/bank deposit` | `amount` | Verified | Free | | `/bank withdraw` | `amount` | Verified | Free | | `/bank statement` | `limit` | Verified | Free | | `/bank loan apply` | `type` (personal, car), `amount`, `vehicle` | Verified | Free | | `/bank loan pay` | `loan_id`, `amount` | Verified | Free | | `/bank loan list` | | Verified | Free | | `/bank bankruptcy file` | `confirm` | Verified | Plus | | `/rank` | `user` | Target must be verified | Free | | `/perks list` | | Verified | Free | | `/perks buy` | | Verified | Free | | `/achievements` | | Verified | Free | | `/challenges` | | Verified | Free | | `/profile` | `user` | Target must be verified (public reply) | Free | | `/vote` | `remind` | Anyone | Free | | `/suggest` | `category`, `feature` | Anyone | Free | | `/event list` | | Anyone (public reply) | Free | | `/event leaderboard` | `event_id` | Anyone (public reply) | Free | | `/event calendar` | | Anyone | Plus | | `/race register` | `event_id` | Verified | Free | | `/race start` | `event_id`, `vehicle_class` | Verified | Free | | `/race status` | | Verified | Free | | `/race stop` | | Verified | Free | | `/crime start` | `type` (Contraband, Robbery) | Verified | Free | | `/crime contraband` | | Verified | Free | | `/crime smuggle` | | Verified, in a boat on water | Free | | `/crime status` | | Verified | Free | | `/crime record` | `user` | Verified; `user` needs `players.view` | Free | | `/crime sites` | | `staff.view` | Free | | `/crime bounties` | | Anyone | Plus | | `/jail status` | | Verified | Free | | `/jail bail` | | Verified | Free | | `/jail release` | `user` | `jail.release` | Free | | `/jail list` | | `jail.view` | Free | | `/crew create` | `name`, `tag` | Verified | Free | | `/crew invite` | `user` | Crew members with the invite permission | Free | | `/crew accept`, `/crew decline` | | Verified with a pending invite | Free | | `/crew kick` | `user` | Crew members with the kick permission | Free | | `/crew leave` | | Crew members | Free | | `/crew disband` | `confirm` | Crew Leader | Free | | `/crew deposit` | `amount` | Crew members | Free | | `/crew withdraw` | `amount` | Crew members with the withdraw permission | Free | | `/crew info` | `name` | Anyone with a name; verified for your own | Free | | `/crew mine` | | Crew members | Free | | `/crew leaderboard` | `metric` (pot, territory, wars) | Anyone | Free | | `/crew rank set` | `user`, `rank` | Crew members with the manage ranks permission | Free | | `/crew leader transfer` | `user` | Crew Leader | Free | | `/crew territory list` | | Anyone | Plus | | `/crew war declare` | `crew` | Crew members with the declare war permission | Plus | | `/crew war status` | | Crew members | Plus | | `/lookup person` | `player` | `lookup.person` | Free | | `/lookup plate` | `plate` | `lookup.plate` | Free | | `/warrant issue` | `player`, `reason` | `warrants.issue` | Free | | `/warrant clear` | `id`, `reason` | `warrants.clear` | Free | | `/warrant list` | | `warrants.view` or `lookup.person` | Free | | `/cameras search` | `plate`, `roblox_id`, `fingerprint`, `camera`, `zone` | `cameras.search` | Free (longer look-back on Plus) | | `/cameras hotlist add` | `kind` (plate, fingerprint, player), `value`, `reason` | `cameras.hotlist` | Free (10 entries; Plus unlimited) | | `/cameras hotlist remove` | `entry_id` | `cameras.hotlist` | Free | | `/cameras hotlist list` | | `cameras.view` or `cameras.hotlist` | Free | | `/priority request` | `reason` (up to 150 characters) | Verified | Free | | `/priority end` | | Staff, or the player with the active priority | Free | | `/priority peacetime` | `mode` (off, on, strict) | Staff | Free | | `/priority status` | | Anyone | Free | | `/staff scoreboard` | `days` (1 to 90) | `staff.view` | Free | | `/staff calls` | `count` (1 to 25) | `staff.view` | Free | | `/staff flags` | | `staff.view` | Free | | `/staff commands` | `player`, `count` (1 to 25) | `staff.view` | Free | | `/shift start` | | `staff.shifts.view` | Free | | `/shift end` | | `staff.shifts.view` | Free | | `/shift status` | | `staff.shifts.view` | Free | | `/loa request` | `from`, `to`, `reason` | `staff.loa.request` | Free | | `/loa list` | | `staff.loa.request` | Free | | `/loa cancel` | `id` | `staff.loa.request` | Free | | `/property list` | | Anyone | Plus | | `/property rent` | `zone_id` | Verified | Plus | | `/property leave` | `lease_id`, `confirm` | Verified | Plus | | `/property mine` | | Verified | Plus | | `/business list` | | Anyone | Plus | | `/business buy`, `sell`, `upgrade` | `business_id` | Verified (owner for sell and upgrade) | Plus | | `/business mine` | | Verified | Plus | | `/business hire` | `business_id`, `user`, `wage` | Business owner | Plus | | `/business fire` | `business_id`, `user` | Business owner | Plus | | `/gov run` | `statement`, `office` | Verified, meeting the server's rules to run | Plus | | `/gov candidates` | `office` | Anyone | Plus | | `/gov vote` | `candidate`, `office` | Verified, meeting the server's rules to vote | Plus | | `/gov election start` | `office`, `preset` (Quick, Evening, Week) | Manage Server | Plus | | `/gov election end`, `cancel` | `office` | Manage Server | Plus | | `/gov laws` | `key`, `enabled`, `value` | Turn laws on and off power, or `government.manage` | Plus | | `/gov fine` | `user`, `amount`, `reason` | Issue fines power, or `fines.issue` | Plus | | `/gov appeals` | | Void fines power, or `fines.view` | Plus | | `/gov appeal file` | `fine_id`, `reason` | The fined player | Plus | | `/gov appeal resolve` | `fine_id`, `decision` (uphold, void), `reason` | Void fines power, or `fines.manage` | Plus | | `/gov recall` | | Verified | Plus | | `/gov assign`, `/gov unassign` | `office`, `user` | `government.manage` | Plus | | `/gov status` | | Anyone | Plus | | `/gov treasury bounty` | `user`, `amount`, `reason`, `interval_hours`, `budget` | Spend the treasury power | Plus | | `/gov treasury stipend` | `user`, `amount`, `reason`, `interval_hours` | Spend the treasury power | Plus | | `/gov treasury grant` | `user`, `amount`, `reason` | Spend the treasury power | Plus | | `/gov propose tax` | `tax` (income, sales, property), `rate` | Set taxes power | Plus | | `/gov propose law` | `key`, `enabled`, `value` | Turn laws on and off power | Plus | | `/gov propose treasury` | `spend_kind` (bounty, stipend, grant), `user`, `amount`, `reason` | Spend the treasury power | Plus | | `/gov propose appointment` | `office`, `user` | Appoint power | Plus | | `/gov proposals` | | Anyone | Plus | | `/gov vote-proposal` | `id`, `vote` (yes, no) | Council members | Plus | | `/gov appoint` | `office`, `user` | Appoint power | Plus | | `/gov veto-appointment` | `id` | `government.manage` | Plus | | `/plus status` | | Anyone | | | `/plus grant` | `guild_id`, `days`, `reason` | Metro staff only | | | `/plus grants` | | Metro staff only | | Law keys for `/gov laws` and `/gov propose law`: `speed_limit`, `licence_enforcement`, `curfew_zone`, `transfer_tax`, `job_subsidy`. Plan status: `/plus status` and the Billing page on the dashboard show the server's plan and status. In-game chat command: `;verify CODE` (anyone in a server whose webhook is set up). No other `;` command is used. ## 34. Glossary - **ER:LC**: Emergency Response: Liberty County, a Roblox roleplay game made by Police Roleplay Community (PRC). Players drive, work and play as police, sheriff, fire, DOT or civilians in Liberty County. - **Private server**: an ER:LC server run by a community, usually with its own Discord server and staff. - **PRC API**: the official ER:LC Private Server API. Metro uses it to read a server's players, vehicles and logs, and to send in-game messages. - **Server-Key**: the secret key from an ER:LC private server's settings that lets Metro read that server. Entered with `/setup`. - **Webhook URL**: the address an owner pastes into ER:LC so in-game `;` chat commands reach Metro. - **Roblox id**: the permanent number of a Roblox account. It does not change when the username changes. - **Verified / linked**: a Discord account connected to a Roblox account through `/verify`. - **Team**: the in-game team a player is on, such as Civilian, Police, Sheriff, Fire or DOT. - **Wanted stars**: the in-game wanted level (0 to 5). An arrest is detected when stars drop to 0. - **Staff / permission level**: an in-game permission above Normal (helper, mod, admin, owner). Metro never fines or targets staff automatically. - **Mod call**: an in-game request for a moderator. - **911 call**: an in-game emergency call to a team. - **Callsign**: a unit name a player sets in game, like "K9-1". - **Stud**: Roblox's unit of distance. Metro measures job legs, radiuses and speeds in studs. - **Postal / postal code**: the numbered map areas of Liberty County that ER:LC uses for addresses. Job stops come with a street, and a postal when one is near. - **POI**: point of interest, a named place on the map used as a job stop. - **Zone**: an area drawn on the map (residence, business, restricted, public, territory). - **Plate**: a vehicle's licence plate as the game reports it. - **Fingerprint**: a vehicle's name, colour and livery together. Used to spot the same car with a different plate. - **Hotlist**: a watch list of plates, fingerprints or players that cameras flag. - **BOLO**: "be on the lookout", a plate or player alert. In Metro a BOLO is a hotlist entry. - **Heat**: a 0 to 100 score that rises with crime and fines and falls over time. - **Priors**: past fines on a player's record. - **Treasury**: the server government's money. Taxes, fines and fees go in; bounties, stipends and grants come out. - **Ledger**: the record of every money movement on a server. Each one has a number used by `/admin refund`. - **Debt limit**: how far below zero a balance can go from fines, taxes and loan defaults (5,000 by default). - **Net worth**: wallet balance plus the resale value of owned cars. Used for ranks by default. - **Enforcement level**: how far vehicle checks go: off, log, warn or enforce. - **Trial (rules)**: a period, 24 hours by default, when a new camera rule only logs what it would do. - **Template**: a full set of economy settings that can be saved, applied and shared. - **Module**: a feature area that can be turned on or off, such as Crime or Government. - **Access**: Metro's role permission system on the dashboard. - **Manage Server**: the Discord permission that marks server admins. Discord commands treat them like the owner, except for Billing. On the website, Discord's Administrator is what counts. - **Plus**: Metro's paid plan, USD 4.99 per month per server. - **Log channel**: the staff channel where Metro records payouts, purchases, fines and alerts. - **NPC fare**: a made-up taxi passenger, so taxi works with no other players online. - **PRC**: Police Roleplay Community, the Roblox group that makes ER:LC. - **SSU**: server start-up. A roleplay session that staff open for players to join. - **SSD**: server shut-down. The end of a roleplay session. - **LOA**: leave of absence. A staff member's approved time away. In Metro, staff ask for one with `/loa request` and only approved leave excuses a quota. - **FRP**: fail roleplay. Behaviour that breaks a server's roleplay rules. - **RDM**: random deathmatch. Killing a player without a roleplay reason. - **VDM**: vehicle deathmatch. Ramming other players' vehicles on purpose with no intent to roleplay. - **NITRP**: no intent to roleplay. Joining a roleplay server without roleplaying. - **NLR**: new life rule. After you die you forget what happened and may not take revenge on whoever killed you. ## 35. FAQ **Is Metro free?** Yes. Jobs, money, banking, cars, licences, crime, crews, races, cameras, 911 dispatch and staff tools are free. Plus (USD 4.99 per month per server) adds government, property, businesses, bounties, crew territory and wars, seasons, the event calendar and higher limits. **Who can buy Plus?** Only the Discord server owner, on the dashboard Billing page. Plus covers that one server. **What happens to my settings if I stop paying?** They are kept. Plus features switch off and come back as they were when you subscribe again. After a failed payment you keep Plus for 3 days. **Where do I find my Server-Key?** In ER:LC, open your private server settings and find the ER:LC API section. Create a key there and paste it into `/setup`. **Does Metro need Administrator in Discord?** No. It asks for view channels, send messages, embed links, attach files, create public threads and manage roles. **Why did nobody get paid?** Check the Setup page: the Server-Key must show Connected. Then check that the player is verified, on the Civilian team, in a vehicle, and has DMs from server members turned on. "Jobs" on the website shows why a job did not pay. **Why does `/verify` say the in-game code does not work?** The server's webhook URL from `/setup` must be pasted into the ER:LC private server settings. The code also expires after 10 minutes. Signing in with Roblox at https://metrobot.app/verify is the other way. **Can I link a different Roblox account?** Yes, with `/verify unlink:True`, but only 30 days after your last link. **Does my money carry over to other servers?** No. Each server has its own economy. Only the Roblox link is shared. **How do I give my police role access to lookups and warrants?** Open Dashboard > Roles & access as the server owner, add the role, choose "Fill from: Police" (or Sheriff), and save. That covers the Discord commands, and the Police department picks the role up and opens the CAD pages those permissions cover. If you have given Police roles of your own in Dashboard > Departments, add the role there too. **Can staff get fined by cameras or rules?** No. Players with an in-game staff permission are never fined, warned or respawned automatically. **Do camera rules fine players right now?** Yes, when the owner turns on Cameras act. It is off by default, so rule matches are logged as a trial and the Cameras page shows what would have been fined. A Metro-wide pause can stop camera actions and hotlist alerts across all servers. **Does Metro kick, ban or respawn players?** No. Metro never kicks or bans. The vehicle check can warn in game, and does not send respawns at this time. **Can Metro send messages in game?** Yes, short private messages and server hints, once Metro switches in-game sending on for the server. Otherwise everything reaches players in Discord. **Why didn't I get a DM?** Turn on "Direct messages from server members" for that Discord server. Some messages then fall back to the log channel, and a job will not start until DMs work. **How do I make players see election news and the weekly board?** `/channels set purpose:Election news channel:#channel` and `/channels set purpose:Season board channel:#channel`. **How do I stop the "Powered by Metro" line?** On Plus, switch it off on the Grow page. Free servers always show it. **What happens if I remove Metro?** It stops reading your server and deletes the Server-Key. The economy is kept, so adding Metro back and running `/setup` restores it. **How old do players need to be?** 13 or older, the same minimum as Discord. Linking a Roblox account uses the in-game code, which works for every Roblox account. **Can I see who searched the cameras?** Yes. Every camera search is logged with who ran it, and the owner can see the log. **Can a player hide from the public server page?** Yes. "My profile" on the website has a switch that hides the player from every server's public page. **Where can I report a security problem?** Email legal@metrobot.app. See https://metrobot.app/security.