Skip to the content
Docs

Zeno Rpchatid

On this page4

ESX only; the code is escrowed, but two functions live in its open config file and that is all we need:

  • Config.GetCharacterName(source, ESX)
  • Config.IsPlayerMasked(source) — on the server it reads Player(source).state.rp_masked, on the client it checks drawable slot 1.

Both are about the target, not the viewer, so zeno can be told "this face is covered" but cannot (yet) ask "does A recognise B?".

We do not ship or modify their code. You paste this into their config file.

1. Set our selector

lua
-- 5code-recognition/config.lua
Config.NametagSystem = 'zeno-rpchatid'

This value deliberately makes our bridge do nothing except print a reminder: zeno asks us, we never push to them.

2. Edit their Config.IsPlayerMasked

Replace the body with ours. Keep both branches — the same file is loaded on the server and on the client:

lua
-- zeno-rpchatid / config.lua   (THEIR file — your edit)
Config.IsPlayerMasked = function(source)
    if IsDuplicityVersion() then
        -- server: any player, viewer-independent
        return exports['5code-recognition']:IsFaceHidden(source) == true
    end
    -- client: my own face
    return exports['5code-recognition']:IsFaceHidden() == true
end

Our answer uses tiered face coverage (Config.FaceCoverage), not "is drawable 1 non-zero": a full mask and a bandana count as hidden, a cap and sunglasses do not. It fails closed — a player nobody has read yet counts as masked.

3. Do not write their rp_masked state bag

Their own client writes that bag every tick and would overwrite anything we put there, so the result would flicker. Our bridge never touches it — that is why 'zeno-rpchatid' is a snippet-only driver.

4. Optional: per-viewer names in their chat

zeno already swaps names per viewer, but only from its own "mutual greet" data. Until they add a hook, the closest you can get without touching their escrowed code is to send your own proximity messages from your server and use GetRecognizers / GetRecognitionLabel — see chat-default.md.