Saltar al contenido

Fingerprint Cloner

Fingerprint Cloner funciona en el cliente. Tu script lo lanza, espera el resultado y le cuenta a tu servidor qué ha pasado. Usa las texturas, los sonidos y los vídeos 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-fingerprint-cloner 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-fingerprint-cloner

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-fingerprint-cloner']:start(4, 300000)
end)

Evento

El evento vuelve enseguida y llama a tu función cuando acaba la partida:

TriggerEvent('fingerprint-cloner:start', 4, 300000, 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
rounds Huellas que hay que resolver, de 1 a 4 4
time Tiempo para todo el hackeo, en milisegundos 300000 (5 minutos)

Resultados

result reason Cuándo
1 success Todas las huellas encajan
2 timeout Se acabó el tiempo
0 quit El jugador salió del hackeo
-1 busy Ya estaba en marcha
-1 load_failed No cargaron los recursos del juego

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-fingerprint-cloner']:start(4, 300000)
        TriggerServerEvent('miatraco:hackeoTerminado', token, result == 1)
    end)
end)
-- server.lua
local MAX_TIME = 300 + 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)