✂️ NPC Hairs & Beards
Documentation relating to the jo_hairdresser_npc add-on for the Hairdresser script.
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
3. Configuration
The configuration file is config.lua in the resource root. Do not edit this file directly as your changes may be lost during updates. Instead, use overwriteConfig.lua to store your customizations.
config.lua- Default configuration maintained by developers. Do not modify this file.overwriteConfig.lua- This is where you place only the values you want to override.
How to customize the configuration
- Open
/overwriteConfig.lua - Find the value you want to change in
config.lua(e.g.,Config.language) - Copy only that line into
overwriteConfig.lua - Edit the copied value to your liking
The script loads config.lua first, then overwriteConfig.lua overwrites only the values you redefine. This ensures your customizations are preserved when updating the script.
4. For developers
Filters
Filters allow you to modify data or permissions synchronously at specific points in the script.
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)