Skip to content

addons.json

The addons.json file (located in resources\vMenu\config\) is where you tell vMenu about the custom content you’ve added to your server. It has five sections:

In this file you can list all your addon models. If you want to remove all addon models from one of the categories below, simply set that category to []. For example, to remove all models, set each category to the following:

{
"vehicles": [],
"peds": [],
"weapons": []
}

If you want to add new models, simply add a comma after the last row in a specific category, add a new line below, and just copy the format from the line above, replacing the name with your new name. For example, here I’ve added 4 more cars, 1 more ped and 5 more weapons:

{
"vehicles": [
"addonvehiclename1",
"addonvehiclename2",
"addonvehiclename3",
"addonvehiclename4",
"addonvehiclename5",
"addonvehiclename6"
],
"peds": [
"addonpedname1",
"addonpedname2",
"addonpedname3"
],
"weapons": [
"addonweaponname1",
"addonweaponname2",
"addonweaponname3",
"addonweaponname4",
"addonweaponname5",
"addonweaponname6",
"addonweaponname7"
],
"weapon_components": [
"weapon_component_name_1",
"weapon_component_name_2"
]
}

The weapon_components section is for addon (streamed) weapon components, things like custom scopes, clips and suppressors. You only need it for components you’ve added yourself, every base game component is already built in to vMenu.

Just list the component names:

{
"weapon_components": [
"COMPONENT_MYRIFLE_SCOPE_01",
"COMPONENT_MYRIFLE_CLIP_02",
"COMPONENT_MYPISTOL_SUPP"
]
}

You don’t have to say which weapon each component belongs to. vMenu checks every component in this list against every weapon it knows about, base game and addon weapons alike, and each one automatically shows up as a toggle in the menus of the weapons that actually accept it. Components that don’t match any weapon simply never appear, so if one of yours doesn’t show up, double check that the name matches the one in your weapon’s meta files exactly.

The extra_blendable_faces section is used to add custom (streamed) blendable heads to the Parent #1 and Parent #2 lists in the MP Character inheritance menu.

If you’ve installed an add-on head pack on your server, the heads are already there as far as the game is concerned, but vMenu has no way of knowing what they’re called. This section is where you give them names:

{
"extra_blendable_faces": [
"Custom Head 1",
"Custom Head 2",
"Custom Head 3",
"Custom Head 4",
"Custom Head 5"
]
}

These entries are labels only. vMenu doesn’t check them against anything, so you can name them whatever makes sense for your server.

This is the important bit. Each entry is matched to a head by its position in the list, continuing on from where the base game heads stop.

A stock server has 46 blendable parent heads, numbered 0 to 45. So your first entry is head 46, your second is head 47, and so on. If your head pack occupies IDs 46 to 50, the example above is correct, and "Custom Head 1" is head 46.

If your entries are in a different order to the head IDs your pack actually uses, the names in the menu will point at the wrong faces. Adding, removing or reordering entries later shifts everything below them, so keep the list in the same order as your pack.

Custom faces show up in the Parent #1 and Parent #2 lists, but deliberately not in the Parent #1 Skin and Parent #2 Skin lists. Skin tones always come from the base game heads.

That’s why those are four separate options rather than two. Face shape and skin tone are picked independently, and then blended with the two sliders below them:

  • Head Shape Mix blends the face shape between Parent #1 and Parent #2.
  • Body Skin Mix blends the skin tone between Parent #1’s skin and Parent #2’s skin.

So you can give a character a custom head shape while still using a base game skin tone, which is exactly what you want, since a streamed head model doesn’t come with its own skin textures. For the underlying game side of this, see the SetPedHeadBlendData native.

Vehicles cannot be renamed through vMenu. While this would be fairly easy to add, it is not the recommended way to name vehicles, so vMenu intentionally does not include an option for it. The recommended approach is to add vehicle names properly. To properly set a vehicle’s name, follow the easy steps below:

  1. Go to the vehicles.meta file for your vehicle, set the <gameName>MODELNAME</gameName> entry to the vehicle model name. Do NOT enter a custom name in there. For example, if my addonvehicle is called mgt in-game (shows up as mgt in the addons vehicle spawner/you spawn it by typing mgt in the spawn by name function) then set the gameName to mgt in the vehicles.meta file.

  2. Go to the fxmanifest.lua (previously __resource.lua) of your vehicle resource, and add a new client_script, you can name it whatever you want. For now I’ll use veh_names.lua, so it should look like this: client_script 'veh_names.lua'.

  3. Create the file you just listed in the fxmanifest.lua (previously __resource.lua) in your vehicle resource folder: veh_names.lua.

  4. In that lua file, paste the following:

    Citizen.CreateThread(function()
    AddTextEntry("MODELNAME", "The Display Name You Want Your Vehicle To Appear As, Enter That Name Here")
    end)
  5. Now change the "MODELNAME" to your vehicle’s spawn name (the same name that you set as the gameName in the vehicles.meta file.) In this case: "mgt".

  6. Now change the display name. Enter it in the second parameter of the AddTextEntry call, in place of the placeholder text.

  7. The final result should be something like this:

    Citizen.CreateThread(function()
    AddTextEntry("mgt", "Mustang GT")
    end)
  8. Do this for every vehicle you have/want to set a custom name for, for example, if I wanted to also do focusrs and bmwm5. I’d do it like this:

    Citizen.CreateThread(function()
    AddTextEntry("mgt", "Mustang GT")
    AddTextEntry("focusrs", "Focus RS")
    AddTextEntry("bmwm5", "BMW M5")
    end)
{
"vehicles": [
"addonvehiclename1",
"addonvehiclename2"
],
"peds": [
"addonpedname1",
"addonpedname2"
],
"extra_blendable_faces": [],
"weapons": [
"addonweaponname1",
"addonweaponname2"
],
"weapon_components": [
"weapon_component_name_1",
"weapon_component_name_2"
]
}

Consider supporting me on Patreon!