Skillchecks
Shiva provides a client-side Skillcheck global for triggering interactive skill check minigames rendered by the NUI host. Five types are available out of the box.
Skillcheck Types
| Type | Description |
|---|---|
circle | Rotating arc — click when the indicator is inside the window |
sequence | Press a sequence of keys in order |
lockpick | Pin tumbler — hold each pin at the right moment |
hack | Grid-based hacking puzzle |
wires | Cut the correct wire |
Basic Usage
All skillcheck functions follow the same signature:
lua
Skillcheck.TYPE(opts, callback)The callback receives true if the player succeeded, false if they failed.
lua
Skillcheck.circle({ difficulty = 'medium' }, function(success)
if success then
TriggerServerEvent('net:mymodule:fishCaught')
else
-- failed, play failure animation
end
end)Circle Skillcheck
lua
Skillcheck.circle({
difficulty = 'easy', -- 'easy' | 'medium' | 'hard'
duration = 3000, -- ms before auto-fail (optional)
}, callback)Sequence Skillcheck
lua
Skillcheck.sequence({
keys = { 'W', 'A', 'S', 'D' }, -- keys to press in order
speed = 'normal', -- 'slow' | 'normal' | 'fast'
}, callback)Lockpick Skillcheck
lua
Skillcheck.lockpick({
pins = 4, -- number of pins (1–6)
difficulty = 'medium',
}, callback)Hack Skillcheck
lua
Skillcheck.hack({
gridSize = 4, -- 4x4 grid
difficulty = 'hard',
timeLimit = 30000, -- ms
}, callback)Wires Skillcheck
lua
Skillcheck.wires({
count = 5, -- number of wires
correct = 2, -- how many to cut
timeLimit = 20000,
}, callback)Full Example — Fishing Cast
lua
local function startFishing()
-- Show a circle skillcheck while casting
Skillcheck.circle({ difficulty = 'easy', duration = 4000 }, function(success)
if success then
TriggerServerEvent('net:mymodule:fishCaught', { bonus = true })
View.notify({ type = 'success', message = 'Nice cast!' })
else
View.notify({ type = 'error', message = 'The line snapped.' })
end
end)
endInternals
All skillcheck types delegate to View.skillcheck(type, opts, cb), which sends a SendNUIMessage to the NUI host and listens for NUI:skillcheck:result. You don't need to interact with View directly.
API Reference
| Method | Description |
|---|---|
Skillcheck.circle(opts, cb) | Rotating arc skillcheck |
Skillcheck.sequence(opts, cb) | Key sequence skillcheck |
Skillcheck.lockpick(opts, cb) | Pin tumbler skillcheck |
Skillcheck.hack(opts, cb) | Grid hack skillcheck |
Skillcheck.wires(opts, cb) | Wire cutting skillcheck |
Client-only
Skillcheck is a client-side global. It is not available in server scripts.