/// 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
- Check the installed version
This guide describes Custom Rewards 2.0.4. Use the same version in the configurator.
- 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.
- 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 path
Data 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 path
Enabled - 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 path
Commands 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 path
Rewards 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 path
UI Settings → Max Reward By PageAllowed 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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 path
UI 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>requiresCustomRewards.Admin.customrewards_wipe_owner <type> <owner>requiresCustomRewards.Admin.customrewards_wipe_all <type>requiresCustomRewards.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), returningenabled,disabled, orunknown;TryShowUI_API(string rewardType, ulong playerId, string parent), returning a dictionary withsuccess,code,rewardType,known, andenabled.
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
- Back up
oxide/data/CustomRewards_*. - Install only
CustomRewards.cs. - Create one disabled reward type with a single low-value item.
- Reload and correct every startup validation error.
- Grant
customrewards.<type>.useto a test group. - Enable the type and test its show command, paging, insufficient-points state, successful claim, and reconnect behavior.
- 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.