Skip to content
← All documentation

/// PIMPMYRUST PLUGIN

Custom Rewards

Settings guide for this version of Custom Rewards. Check the plugin page before using it on your server.

Prepare your file

  1. Check the installed version

    This guide describes Custom Rewards 2.0.4. Use the same version in the configurator.

  2. Get the settings

    Click Import, then From my server. Select the files and confirm loading them. Selecting a server does not replace the open document. You can also import files from this device or a configuration from My projects.

  3. Edit and send

    Adjust settings, fix errors, then use Send to transfer files to the selected server. A conflict blocks sending until you choose how to resolve it. You can still export only the files you need.

Server transfers have private backups. Save keeps your work in My projects; it does not send anything to the server. A download also lets you resume without a server connection.

Settings for this version

General 3
Configuration format version
Whole number · required

Internal configuration format marker. Keep the value supplied for this plugin version.

JSON pathData Version
Enable
On / off · required

Enable this reward type. Each file defines an independent type; this does not enable every reward type on the server.

JSON pathEnabled
Commands to open rewards
List · required

Chat aliases opening this catalogue, without a leading /. Players need customrewards.<type>.use; leave empty if VoteReward or another integration already opens this type. Avoid aliases registered by another plugin.

JSON pathCommands for show UI
Reward settings 1
Rewards
Object list · required

Rewards in this type’s milestone order. Configure each item or action and its access rules; moving an entry changes its milestone index.

JSON pathRewards Settings → Rewards List
Interface 10
Rewards per page
Choice

Cards and milestones displayed per page in CustomRewards 2.0.4. Increasing this count narrows each card within the existing area; it does not change the points needed for each milestone.

JSON pathUI Settings → Max Reward By Page

Allowed values: 3, 5, 8

Show descriptions
On / off

Show the reward type's language-file description below the header. This does not create an individual description for each reward.

JSON pathUI Settings → Show Description
Description text size
Whole number

Text size for both the catalogue description and its title in CustomRewards 2.0.4: this version uses this setting for both. Increasing it can overflow long text.

JSON pathUI Settings → Description Font Size
Title text size
Whole number

Retained field, but the CustomRewards 2.0.4 renderer does not read it. Change Description Font Size to resize the catalogue title; it also resizes the description.

JSON pathUI Settings → Title Font Size
Background image URL
Text

Frame image for each reward card in CustomRewards 2.0.4, tinted by rarity. Use a direct image with a transparent center so the reward illustration remains visible.

JSON pathUI Settings → Background Url
New icon URL
Text

CustomRewards 2.0.4 icon marking an unlocked, unclaimed and eligible reward. It is tinted by rarity; changing the image does not unlock the reward.

JSON pathUI Settings → New Icon Url
Checked icon URL
Text

Image overlaid on an already claimed card in CustomRewards 2.0.4. It shows the stored claim state and does not allow a second claim.

JSON pathUI Settings → Checked Icon Url
Lock icon URL
Text

CustomRewards 2.0.4 icon shown when the milestone is locked or an access requirement is unmet. Changing the icon does not change those requirements.

JSON pathUI Settings → Lock Icon Url
Previous-page icon URL
Text

CustomRewards 2.0.4 button image for the previous reward page. The plugin decides whether navigation is available; the image does not change the page count.

JSON pathUI Settings → Prev Icon Url
Next-page icon URL
Text

CustomRewards 2.0.4 button image for the next reward page. The plugin decides whether navigation is available; the image does not change the page count.

JSON pathUI Settings → Next Icon Url
Rarity colors 4
Common
Text · required

Frame and new-icon tint for Common rewards in CustomRewards 2.0.4. It changes neither reward value nor a draw probability. Use Rust RGBA values from 0 to 1; the final value controls opacity.

JSON pathUI Settings → Rarity Colors → Common
Rare
Text · required

Frame and new-icon tint for Rare rewards in CustomRewards 2.0.4. It changes neither reward value nor a draw probability. Use Rust RGBA values from 0 to 1; the final value controls opacity.

JSON pathUI Settings → Rarity Colors → Rare
Epic
Text · required

Frame and new-icon tint for Epic rewards in CustomRewards 2.0.4. It changes neither reward value nor a draw probability. Use Rust RGBA values from 0 to 1; the final value controls opacity.

JSON pathUI Settings → Rarity Colors → Epic
Legendary
Text · required

