Guide · Updated 9 Nov 2026
How to add a skill check minigame to a RedM server
A RedM skill check is a short timing test that decides whether a player pulls off a task: a needle sweeps round a ring, and the player presses a key while it is inside the marked zone. It turns a wait into something the player does, and it gives you a difficulty dial for every task on the server. To add one you need a script that draws the ring and hands the result to whichever script asked. Poggy Skillcheck (Free) does this, and this guide covers what suits it, how to set the difficulty and how to call it from your own code.
Skill check, progress bar or dice roll?
A skill check is not always the right answer. Use the one that fits the moment:
| Tool | Good for | Costs the player |
|---|---|---|
| Progress bar | Routine jobs done dozens of times, such as washing or picking | Only time |
Dice roll or a /do | Roleplay between players, where a story decides the outcome | Nothing, and it needs both sides to play fair |
| Skill check | Tasks with real risk: a lock, a fight with a fish, a dangerous recipe | Attention, and the price of missing |
The easiest mistake is putting one on everything. A ring on every apple picked gets old in an evening. Keep it for the moments where a miss would matter. For player-to-player scenes, see RedM /me and /do commands, which covers checks instead of dice.
What the player sees
- A warning tone plays, and the ring appears one second later.
- A white zone is a pass. A gold great zone inside it is a bonus hit.
- Anywhere else is a miss, and so is letting the needle complete a full turn.
- Some checks need several hits in a row. A counter such as 2 / 3 shows progress, and one miss fails the lot.
- The ring can shake, appear away from the centre of the screen, and turn either way.
- The game keeps running while the ring is up, so the player is not locked in a menu.
It is the same ring-and-needle idea as the Dead by Daylight skill check, which many players already know how to read.
How to set the difficulty
Two settings do most of the work: how fast the needle turns and how big the zone is.
| Setting | Range | Default | What it does |
|---|---|---|---|
speed | 1 to 5 | 3 | 1 is about 3.5 seconds a lap; 5 is under one second |
difficulty | 1 to 5 | 3 | Zone size. 1 is about a quarter of the ring; 5 is about a fourteenth |
repetition | 1 to 10 | 1 | Hits in a row needed to pass |
great | 0 to 100 | 30 | Percent of the zone that is gold. 0 turns it off |
direction | cw, ccw, rand | cw | Needle direction; rand picks each repetition |
randomizer | 0 to 5 | 0 | How far from the centre of the screen the ring may appear |
startOffset | 0 to 50 | 20 | Random needle start. 0 is always the same place |
Some starting points:
- An easy task: speed 1, difficulty 1.
- A normal task: the defaults.
- A hard task: speed 4, difficulty 3, repetition 3. A miss ends it, so three hits is a real test.
- Very hard: speed 5, difficulty 5. Keep this for things that should usually fail.
Change one setting at a time. To make a check harder without making it unfair, reach for repetitions or a random direction before the smallest zone: they stop players learning one rhythm, and they do not need perfect reactions.
The values in /poggy are defaults. A script that passes its own value always wins, so they only change checks that leave that value out.
Skill checks in crafting and fishing
Two Poggy scripts use the ring already, so you can see it working without writing any code.
- Poggy Crafting (Free): a recipe can ask for timed rounds instead of a progress bar. Pass them all for the full reward, pass some for a share, and each hit in the gold band adds a bonus. Materials are taken before the check, because a failed craft has to cost something. A recipe can be dangerous too: miss a round on dynamite and it goes off in the player's hands.
- Poggy Fishing ($69.99): landing a fish is a run of skill checks that fill a progress bar.
The guides to setting up crafting and setting up fishing cover the rest of those systems.
How to add a skill check to your own script
Call the export from client-side Lua. The call waits until the player finishes, so always run it inside a thread:
CreateThread(function()
local result = exports.poggy_skillcheck:StartSkillCheck({
speed = 3,
difficulty = 3,
repetition = 2,
})
if result.success then
-- tell your server script the player passed
end
end)
Every option can be left out. The call returns three values:
success: every repetition was hit.great: every repetition was a great hit.greatCount: how many great hits there were.
Three things to build in:
- One at a time. A call made while another is running returns
success = falseat once. Check first withIsSkillCheckBusy(), and stop one withCancelSkillCheck(). - Pay rewards on the server. The check runs only on the player's machine and has no server events, so a cheat can claim a pass. Your server code should still check that the player is in the right place, has the materials and is not asking too often.
- Off means pass. With
Enabledset to false, no ring shows and every call passes at once. Do not leave it off on a live server unless you mean it.
Developers building on the rest of the framework layer can read using Poggy Core in your own RedM scripts.
Testing it before players do
- Set
TestCommandto true, in/poggyorconfig.lua, and restart the script. - Type
/skillcheckfor the defaults, or/skillcheck 4 4 2for speed 4, zone 4 and 2 repetitions. - Turn
TestCommandoff again. The command has no permission check, so any player can use it while it is on.
Sounds are quiet by default, with Volume at 0.1. To use your own, replace incoming.mp3, good.mp3 and great.mp3 in ui/sfx/skillcheck/ and keep the names.
Installing it
Poggy Skillcheck (Free) runs on VORP Core, RSG Core and QBCore RedM. It needs Poggy Core (Free) 0.27.0 or newer, and has no database and no server scripts. Start it after poggy_core and before anything that uses it:
ensure poggy_core
ensure poggy_skillcheck
More free scripts are listed in free RedM scripts worth installing. Step by step: how to install a RedM script.






