From DarkRP
Revision as of 18:07, 23 July 2020 by FPtje (talk | contribs) (1 revision imported: attempt import)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
This page is available in the following languages:
Данная версия страницы доступна на следующих языках:
Jarvis-flag 8010.png English | Russia-flag.png Русский | France-flag.png Français

Custom job fields[edit]

You can create custom jobs in DarkRP. However, there are many things to fiddle with. This page explains every single "field".

Video Tutorials[edit]

Check out these two tutorials if you're new to creating DarkRP servers: DarkRP 2.5 Tutorial: Adding custom jobs to your setup and DarkRP 2.5 Tutorial: Custom Jobs Syntax. They cover the essentials of modding and creating custom jobs.

Example with all fields[edit]

Here's an example with all available fields filled in:

TEAM_EXAMPLE = DarkRP.createJob("Example team", {
    color = Color(255, 255, 255, 255),
    model = {
    description = [[This text will serve as the description of
                    this team.]],
    weapons = {"weapon_p2282"},
    command = "example",
    max = 0.7, -- at most 70% of the players can have this job. Set to a whole number to set an absolute limit.
    salary = 45,
    admin = 0,
    vote = false,
    hasLicense = false,

    -- The following fields are OPTIONAL. If you do not need them, or do not need to change them from their defaults, REMOVE them.
    NeedToChangeFrom = TEAM_CITIZEN,
    customCheck = function(ply) return ply:getDarkRPVar("money") > 10000 end,
    CustomCheckFailMsg = "You don't have enough money!", -- alternative: CustomCheckFailMsg = function(ply, jobTable) return ply:getDarkRPVar("money") < 5000 and "You're piss poor" or "You don't have enough money!" end,
    modelScale = 1.2,
    maxpocket = 20,
    maps = {"rp_downtown_v2", "gm_construct"},
    candemote = true,
    mayor = false,
    chief = false,
    medic = false,
    cook = false,
    hobo = false,
    ammo = {
        ["pistol"] = 60,
    category = "Other", -- The name of the category it is in. Note: the category must be created!
    sortOrder = 100, -- The position of this thing in its category. Lower number means higher up.
    buttonColor = Color(255, 255, 255, 255), -- The color of the button in the F4 menu
    label = "Super job", -- Optional: the text on the button in the F4 menu

    playerClass = "player_darkrp",
    CanPlayerSuicide = function(ply) return false end,
    PlayerCanPickupWeapon = function(ply, weapon) return true end,
    PlayerDeath = function(ply, weapon, killer) end,
    PlayerLoadout = function(ply) return true end,
    PlayerSelectSpawn = function(ply, spawn) end,
    PlayerSetModel = function(ply) return "models/player/Group03/Female_02.mdl" end,
    PlayerSpawn = function(ply) end,
    PlayerSpawnProp = function(ply, model) end,
    RequiresVote = function(ply, job) for k,v in pairs(player.GetAll()) do if IsValid(v) and v:IsAdmin() then return false end end return true end, -- People need to make a vote when there is no admin around
    ShowSpare1 = function(ply) end,
    ShowSpare2 = function(ply) end,
    OnPlayerChangedTeam = function(ply, oldTeam, newTeam) end,
    canStartVote = function(ply) return ply:Distance(SomeNPC) < 200 end,
    canStartVoteReason = "You must be close to some NPC", -- alternative: canStartVoteReason = function(ply, jobTable) return ply:Distance(SomeNPC) > 5000 and "You're miles away from some NPC" or "You must be close to some NPC" end,

Field explanations[edit]

color (Color) (required)

The color of the team in tab and other places.

model (string/table) (required)

The model of the team. This can either be a string or a table of strings. Two examples:

A string, players who have this job have ONE model, namely the one given in the string:

model = "models/player/Group03/Female_01.mdl"

A table, the model of the player holding this job is randomly chosen from the list of given models:

model = {

description (string) (required)

The description of a job shows up in the F4 menu when selecting the job. Describe what your job does and what the use of it is.

weapons (table) (required)

The list of weapons people with this job spawn with (besides the default weapons).

The following example means that the job spawns with the weapons in the list:

weapons = {"arrest_stick", "unarrest_stick", "weapon_deagle2", "stunstick", "door_ram", "weaponchecker"}

command (string) (required)

What do you have to enter in chat to get this job?

Example: type /example in chat to get the example job

command = "example"

If the job requires voting, a command "/voteexample" is added.

Note: The "/" at the start of the command should be omitted.

max (number) (required)

How many people can have this job at any given time.

Set to a number between 0 and 1 to make it a percentage. E.g. max = 0.3 means at most 30% of the players can have this job.

Set to a whole number to set an absolute limit.

salary (number) (required)

The salary this job gets.

admin (number) (required)

What (admin) access you need to get this job.

admin = 0 -- anyone can get this job
admin = 1 -- only admins can get this job
admin = 2 -- only superadmins can get this job

If you want to customize this further (with donators, moderators and whatnot), look at customCheck (scroll down).

vote (boolean)

Do players need to create a vote to get this job? true for yes, false for no.

hasLicense (boolean)

Does this job get a gun license for free? true for yes, false for no.

It's useful to give the cops gun licenses.

NeedToChangeFrom (number/table)

You can only get this job if you had a specific other job first.

Example: You can only become a chief of police when you're already a CP:

NeedToChangeFrom = TEAM_POLICE

Example 2: You can only become a mayor if you're either a CP or a chief:


customCheck (function)

See here for an example with donator jobs.

Function arguments are:

CustomCheckFailMsg (string/function)

Custom message when someone tries and fails to get the job.

See here for an example with donator jobs.

If using this as a function, the arguments are:

modelScale (number)

How big are the players that have this job?

modelScale = 1 -- the default size
modelScale = 1.2 -- 120% of the default size
modelScale = 0.9 -- 90% of the default size.

Don't make it too big or too small, people will get trouble with jumping and crouching.

maxpocket (number)

The amount of items that can fit in the pocket of people having this job. If not set, it will revert to the setting in settings.lua, which is set to 10 by default.

maps (table)

In what maps this job will be available. This is just a list of maps.

candemote (boolean)

Can people who have this job be demoted? By default hobo's and citizens cannot be demoted because it has no use to demote them. When not given, it is set to true.

mayor (boolean)

People with this job can do things the mayor can do (create a lottery, accept warrants etc.).

chief (boolean)

People with this job can do things the chief can do.

medic (boolean)

People with this job can do things the medic can do.

cook (boolean)

People with this job can do things the cook can do.

hobo (boolean)

People with this job can do things the hobo can do.

ammo (table)

The ammo people spawn with.

The keys in the table are the ammo names and the values are how much of each ammo is given.

category (string)

The category it belongs to in the F4 menu.

NOTE: This will throw an error if the category doesn't exist! Please see the categories page.

sortOrder (number)

Location in the category. Lower number means more on top of the list. By default this is set 100.

More advanced fields[edit]

playerClass (string)

The GMod player class to assign to the player when they change to this job.

CanPlayerSuicide (function)

A function that decides whether players with this job can commit suicide.

Arguments are:

PlayerCanPickupWeapon (function)

A function that decides whether players with this job can pick up a certain weapon.

Arguments are:

PlayerDeath (function)

Called when a player dies.

Arguments are:

PlayerLoadout (function)

Called when a player gets his weapons. Return true to prevent him from getting his default weapons!

Arguments are:

PlayerSelectSpawn (function)

Called when a spawn is selected for this player.

Arguments are:

PlayerSetModel (function)

A function that decides what the model should be. Return a string to override the default model.

Arguments are:

PlayerSpawn (function)

Called when a player spawns.

Arguments are:

PlayerSpawnProp (function)

Called when a player attempts to spawn a prop.

Arguments are:

RequiresVote (function)

Decides whether the player needs to make a vote to get the job.

Note: overrides the vote field! (the vote field will have no effect when this is set)

Arguments are:


DescriptionPeople need to make a vote if there are three or more people who have this job. People DON'T need to make a vote if there are fewer than three people with this job.
RequiresVote = function(ply, job) return #team.GetPlayers(job) >= 3 end


DescriptionVIPS can skip the vote
RequiresVote = function(ply, job) return ply:GetNWString("usergroup") ~= "vip" end

ShowSpare1 (function)

Called when a player presses the F1 key.

Arguments are:

ShowSpare2 (function)

Called when a player presses the F2 key.

Arguments are:

OnPlayerChangedTeam (function)

Called when a player switches to this job.

Arguments are: