About Title Selector
═══════════════════════════════════════════════════
TITLE SELECTOR v1.5.0
Customize Chat Titles Without Losing Permission Groups
by romzar.games
═══════════════════════════════════════════════════
DESCRIPTION
-----------
TitleSelector provides an intuitive UI for players to select, hide, or show their
chat titles from BetterChat. It also integrates seamlessly with SkillTree, giving
players independent control over their Level and Prestige indicators. Players can
customize which titles appear in chat without losing their permission groups.
═══════════════════════════════════════════════════
WHAT'S NEW IN v1.5.0
═══════════════════════════════════════════════════
✓ Emoji Toggle
- New toggle to hide emoji-only titles (:coffeecan:, :medal:, etc.)
- Removes emojis from mixed titles (e.g., "Admin :star:" → "Admin")
- Works with selected titles and Hide All mode
- "Emoji: ON/OFF" button in the Filters row
✓ BetterChatGradients Support
- Full native support for gradient colors in titles
- Gradients render correctly when selecting custom titles
- Supports both hex colors (#ff0000) and named colors (red, blue, yellow)
- Multi-color gradients: red,orange,yellow,green
✓ Extra Patterns (Config Only)
- Advanced regex patterns for complex title formats
- Handles uMod gradient tags: [#red,blue]text[/#]
- Handles HTML color tags: <color=#fff>:emoji:</color>
- No UI toggle - applied automatically with Emoji toggle
✓ Named Color Support
- Gradients support color names: red, green, blue, yellow, orange,
purple, pink, cyan, white, black, gray, gold, silver
- Mix hex and named: #ff0000,orange,yellow
═══════════════════════════════════════════════════
KEY FEATURES
------------
✓ Visual Title Selection
- Clean modal UI where players can enable/disable their owned titles
- Green checkbox for active titles, gray for available, locked icon for unowned
- Intuitive interface for easy title management
✓ Collectible Display
- Shows locked titles players can work towards obtaining
- Motivates players to unlock new titles
- Clear visual distinction between owned and locked titles
✓ SkillTree Integration
- Independent toggle controls for Level [Lv.X] indicators
- Independent toggle controls for Prestige [Pr.X] indicators
- Mix and match visibility settings
✓ Hide All Option
- Quickly hide all BetterChat titles with one click
- Keep SkillTree indicators visible while hiding rank titles
- Perfect for players who want minimal chat clutter
✓ Pagination System
- Handles large title collections with page navigation
- Configurable items per page
- Smooth browsing experience
✓ Multi-language Support
- Fully translatable via Oxide lang system
- All UI text customizable
- Easy localization for any language
✓ Permission Based Access
- Control who can access the title selector
- Simple permission system
- Grant to specific groups or players
✓ Persistent Data
- Player preferences saved automatically
- Settings persist across sessions and restarts
- No data loss on plugin reload
INSTALLATION
------------
1. Upload TitleSelector.cs to oxide/plugins/ or carbon/plugins/
2. Ensure BetterChat is installed and configured
3. Grant permission: o.grant group default titleselector.use
4. Reload the plugin if needed: o.reload TitleSelector
5. (Optional) Customize the config and lang files
DEPENDENCIES
------------
Required:
- BetterChat - This plugin hooks into BetterChat to modify title display
Optional:
- SkillTree - If installed, players can toggle Level/Prestige visibility
- BetterChatGradients - If installed, gradient colors render natively
PERMISSIONS
-----------
titleselector.use
- Allows access to the title selector UI
- Required for players to open the /title menu
- Grant to groups or individual players
PERMISSION EXAMPLES
-------------------
Grant to all players:
o.grant group default titleselector.use
Grant to VIP group only:
o.grant group vip titleselector.use
Grant to specific player:
o.grant user PlayerName titleselector.use
o.grant user 76561198000000000 titleselector.use
COMMANDS
--------
/title (Chat)
- Opens the Title Selector UI
- Requires: titleselector.use permission
- Main command for accessing the interface
/titulo (Chat)
- Alternative command (configurable)
- Same functionality as /title
/titulos (Chat)
- Alternative command (configurable)
- Same functionality as /title
CONFIGURATION
-------------
File Location: oxide/config/TitleSelector.json
Default Configuration:
{ "Allow hide all titles": true, "Allow toggle SkillTree level": true, "Allow toggle SkillTree prestige": true, "Allow toggle emoji titles": true, "Level patterns (regex)": [ "\\s*<color=[^>]*>\\[Lv\\.\\d+\\]</color>\\s*", "\\s*<color=[^>]*>\\[Level\\s*\\d+\\]</color>\\s*", "\\s*\\[Lv\\.\\d+\\]\\s*", "\\s*\\[Level\\s*\\d+\\]\\s*" ], "Prestige patterns (regex)": [ "\\s*<color=[^>]*>\\[Pr\\.\\d+\\]</color>\\s*", "\\s*<color=[^>]*>\\[Prestige\\s*\\d+\\]</color>\\s*", "\\s*\\[Pr\\.\\d+\\]\\s*", "\\s*\\[Prestige\\s*\\d+\\]\\s*" ], "Emoji patterns (regex)": [ "\\s*:\\w+:\\s*" ], "Extra patterns (regex) - applied with emoji toggle": [ "\\s*\\[#[\\w,\\s#]+\\]\\[\\+\\d+\\]\\s*:\\w+:\\s*\\[/\\+\\]\\[/#\\]\\s*", "\\s*\\[#[\\w,\\s#]+\\]\\s*:\\w+:\\s*\\[/#\\]\\s*", "\\s*<color=[^>]*>:\\w+:</color>\\s*" ], "Max selectable titles": 3, "Main command": "title", "Alternative commands": ["titulo", "titulos"], "Ignored groups (hidden from UI)": ["default", "player", "guest"], "Items per page": 7, "UI - Background color": "0.1 0.1 0.1 0.95", "UI - Header color": "0.15 0.15 0.15 1", "UI - Available item color": "0.2 0.2 0.2 0.9", "UI - Locked item color": "0.12 0.12 0.12 0.7", "UI - Selected item color": "0.1 0.4 0.1 0.9", "UI - Close button color": "0.8 0.2 0.2 1", "UI - Active checkbox color": "0.3 0.8 0.3 1", "UI - Inactive checkbox color": "0.3 0.3 0.3 1" }
Configuration Options:
- Allow hide all titles: Enable/disable the "Hide All" button
- Allow toggle SkillTree level: Enable/disable Level toggle for players
- Allow toggle SkillTree prestige: Enable/disable Prestige toggle for players
- Allow toggle emoji titles: Enable/disable Emoji toggle for players
- Level patterns: Regex patterns to detect Level indicators from SkillTree
- Prestige patterns: Regex patterns to detect Prestige indicators from SkillTree
- Emoji patterns: Regex patterns to detect emoji-only titles
- Extra patterns: Advanced regex patterns for complex formats (applied with emoji toggle)
- Max selectable titles: Maximum number of titles a player can display at once
- Main command: Primary chat command to open the UI
- Alternative commands: Additional commands that open the UI
- Ignored groups: BetterChat groups to hide from the UI (e.g., default groups)
- Items per page: Number of titles shown per page in the UI
- UI colors: Customize the appearance of the interface
HOW IT WORKS
------------
1. Player with 'use' permission types /title in chat
2. Title Selector UI opens showing all available titles
3. Player sees their titles organized by status:
- Green checkbox = Title is active and will show in chat
- Gray checkbox = Title is available but not selected
- Locked icon = Title the player doesn't own yet (collectible)
4. Player clicks titles to enable/disable them
5. When no titles are selected, BetterChat displays titles based on priority
6. Player preferences are saved automatically
TITLE SELECTION SYSTEM
----------------------
AVAILABLE (Player owns the title):
- Displayed with interactive checkbox
- Click to toggle on/off
- Limited by Max selectable titles setting
SELECTED (Currently active):
- Green checkbox indicator
- Will display in chat messages
- Can be deselected by clicking
LOCKED (Player doesn't own):
- Shown as collectible/goal
- Locked icon displayed
- Cannot be selected until unlocked
SKILLTREE INTEGRATION
---------------------
The bottom row of the UI shows toggle buttons for SkillTree indicators:
Level Toggle:
- Controls visibility of [Lv.109] style indicators
- "Level: ON" = Level shown in chat
- "Level: OFF" = Level hidden from chat
Prestige Toggle:
- Controls visibility of [Pr.1] style indicators
- "Prestige: ON" = Prestige shown in chat
- "Prestige: OFF" = Prestige hidden from chat
These work independently - players can show Level but hide Prestige, or vice versa.
EMOJI TOGGLE
------------
The Filters row includes a toggle for emoji visibility:
Emoji Toggle:
- Controls visibility of emoji-only titles (:coffeecan:, :medal:, etc.)
- Removes emojis from mixed titles (e.g., "Admin :star:" → "Admin")
- "Emoji: ON" = Emojis shown in chat
- "Emoji: OFF" = Emojis hidden from chat
- Works with both selected titles and Hide All mode
- Extra patterns are applied automatically when emoji toggle is OFF
BETTERCHATGRADIENTS SUPPORT
---------------------------
TitleSelector natively supports BetterChatGradients:
Features:
- Gradient colors render correctly when selecting custom titles
- Supports hex colors: #ff0000, #00ff00, #0000ff
- Supports named colors: red, green, blue, yellow, orange, purple,
pink, cyan, white, black, gray, gold, silver
- Multi-color gradients: red,orange,yellow,green
- Mix hex and named colors: #ff0000,orange,yellow
No additional configuration required - gradients work automatically.
HIDE ALL FEATURE
----------------
The "Hide All" button provides quick title management:
- Hides all BetterChat titles with one click
- Respects SkillTree toggle settings
- Respects Emoji toggle settings
- Players can hide rank titles while showing Level/Prestige
- "Show All" button reverses the action
PLAYER WORKFLOW
---------------
1. Type /title to open the Title Selector UI
2. Browse available titles using pagination if needed
3. Click checkboxes to select desired titles (up to max limit)
4. Toggle SkillTree Level/Prestige visibility as desired
5. Toggle Emoji visibility as desired
6. Use "Hide All" for quick hiding of all BetterChat titles
7. Close the UI - preferences are saved automatically
8. Chat messages now display only selected titles
ADMIN WORKFLOW
--------------
1. Install the plugin with BetterChat dependency
2. Configure ignored groups to hide default/system groups
3. Set max selectable titles based on server preference
4. Customize UI colors to match server theme
5. Grant 'titleselector.use' permission to appropriate groups
6. Translate lang file if needed for non-English servers
API METHODS
-----------
For developers who want to integrate with TitleSelector:
API_GetSelectedTitles(string odId)
- Returns: List<string> of player's selected titles
- Use to check what titles a player has enabled
API_IsHidingTitles(string odId)
- Returns: bool indicating if player is hiding all titles
- Use to check player's hide status
API_SetSelectedTitles(string odId, List<string> titles)
- Sets player's selected titles programmatically
- Use to modify player preferences via code
API_RefreshTitles()
- Refreshes the title cache
- Call after BetterChat config changes
API USAGE EXAMPLE
-----------------
[PluginReference] private Plugin TitleSelector; void Example(BasePlayer player) { // Get selected titles var titles = TitleSelector?.Call<List<string>>( "API_GetSelectedTitles", player.UserIDString); // Check if hiding var isHiding = TitleSelector?.Call<bool>( "API_IsHidingTitles", player.UserIDString) ?? false; // Set titles TitleSelector?.Call("API_SetSelectedTitles", player.UserIDString, new List<string> { "vip", "donator" }); // Refresh cache TitleSelector?.Call("API_RefreshTitles"); }
LOCALIZATION
------------
All UI text is customizable via the lang file.
File Location: oxide/lang/en/TitleSelector.json
Default Messages:
{ "NoPermission": "<color=#ff5555>You don't have permission to use this command.</color>", "BetterChatNotLoaded": "<color=#ff5555>BetterChat is not loaded!</color>", "TitleLocked": "<color=#ff5555>You don't own this title!</color>", "MaxTitlesReached": "<color=#ff5555>Maximum of {max} titles reached!</color>", "HideNotAllowed": "<color=#ff5555>Hiding titles is not enabled.</color>", "ToggleLevelNotAllowed": "<color=#ff5555>Toggle level is not enabled.</color>", "TogglePrestigeNotAllowed": "<color=#ff5555>Toggle prestige is not enabled.</color>", "ToggleEmojiNotAllowed": "<color=#ff5555>Toggle emoji is not enabled.</color>", "UITitle": "TITLE SELECTOR", "UIStatusHidden": "All titles are hidden", "UIStatusDefault": "Showing default titles (based on priority)", "UIStatusSelected": "{count}/{max} titles selected", "UILocked": "Locked", "UISelected": "Active", "UIAvailable": "Available", "UIClear": "Clear", "UIHideAll": "Hide All", "UIShowAll": "Show All", "UIClose": "Close", "UISkillTreeLabel": "Filters:", "UILevelVisible": "Level: ON", "UILevelHidden": "Level: OFF", "UIPrestigeVisible": "Prestige: ON", "UIPrestigeHidden": "Prestige: OFF", "UIEmojiVisible": "Emoji: ON", "UIEmojiHidden": "Emoji: OFF" }
USE CASES
---------
• VIP Customization: Let VIP players customize their chat appearance
• Roleplay Servers: Players choose titles that fit their character
• Rank Management: Players hide unwanted default titles
• Clean Chat: Minimalist players can hide all titles
• SkillTree Control: Show progress without cluttering chat
• Emoji Control: Hide emoji titles for cleaner chat
• Collectibles: Motivate players to unlock new titles
• Multi-Title Servers: Let players display multiple earned titles
• Gradient Titles: Beautiful color gradients in player titles
TROUBLESHOOTING
---------------
Q: UI not opening when typing /title
A: Check that player has the 'titleselector.use' permission
Q: Titles not showing in chat after selection
A: Ensure BetterChat is loaded and properly configured
Q: SkillTree toggles not appearing
A: SkillTree must be installed for these options to show
Q: Some titles not appearing in the UI
A: Check the "Ignored groups" config - groups listed there are hidden
Q: Player can't select more titles
A: They've reached the "Max selectable titles" limit in config
Q: Changes not saving
A: Check oxide/data folder permissions and console for errors
Q: Emoji toggle not working
A: Check "Allow toggle emoji titles" is true in config
Q: Gradients not rendering
A: Ensure BetterChatGradients is installed and working
PERFORMANCE
-----------
• Lightweight and optimized
• Data saved per-player efficiently
• UI rendered on-demand only
• No performance impact when UI is closed
• Safe to use on high-population servers
COMPATIBILITY
-------------
• Requires BetterChat (mandatory dependency)
• Optional SkillTree integration
• Optional BetterChatGradients integration
- Gradients work natively when selecting titles
- No conflicts - TitleSelector applies gradients directly
• Works with Oxide and Carbon
• No conflicts with other chat plugins
• Compatible with permission plugins
SUPPORT
-------
For support, bug reports, or feature requests, please use the discussion
tab or contact the author.
VERSION HISTORY
---------------
v1.5.0 - Emoji & Gradient Update
- New Emoji toggle to hide emoji-only titles
- Full BetterChatGradients native support
- Extra patterns for complex title formats
- Named color support in gradients
- UI label changed from "SkillTree:" to "Filters:"
v1.4.0 - Initial public release
- Full BetterChat integration
- SkillTree Level/Prestige toggle support
- Pagination for large title collections
- Hide All feature with SkillTree independence
- Comprehensive API for developers
LICENSE
-------
This plugin is provided for use on Rust game servers.
Redistribution or resale of this plugin is prohibited.
© 2025 romzar.games - All rights reserved.
══════════════════════════════════════════════════
Thank you for using Title Selector!
Give your players control over their chat identity!
══════════════════════════════════════════════════
