RX Challenges Installation

RX Challenges turns an open patch of ground into a contest. Players run shooting, archery, axe-throwing, or knife-throwing matches through the same setup flow, from a quick 1v1 to a 4v4 team match with entry fees and a seasonal ranking.

The resource runs standalone or bridged to RSG or VORP. The bridge is only needed for entry fees and payouts; the matches themselves work without one.

Requirements

RequirementWhy it is needed
A RedM serverRX Challenges uses RedM input hashes, blips, and world placement.
RSG or VORPOptional. Only needed for entry fees and match payouts.

No database is required. Leaderboard progression and saved layouts are stored in a file inside the resource, so there is no SQL to import.

1. Place the resource

Extract the complete resource into your server’s resources directory. Keep the folder intact and writable: saved layouts and leaderboard progression are written back into it.

The default extracted folder name is rx_challenges.

2. Add it to server.cfg

Start your framework first when using the RSG or VORP economy bridge. On a standalone server, order does not matter.

ensure rx_challenges

If you renamed the resource folder, replace rx_challenges with that exact folder name.

3. Connect the economy

Config.Economy.adapter is 'auto' by default and detects a supported adapter from your framework resources:

Config.Economy = {
    adapter = 'auto', -- auto, rsg, vorp, external or disabled
    account = 'cash',
    rsgResource = 'rsg-core',
    vorpResource = 'vorp_core',
    vorpInventoryResource = 'vorp_inventory'
}

Set adapter to 'disabled' if matches should never involve money. If your framework resources use different folder names, update rsgResource, vorpResource, and vorpInventoryResource to match them exactly, or detection will fail even when the framework is running.

account selects which money account is charged and paid. Change it if your server does not use cash.

4. Set the locale

Config.Locale = 'en'
Config.FallbackLocale = 'en'
Config.Command = 'challenge'

Keep FallbackLocale pointing at a complete translation. Missing keys in the primary locale fall back to it, so an incomplete fallback leaves interface text empty.

Config.Command is the command players use to open the interface. Rename it if /challenge conflicts with another resource.

5. Place your leaderboard boards

The leaderboard ships with one board location. Replace it with coordinates that fit your server, or add more:

Config.Leaderboard.boards = {
    {
        x = -817.94,
        y = -1345.70,
        z = 43.61,
        heading = -90.00
    }
}

Stand where you want the board, note the coordinates, and set heading so it faces the right way. Check the viewing direction in game before publishing the values; a board placed backwards is only obvious once someone walks up to it.

Set Config.Leaderboard.enabled = false if you do not want a persistent ranking at all. See Configuration for the full progression, blip, and board options.

6. Verify the flow

Restart the server and test with two accounts:

  1. Run /challenge and confirm the interface opens.
  2. Invite the second player and confirm the invitation arrives within InviteRadius.
  3. Set up a match, place a layout, and confirm placement is rejected beyond PlacementMaxDistance.
  4. Run a full match and confirm scoring and the turn flow work.
  5. With an entry fee set, confirm the amount is charged and the payout arrives.
  6. Walk to a board and confirm the leaderboard shows the completed match.
  7. Restart the server and confirm the ranking is still there.

If invitations never arrive, check that both players are within InviteRadius and that neither has moved beyond InviteAcceptanceDistance before accepting. Both distances are checked separately.