Jump to content

Sistema de screeshots


Recommended Posts

Ola, eu queria fazer um script do qual , quando eu da /capturar [Nome do jogador] ele tira a screeshot da tela do jogador e manda para uma pasta, mais o problema não é esse, eu conseguir fazer isso mas ele não pega nenhum elemento da tela do jogador como Hud, painel F8, porque o intuito dele era fazer ele pegar alguns tipos de hacks visuais como Wall, fov etc... 

--- client-side

local screenSource = nil
local capturing = false

function capturePlayerScreen(playerName)
    if capturing then return end
    capturing = true
    
    local screenWidth, screenHeight = guiGetScreenSize()
    screenSource = dxCreateScreenSource(screenWidth, screenHeight)
    
    addEventHandler("onClientRender", root, function()
        if screenSource then
            dxUpdateScreenSource(screenSource)
            
            local pixels = dxGetTexturePixels(screenSource)
            
            verifyPixels(pixels)
            
            local converted = dxConvertPixels(pixels, "jpeg", 100)
            
            -- envia os dados da imagem ao servidor
            triggerServerEvent("Screenshots", resourceRoot, converted, playerName, getTickCount())
            
            removeEventHandler("onClientRender", root, function() end)
            destroyElement(screenSource)
            screenSource = nil
            capturing = false
        end
    end)
end

addCommandHandler("capturar", function(command, targetPlayerName)
    if targetPlayerName then
        capturePlayerScreen(targetPlayerName)
    else
        outputChatBox("Uso: /capturar [nome do jogador]")
    end
end)

function verifyPixels(pixels)
    local width, height = dxGetPixelsSize(pixels)
    local suspiciousPixels = 0

    for x = 0, width - 1 do
        for y = 0, height - 1 do
            local r, g, b, a = dxGetPixelColor(pixels, x, y)
            if r == 0 and g == 255 and b == 0 and a > 0 then
                suspiciousPixels = suspiciousPixels + 1
            end
        end
    end

    if suspiciousPixels > 0 then
        outputChatBox("!")
    end
end
--- server side

addEvent("Screenshots", true)
addEventHandler("Screenshots", root, function(imageData, playerName, number)
    local folderPath = "screenshots"
    local filePath = string.format("%s/%s_%d.jpg", folderPath, playerName, number)
    
    if not fileExists(folderPath) then
        fileCreate(folderPath)
    end
    
    local file = fileCreate(filePath)
    if file then
        fileWrite(file, imageData)
        fileClose(file)
        outputChatBox("Screenshot salva como " .. filePath)
    else
        outputChatBox("Erro ao salvar a screenshot.")
    end
end)

 

Link to comment
  • Other Languages Moderators
Posted (edited)

Painel admin já tem essa função nativa.

Selecione o jogador no painel admin, depois clique em screenshots lá no canto superior direito, e depois clique em Take New.

A print pode ser vista in-game no mesmo menu ao clicar no botão View e também pode ser encontrada na pasta screenshots do resource admin. A print também pega a HUD do jogador (se estiver sendo mostrada via dxDraw), mas não pega o chatbox e nem janelas CEGUI (F1, F8, etc).

Edited by Lord Henry
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...