script_name("FaceCensor")
script_version_number(1)
script_version("1.0")
script_author("anorakasi")
local ffi = require 'ffi'
local sampfuncs = require 'sampfuncs'
local memory = require 'memory'
local render = require 'render'
local censored_players = {}
local pixel_size = 5
local mosaic_width = 30
local mosaic_height = 40
local function getPlayerPed(playerId)
local ped = sampfuncs.GetPlayerPed(playerId)
if ped == 0 then return nil end
return ped
end
local function getHeadPos(playerPed)
local ped_ptr = memory.getint(ped)
if ped_ptr == 0 then return nil end
local head_offset = 0x230 -- этот оффсет нужно проверить под твою версию
local x = memory.getfloat(ped_ptr + head_offset)
local y = memory.getfloat(ped_ptr + head_offset + 4)
local z = memory.getfloat(ped_ptr + head_offset + 8)
return x, y, z
end
local function getHeadScreenCoords(playerId)
local ped = getPlayerPed(playerId)
if not ped then return nil end
local x, y, z = getHeadPos(ped)
if not x then return nil end
local sx, sy, sz = render.world_to_screen(x, y, z)
if sx == nil or sy == nil then return nil end
return sx, sy
end
function main()
repeat wait(100) until isSampAvailable()
sampRegisterChatCommand("censor", function(arg)
local id = tonumber(arg)
if not id or id < 0 or id > 1000 then
sampAddChatMessage("[FaceCensor] Некорректный ID игрока", 0xFF0000)
return
end
censored_players[id] = true
sampAddChatMessage("[FaceCensor] Цензура включена для игрока ID " .. id, 0x00FF00)
end)
sampRegisterChatCommand("uncensor", function(arg)
local id = tonumber(arg)
if not id or id < 0 or id > 1000 then
sampAddChatMessage("[FaceCensor] Некорректный ID игрока", 0xFF0000)
return
end
censored_players[id] = nil
sampAddChatMessage("[FaceCensor] Цензура отключена для игрока ID " .. id, 0xFFFF00)
end)
while true do
wait(0)
end
end
function onRender()
for playerId, _ in pairs(censored_players) do
local sx, sy = getHeadScreenCoords(playerId)
if sx and sy then
for x = 0, mosaic_width - 1 do
for y = 0, mosaic_height - 1 do
if (x + y) % 2 == 0 then
render.drawRect(sx + x * pixel_size, sy + y * pixel_size, pixel_size, pixel_size, 0xFF888888)
else
render.drawRect(sx + x * pixel_size, sy + y * pixel_size, pixel_size, pixel_size, 0xFFBBBBBB)
end
end
end
end
end
end