Fundamentos: tu primer recurso en QBCore · Lección 3/5 · 9 min
Cliente vs Servidor: el modelo mental clave
El cliente corre en el PC del jugador (no fiable); el servidor es la autoridad. Se comunican por eventos.
Este es EL concepto que separa un script seguro de un coladero. El código de cliente corre en el PC de cada jugador: cualquiera puede manipularlo. El código de servidor corre en tu máquina: es la única fuente de verdad. En QBCore esto es igual de crítico que en ESX.
Regla de oro: todo lo que dé dinero, items o ventaja se DECIDE y se EJECUTA en el servidor. El cliente solo pide; nunca confíes en lo que envía.
Hablar entre cliente y servidor: eventos
-- CLIENTE: pide al servidor cobrar un sueldo
RegisterCommand('sueldo', function()
TriggerServerEvent('taxi:server:cobrarSueldo')
end)
-- SERVIDOR: decide y ejecuta (autoridad)
RegisterNetEvent('taxi:server:cobrarSueldo', function()
local src = source -- ID del jugador que disparó el evento
print(('El jugador %s pidió su sueldo'):format(src))
end)Cliente → Servidor
- TriggerServerEvent('nombre', ...): el cliente avisa al servidor.
- TriggerClientEvent('nombre', targetId, ...): el servidor avisa a un cliente.
- RegisterNetEvent('nombre', fn): registra y escucha un evento de red (sintaxis moderna).
- source (solo en el servidor): el ID del jugador que disparó el evento.
Convención de nombres recomendada en QBCore: recurso:client:accion y recurso:server:accion (los propios eventos del core siguen QBCore:Client:... y QBCore:Server:...). Así sabes de un vistazo dónde vive cada evento.
Practica lo aprendido
0/3Regla de oro del modelo cliente-servidor: ¿dónde se decide y ejecuta todo lo que da dinero, items o ventaja?
Ordena el flujo de un comando /sueldo que el cliente pide y el servidor atiende.
Coloca las líneas en el orden correcto con las flechas.
RegisterCommand('sueldo', function()end)RegisterNetEvent('taxi:server:cobrarSueldo', function() TriggerServerEvent('taxi:server:cobrarSueldo') local src = sourceend)Pista
Primero el comando del cliente que dispara el evento, y luego el servidor que lo escucha con RegisterNetEvent.
Completa la línea del cliente que avisa al servidor para cobrar el sueldo.
RegisterCommand('sueldo', function() ('taxi:server:cobrarSueldo')end)Pista
Es la función con la que el cliente dispara un evento que corre en el servidor.
Reto: prográmalo tú
Haz un comando /hola en el cliente que dispare un evento al servidor, y que el servidor imprima por consola el ID del jugador.
Escríbelo tú en tu editor (VS Code) y pruébalo en tu servidor. Aquí se aprende haciéndolo, no copiando.
Ver pista
RegisterCommand en client.lua → TriggerServerEvent; RegisterNetEvent en server.lua usando source.
Escribe aquí tu solución:
