:scissors: NPC Hairs & Beards
Documentation relating to the jo_hairdresser_npc add-on for the Hairdresser script.
:::: tabs ::: tab BUY Buy the add-on ::: ::::
1. Installation
::: warning The Hairdresser script is required to use this add-on. :::
To install jo_hairdresser_npc:
- Drag and drop the resource into your resources folder
- jo_hairdresser_npc
- Add this ensure to your server.cfg after
ensure jo_hairdresserensure jo_hairdresser_npc
Congratulations, the NPC Hairs & Beards add-on is ready to use!
2. Usage
:::: tabs ::: tab Open NPC styles Go to a hairdresser and open the hairdresser menu.
When the add-on is enabled, compatible hairdresser entries open an intermediate source menu where players can choose between:
- Natives - Browse the normal Hairdresser styles
- NPC - Browse NPC styles added by the add-on
This intermediate Natives / NPC choice appears for:
- Hair - Choose between native hair styles and NPC hair styles
- Beard - Choose between native beard styles and NPC beard styles
Female characters can also receive a dedicated Beard entry when female NPC beard data is available. :::
::: tab NPC features In the NPC menus, you can:
- Browse NPC hair - Preview and buy NPC hair components
- Browse NPC beards - Preview and buy NPC beard components
- Remove a component - Select the shaved option to remove the current NPC category
- Change color presets - Use the color slider on compatible NPC entries
- Switch payment options - Choose between available prices when multiple options exist
Changes are previewed on the player before purchase. :::
::: tab Supported categories The add-on includes 668 NPC style choices:
| Sex | Category | Choices |
|---|---|---|
| Male | Hair | 339 |
| Male | Full beard | 65 |
| Male | Mustache | 39 |
| Male | Mutton chops | 24 |
| Male | Chin beard | 22 |
| Male total | 489 | |
| Female | Hair | 166 |
| Female | Hair bonnet | 9 |
| Female | Beards | 4 |
| Female total | 179 |
Available categories depend on the character sex and the enabled prices in the configuration. :::
::: tab Coloring add-on If Hair & Beard Coloring is installed and started, compatible NPC components can use the external color palette.
The NPC add-on keeps the purchase flow delegated to the main Hairdresser script, so pricing, payment, persistence, and success feedback stay shared with the normal hairdresser menus. ::: ::::
3. Configuration
<ScriptConfig scriptPath="redm/hairdresser-npc" />
4. For developers > Filters
Filters allow you to modify data or permissions synchronously at specific points in the script.
4. For developers > Filters > <Badge type="server" text="Server" /> canAccessToNPCMenu
Control access to the NPC hair and beard menus.
This filter works with Config.npcMenuAccessMode.
hide_locked- the filter is called with thedisplaycontext. When it returnsfalse, the add-on stays linked to Hairdresser but does not add its NPC entries to the menu. Players will see the same behavior as if the NPC add-on was not present: Hair and Beard open the native Hairdresser menus directly.show_locked- NPC entries stay visible. The filter is called only with theopencontext when the player clicks an NPC entry. Returnfalseto block the menu opening and optionally notify the player.
Available contexts:
display- checks if NPC entries should be added to the Hairdresser menus.open- checks if the NPC menu can open after the player clicks an NPC entry.
-- @param canAccess - boolean (default true)
-- @param source - serverID of the player
-- @param context - string ("display" or "open")
exports.jo_hairdresser_npc:registerFilter("canAccessToNPCMenu", function(canAccess, source, context)
return canAccess
end)
Example - allow only VIP players:
local vipPlayers = {}
exports.jo_hairdresser_npc:registerFilter("canAccessToNPCMenu", function(canAccess, source, context)
return canAccess and vipPlayers[source] == true
end)
Example - keep NPC entries visible and notify only when the player clicks:
-- config/_default.lock/global.lua or your custom config file
Config.npcMenuAccessMode = "show_locked"
local isSubscriber = false
exports.jo_hairdresser_npc:registerFilter("canAccessToNPCMenu", function(canAccess, source, context)
if context == "open" and not isSubscriber then
jo.notif.rightError(source, "You can't access the NPC menu if you're not a subscriber")
end
return canAccess and isSubscriber
end)