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
| Campo | Significado |
|---|---|
color | El color en el scoreboard y encima de la cabeza. |
model | Una cadena, o una tabla. Una tabla da a elegir al jugador. |
description | Se ve en el menú F4. Corchetes largos, no comillas. |
weapons | Loadout de spawn, por clase de arma. |
command | Se escribe como /policeofficer. Solo letras y dígitos. |
max | 0 significa ilimitado. 4 significa cuatro a la vez. |
salary | Se paga en cada intervalo de payday. |
admin | 0 todos, 1 admins, 2 superadmins. |
vote | Si los jugadores votan la entrada al job. |
hasLicense | Puede dar licencias de armas. |
candemote | Si 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 llamadaDarkRP.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.