Jobs de DarkRP, bien hechos

Dónde viven realmente los jobs, qué hace cada campo, y los cinco errores que cuestan una tarde. Incluido el que sobrescribe un job sin dar ningún error.

5 minutos de lectura

DarkRP se configura editando Lua, y la forma más común de romper un servidor es editar el Lua equivocado. Esta guía cubre dónde viven realmente los jobs, qué hace cada campo, y los errores que producen justo los mensajes en los que si no te vas a dejar una tarde.

No edites nunca DarkRP en sí

El gamemode trae una carpeta llamada darkrpmodification. Ahí es donde van tus cambios.

garrysmod/addons/darkrpmodification/lua/darkrp_customthings/    jobs.lua    entities.lua    shipments.lua    doorgroups.lua    ...

Edita gamemodes/darkrp directamente y la siguiente actualización borra tu trabajo. Edita darkrpmodification y sobrevive, porque actualizar DarkRP no toca nunca ese addon.

Si no tienes darkrpmodification, instálalo antes que nada. Es una descarga aparte de DarkRP, y editar el gamemode "solo hasta que lo instale bien" es como la gente pierde un fin de semana.

La forma de un job

Un job es una llamada a DarkRP.createJob, asignada a una global TEAM_:

TEAM_POLICE = DarkRP.createJob("Police Officer", {    color = Color(25, 25, 170, 255),    model = {"models/player/police.mdl", "models/player/police_fem.mdl"},    description = [[Keep the peace and arrest criminals.]],    weapons = {"arrest_stick", "unarrest_stick", "stunstick", "weaponchecker"},    command = "policeofficer",    max = 4,    salary = 65,    admin = 0,    vote = true,    hasLicense = true,    candemote = true,    category = "Civil Protection",})

El generador de jobs de DarkRP te escribe esto, incluida la variante con whitelist, y no te deja producir un nombre TEAM_ que no sea una global de Lua válida. Aun así vale la pena entenderlo, porque vas a leer jobs de otra gente constantemente.

Para qué sirve cada campo

CampoSignificado
colorEl color en el scoreboard y encima de la cabeza.
modelUna cadena, o una tabla. Una tabla da a elegir al jugador.
descriptionSe ve en el menú F4. Corchetes largos, no comillas.
weaponsLoadout de spawn, por clase de arma.
commandSe escribe como /policeofficer. Solo letras y dígitos.
max0 significa ilimitado. 4 significa cuatro a la vez.
salarySe paga en cada intervalo de payday.
admin0 todos, 1 admins, 2 superadmins.
voteSi los jugadores votan la entrada al job.
hasLicensePuede dar licencias de armas.
candemoteSi este job puede ser destituido por votación.

Las clases de arma no se adivinan: la lista de clases de arma recoge todas las que registra el juego, y te dice cuáles solo existen cuando Half-Life: Source está montado.

Los cinco errores que cuestan una tarde

1. Dos jobs compartiendo un nombre TEAM

TEAM_POLICE = DarkRP.createJob("Police Officer", { ... })TEAM_POLICE = DarkRP.createJob("Police Chief", { ... })

El segundo sobrescribe al primero en silencio. Sin error, un job que falta, y una hora de confusión. Cada job necesita su propia global.

2. Un ]] dentro de una description

description = [[Guard the vault [[loot]] and stay alert.]],

La cadena termina en el primer ]], y todo lo que va después se convierte en sintaxis que el parser no entiende. Usa [==[ ... ]==] cuando el texto lleve corchetes, o evítalos.

3. Un modelo que no está montado

Un job que apunta a un modelo que tu servidor no tiene hace que los jugadores aparezcan como el cartel de error. La lista de playermodels recoge todos los modelos que Garry's Mod registra por defecto; cualquier otro tiene que estar en un addon realmente instalado en el servidor, no solo en tu cliente.

4. Editar con el servidor encendido

DarkRP lee estos archivos al arrancar. Guardar jobs.lua en un servidor en marcha no cambia nada hasta que reinicia, y por eso a "no me sale el job" se le responde casi siempre reiniciando.

5. Un command con espacio o guion

command = "police officer",

command se convierte en un comando de chat. Los espacios, guiones y tildes lo rompen. Letras y dígitos, nada más.

Cuando un job no aparece, lee la consola del servidor al arrancar en vez de adivinar. DarkRP imprime un error claro con archivo y línea para todo lo que no ha podido cargar.

Categorías, para que el menú F4 no sea un muro

Pasados los diez jobs el menú necesita agruparse. Una categoría se crea una vez y luego se referencia por nombre:

DarkRP.createCategory{    name = "Civil Protection",    categorises = "jobs",    startExpanded = true,    color = Color(25, 25, 170, 255),    canSee = fp{fn.Id, true},    sortOrder = 101,}

El campo category de un job tiene que coincidir con name exactamente, mayúsculas incluidas. Si no coincide no da error; el job simplemente cae en el grupo por defecto. El generador de categorías las mantiene consistentes.

Poner whitelist a un job

Dos maneras, y no son equivalentes.

La whitelist integrada es customCheck, que se ejecuta cuando alguien intenta coger el job:

customCheck = function(ply)    return table.HasValue({"vip", "admin", "superadmin"}, ply:GetUserGroup())end,CustomCheckFailMsg = "This job is reserved for VIP members.",

Pon siempre CustomCheckFailMsg. Sin él al jugador se le rechaza sin explicación y acaba preguntándote a ti.

El campo admin es más simple pero más tosco: admin = 1 limita el job a los admins, sin mensaje y sin sitio para un rango de donador.

Cuando los jobs funcionen

  • Door groups, para que solo la policía pueda poseer la comisaría. Ojo: la función es la global AddDoorGroup, no una llamada DarkRP.create.
  • Agendas, el texto de objetivos que un jefe escribe para su equipo.
  • Shipments y entities para lo que vende el vendedor de armas.
  • Demote groups, para que un demote de un job de policía cierre también los demás.

Las herramientas que usa esta guía