Server Farm Hack
Server Farm Hack funciona en el cliente. Tu script lo lanza, espera el resultado y le cuenta a tu servidor qué ha pasado. El jugador conecta los cuatro nodos de la izquierda con los cuatro de la derecha antes de quedarse sin tiempo o sin vidas. Usa las texturas y los sonidos del propio juego, así que no streamea nada.
Instalación
- Consigue los archivos. Owner: en Granted Assets de tu Cfx.re Portal. Developer: el enlace de descarga del correo de Tebex.
- Pon la carpeta
fsd-serverfarm-hacken los recursos de tu servidor. No le cambies el nombre: el export lo usa. - Añade esta línea a tu
server.cfgy reinicia:
ensure fsd-serverfarm-hack
No tiene dependencias.
Lánzalo
Puedes lanzarlo con el export o con el evento. Los dos van en un script de cliente.
Export
El export espera a que acabe la partida y devuelve el resultado, así que llámalo dentro de un thread:
CreateThread(function()
local result, reason = exports['fsd-serverfarm-hack']:start(240000, 4)
end)
Evento
El evento vuelve enseguida y llama a tu función cuando acaba la partida:
TriggerEvent('serverfarm-hack:start', 240000, 4, function(result, reason)
-- tu código
end)
No es un evento de red, así que un TriggerClientEvent desde el servidor no le llega. Para lanzarlo desde el servidor, manda tu propio evento al jugador y llama allí al export o al evento. Es lo que hace el ejemplo del final.
Opciones
Las dos son opcionales. Si dejas una fuera, se usa su valor por defecto.
| Opción | Qué es | Por defecto |
|---|---|---|
time |
Tiempo para todo el hackeo, en milisegundos | 240000 (4 minutos) |
lives |
Fallos que aguanta cada nodo de la derecha, de 1 a 4 | 4 |
Resultados
result |
reason |
Cuándo |
|---|---|---|
1 |
success |
Todos los nodos bien conectados |
2 |
timeout |
Se acabó el tiempo |
0 |
dead |
Un nodo se quedó sin vidas |
0 |
quit |
El jugador salió del hackeo |
-1 |
busy |
Ya estaba en marcha |
-1 |
error |
Algo falló durante la partida |
Da la recompensa en el servidor
Cualquiera con un menú de trucos puede lanzar miatraco:hackeoTerminado sin jugar, así que el servidor solo paga un hackeo que ha empezado él, que ha durado un tiempo posible, y una sola vez:
-- client.lua
RegisterNetEvent('miatraco:empezarHackeo', function(token)
CreateThread(function()
local result = exports['fsd-serverfarm-hack']:start(240000, 4)
TriggerServerEvent('miatraco:hackeoTerminado', token, result == 1)
end)
end)
-- server.lua
local MAX_TIME = 240 + 10 -- segundos: tu límite de tiempo más margen para la carga y la red
local MIN_TIME = 5 -- segundos: cronometra una partida rápida en tu servidor y súbelo
local hacks = {}
-- Llámala desde tu atraco cuando el jugador pueda hackear (en el terminal y sin cooldown).
local function startHack(src)
local token = ('%08x%08x'):format(math.random(0, 0x7fffffff), math.random(0, 0x7fffffff))
hacks[src] = { token = token, startedAt = os.time() }
TriggerClientEvent('miatraco:empezarHackeo', src, token)
end
RegisterNetEvent('miatraco:hackeoTerminado', function(token, success)
local src = source
local hack = hacks[src]
hacks[src] = nil -- un solo uso: un segundo aviso ya no encuentra nada
if not hack or hack.token ~= token or not success then return end
local took = os.time() - hack.startedAt
if took < MIN_TIME or took > MAX_TIME then return end
-- Da aquí la recompensa.
end)
AddEventHandler('playerDropped', function()
hacks[source] = nil
end)