Frame and new-icon tint for Legendary rewards in CustomRewards 2.0.4. It changes neither reward value nor a draw probability. Use Rust RGBA values from 0 to 1; the final value controls opacity.

JSON pathUI Settings → Rarity Colors → Legendary
Theme colors 8
Primary color
Text · required

Theme color retained but unused by the CustomRewards 2.0.4 renderer. Changing it does not change this version's interface.

JSON pathUI Settings → Theme → Colors → Primary
Secondary color
Text · required

CustomRewards 2.0.4 color for filled progress and reached milestone markers. It does not change player points. Rust RGBA; final value = opacity.

JSON pathUI Settings → Theme → Colors → Secondary
Interface background
Text · required

CustomRewards 2.0.4 catalogue-window background color. Keep readable contrast with cards and text. Rust RGBA; final value = opacity.

JSON pathUI Settings → Theme → Colors → Background
Element background
Text · required

CustomRewards 2.0.4 color for header and description panels, progress background and some icons. Rust RGBA; final value = opacity.

JSON pathUI Settings → Theme → Colors → Surface
Disabled element background
Text · required

Tint used for arrows when a previous or next page exists in the CustomRewards 2.0.4 renderer. The legacy name does not decide whether the button works. Rust RGBA; final value = opacity.

JSON pathUI Settings → Theme → Colors → SurfaceDisabled
Primary text
Text · required

CustomRewards 2.0.4 color for the catalogue title and description, close-button X and quantities. Check contrast against their panels. Rust RGBA; final value = opacity.

JSON pathUI Settings → Theme → Colors → TextPrimary
Text on secondary color
Text · required

CustomRewards 2.0.4 color for numbers on milestone markers. It does not set reward amounts. Rust RGBA; final value = opacity.

JSON pathUI Settings → Theme → Colors → TextOnSecondary
Warning color
Text · required

CustomRewards 2.0.4 close-button background color. This setting does not indicate a reward error. Rust RGBA; final value = opacity.

JSON pathUI Settings → Theme → Colors → Danger

Plugin instructions

CustomRewards 2.0.4 — user guide

This guide covers the Codefling version 2.0.4. PimpMyCUI editing belongs to the separate 2.2.0 beta, not this version.

CustomRewards is a reusable reward and UI engine for Rust servers running Oxide or Carbon. Version 2.0.4 includes safe player reattachment after an offline wipe preload. The earlier 2.0.3 build passed its approved live reward UI and claim smoke tests on Rust build 2631 with Oxide; 2.0.4 has not received a new live smoke. Carbon remains compile-validated only.

Edit rewards in the configurator

The Rewards tab compares items, quantities, milestones, rarity, actions and conditions in a table. Search for a reward or click its name to edit it. Add reward opens the new reward’s settings directly.

In the reward window, Contents holds its rewards, Conditions its access rules and Visuals its presentation. Pick items from the Rust catalogue. Commands, permissions and groups have their own sections. Duplicate copies the reward’s contents; the trash button asks for confirmation. Sorting the table does not change reward order in the file.

Installation

Install the generated deploy/CustomRewards.cs file in the framework plugin directory. Do not install files from src/ individually. Keep a backup of oxide/data/CustomRewards_* before upgrading.

Reward types

Each JSON file under oxide/data/CustomRewards_rewards/ defines one reward type. The file name is the exact reward type used by API calls and its dynamic use permission is CustomRewards.<Type>.Use. New templates are disabled by default until an administrator reviews item names, commands, permission changes, group changes, eligibility rules, image URLs, and UI commands.

The web configurator lets you name the reward type before exporting it. For example, Starter exports to oxide/data/CustomRewards_rewards/Starter.json; check the destination shown in the export dialog before installation. Keep that exact type name in integrations and grant customrewards.starter.use to the appropriate group. Do not put this catalogue in oxide/config/.

Missing theme colors, rarity colors, and UI asset URLs are filled with safe defaults when a reward-type file is loaded. The exact known legacy Postimg URLs are migrated to hosted direct links whose content is verified against the source-controlled project assets; non-empty custom URLs are preserved. The neutral reward frame is tinted by the configured rarity color at runtime and has a transparent center.

Only %steamid% is accepted in server commands. Unknown placeholders and control characters are rejected. Reward configuration is privileged code and must remain administrator-controlled.

