Saltar al contenido

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

  1. Consigue los archivos. Owner: en Granted Assets de tu Cfx.re Portal. Developer: el enlace de descarga del correo de Tebex.
  2. Pon la carpeta fsd-serverfarm-hack en los recursos de tu servidor. No le cambies el nombre: el export lo usa.
  3. Añade esta línea a tu server.cfg y 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)