PUBLIC LUA EXAMPLES

GTA V Lua Hash Notebook

Download a small Nenyoo Lua utility that prints JOAAT model hashes in hex, unsigned and signed decimal. Edit the identifier list and compare it with the web calculator.

GTA V PremiumNative Engine + Foundation APINenyoo documentation examples

What this example does

The identifiers table is an editable notebook. Each entry becomes an action, so the script requires no external dataset or download.

util.joaat lowercases the identifier and returns a 32-bit hash. Values at or above 0x80000000 are converted to signed decimal by subtracting 2^32.

The message includes hexadecimal, unsigned decimal and signed decimal. Use the representation required by the API or file you are working with.

Install and run

  1. Use Nenyoo GTA V Premium with the native Lua API. Download the file and keep its .lua extension.
  2. Put nenyoo-hash-notebook.lua in the native user-script folder:%LOCALAPPDATA%\Nenyoo\Plus\Scripts\User\
  3. Refresh the script list, load the script, and open its script page. Keep the -- @nenyoo-menu marker at the top.
  4. Use the script’s Unload action when finished. Reload after editing its source.

Try it

  1. Choose adder and compare the output with the web JOAAT generator: 0xB779A091, u32 3078201489, i32 -1216765807.
  2. Add another ASCII model identifier to the table and reload the script.
  3. Open F10 to inspect the printed result if the notification disappears before you copy it.

Complete Lua source

nenyoo-hash-notebook.lua · original Nenyoo documentation example

-- @nenyoo-menu -- Nenyoo documentation example: JOAAT hash notebook. -- Requires GTA V Premium's native Engine + Foundation Lua APIs. -- Source review only; no in-game compatibility claim. local root = menu.my_root() -- Add your own ASCII GTA identifiers to this list, then reload the script. local identifiers = { "adder", "sultan", "weapon_pistol" } for _, name in ipairs(identifiers) do local identifier = name menu.action(root, identifier, {}, "Print this identifier's JOAAT hash", function() local hash = util.joaat(identifier) local signed = hash if hash >= 0x80000000 then signed = hash - 0x100000000 end local message = string.format("%s: 0x%08X | u32 %d | i32 %d", identifier, hash, hash, signed) print(message) util.toast(message) end) end

Requirements and limits

  • A matching hash does not prove the model exists in your game version. This script does not load, spawn or modify a model.
  • Different strings can share a hash. This example hashes known text; it does not reverse an arbitrary number.

API and source review: 2026-11-13. These examples were reviewed against the bundled Nenyoo reference and source. They have not been tested in a running game, and no particular game-build compatibility is claimed.

APIs used: menu.my_root, menu.action, util.joaat, util.toast

More Lua examples