Exports & Commands
Every minigame is exposed as a single export, and the resource ships three commands for placement and testing. Everything else (hooks, hack points, state) is driven from cfg.lua and data/saved_minigames.lua.
Exports
Signature
local ok = exports['rm_3dminigames']:<minigameName>(opts)The call blocks the current thread until the player finishes, fails, or cancels the minigame. ok is true on success, false on anything else. Wrap it in a coroutine or thread if you need to keep other work running.
opts
Every field is optional.
placement
string
'screen' (default), 'prop', 'monitor'
difficulty
string
'easy', 'medium', 'hard'. Falls back to cfg.<name>.default
preset
string
Prop preset key. Defaults to the placement type
_targetEntity
entity
Required for placement = 'monitor' outside a hack point
any other
any
Passed straight to the React component as props
The difficulty preset is merged into opts first, then your call-site values override on top, then the meta keys are stripped off. See Configuration.
Example
CreateThread(function()
local success = exports['rm_3dminigames']:untangle({
difficulty = 'hard',
timeLimit = 25,
placement = 'screen',
})
if success then
TriggerServerEvent('mypack:server:openVault')
else
exports.ox_lib:notify({ type = 'error', description = 'Hack failed.' })
end
end)Full minigame list
See Minigames for a description of each one.
Commands
/create_minigame
Opens an ox_lib dialog, spawns a preview prop, attaches a gizmo so you can slide and rotate the prop into place, then writes the point to data/saved_minigames.lua.
Fields in the dialog:
Label
Short identifier for the point. Shows up in server logs
Hack Type
Preset from cfg.hacks.types (fingerprint, laptop, tablet, ...)
Minigame
Which minigame runs on E
Difficulty
easy / medium / hard, or blank for the cfg default
Left-click empty space to confirm placement. Escape cancels and deletes the preview.
Access: admin-gated. See Configuration.
/remove_minigame
Deletes the nearest hack point within 3 metres of the player, removes it from data/saved_minigames.lua, and despawns the entity if it was networked. Prints a notify with the label of the removed point.
Access: admin-gated.
/test_minigame
Runs a minigame right now, no hack point required.
placement
screen or prop
name
One of the minigame names above
difficulty
Optional, easy / medium / hard
Example:
The result (true / false) is printed to the F8 console. monitor placement is intentionally excluded here because it needs an existing world entity, use /create_minigame to test that.
Access: admin-gated.
State bags
Networked hack types (laptop_open, monitor) tag their spawned entity with a state bag named rmHackPoint. It carries the hack type, coordinates, minigame name and hook overrides. Other resources can read it, but should not write to it:
Setting this state bag from another resource will confuse the hack-point system. Read only.
Events
The resource ships a small handful of net events. All are internal, so do not fire them from other scripts unless you know what you are doing.
rm_3dminigames:server:spawnHackPoint
c → s
Networked spawn from /create_minigame
rm_3dminigames:server:persistHackPoint
c → s
Local spawn, server just persists
rm_3dminigames:server:removeHackPoint
c → s
Delete nearest point
rm_3dminigames:client:removeResult
s → c
Feedback for the remove command
rm_3dminigames:client:removeLocalNear
s → c
Broadcast so every client drops a local point
Server-side identity check callback:
rm_3dminigames:server:isAdmin
true if the caller is authorised
Localisation
Locale JSON files live in locales/. en.json ships as the reference. Add another file next to it named after the locale code and translate the values only. Load it in cfg.lua:
Keep %d, %s and {name}-style placeholders in the same order as the English file. They are filled in at runtime.
Last updated