An enabled reward type must contain at least one fully valid, executable reward. Empty catalogues, malformed actions, permission grants without a plugin owner, and actions that revoke a required eligibility gate or grant a forbidden gate are rejected once at startup before commands or UI are registered.

Commands and permissions

  • Reward-type show commands are configured per template and require CustomRewards.<Type>.Use, unless the player is an administrator.
  • customrewards_give <type> <player> <quantity> requires CustomRewards.Admin.
  • customrewards_wipe_owner <type> <owner> requires CustomRewards.Admin.
  • customrewards_wipe_all <type> requires CustomRewards.Admin.
  • Player console commands for paging and claims validate every argument and recheck eligibility on the server.

Upgrade and recovery

Legacy unversioned player files are migrated forward to data version 2 only after validation. Invalid JSON, unsupported versions, negative points, duplicate reward IDs, out-of-range IDs, or overlap between claimed and unclaimed rewards fail closed and require administrator repair from backup.

A claim writes intent before privileged delivery and records action progress durably. Completed actions are not replayed. An action with uncertain external outcome is held for manual reconciliation; the plugin does not claim cross-API transactional delivery.

A definite partial failure resumes the immutable plan authorized on the first attempt, even if an earlier completed action changed a permission or group. Completed journal records are compacted only after the matching entitlement removal is durably saved; retryable, in-flight, reconciliation, active-entitlement, and replay-protection evidence remains fail-closed.

API and CUI composition

Contract version 2, the existing capabilities, and ShowUI_API remain compatible. Capability reward-type-ui-open-v1 adds:

  • GetRewardTypeStatus_API(string rewardType), returning enabled, disabled, or unknown;
  • TryShowUI_API(string rewardType, ulong playerId, string parent), returning a dictionary with success, code, rewardType, known, and enabled.

parent is a parent layer, never an element ID. The accepted always-present layers are Overall, Overlay, OverlayNonScaled, Hud.Menu, Hud, Under, and UnderNonScaled; null selects Overlay. Each UI root is uniquely scoped to the reward type and player. Invalid parents fail closed without destroying unrelated CUI.

Limitations

Approved-assembly compilation is not a live-server test. UI layout, inventory delivery behavior, command effects, dynamic plugin lookup for permission grants, reload behavior, and Oxide/Carbon runtime parity still require the deferred in-game smoke matrix.

First-run checklist

  1. Back up oxide/data/CustomRewards_*.
  2. Install only CustomRewards.cs.
  3. Create one disabled reward type with a single low-value item.
  4. Reload and correct every startup validation error.
  5. Grant customrewards.<type>.use to a test group.
  6. Enable the type and test its show command, paging, insufficient-points state, successful claim, and reconnect behavior.
  7. Add privileged commands, permission changes, or group changes only after the item-only path succeeds.

Configuration example

{
  "Enabled": false,
  "Commands for show UI": ["starter_rewards"],
  "UI Settings": {
    "Max Reward By Page": 5,
    "Show Description": true
  },
  "Rewards Settings": {
    "Rewards List": [
      {
        "Rarity (Common - Rare - Epic - Legendary)": "Common",
        "Quantity": 100,
        "Item Shortname (optional)": "wood",
        "Server command (optional)": [],
        "Grant Permissions :": [],
        "Grant Groups :": {},
        "Needed Permissions :": {},
        "Needed Groups :": {}
      }
    ]
  }
}

Keep the type disabled while reviewing it. Reward files are privileged configuration because they can execute server commands and change access.

Troubleshooting and FAQ

  • If a show command is missing, confirm the type loaded successfully, is enabled, and does not reuse another registered command.
  • If the UI denies access, grant customrewards.<type>.use; the historical mixed-case permission remains accepted for existing installations.
  • If a catalogue is rejected, fix the first reported invalid reward or contradictory eligibility action rather than editing player state.
  • If a claim requires reconciliation, inspect the administrator diagnostic and the external action before retrying.
  • Custom Rewards does not require Vote System. It can be used by any integration that follows the documented compatibility contract.

Install the files

With a connected server, click Send in the configurator. The result shows whether the files were sent and the plugin reloaded. Without RCON, reload the plugin from your server panel after sending.

Without a connected server: Keep a copy of the current files. Place each export in the folder shown before export, or follow the paths in the ZIP. Do not put data or translation files in the config folder.

Follow the plugin instructions above for dependencies and reloading. Exporting does not connect the site to your server.

Configuration and transfer guide →