ffi = require "ffi"
getBonePosition = ffi.cast("int (__thiscall*)(void*, float*, int, bool)", 0x5E4280)
DIST = 25.5 -- Дистанция отрисовки нужного тебе текста.
status = true -- при заходе в игру скрипт уже будет работать.
function main()
font = renderCreateFont('Tahoma', 7, 13) -- создание шрифта
sampRegisterChatCommand('headlvl', function()
if status == true then
status = false
sampAddChatMessage('[HeadLvl] Показатель уровня был выключен', -1)
else
status = true
sampAddChatMessage('[HeadLvl] Показатель уровня был включен', -1)
end
end)
while true do wait(0)
if status then
for k, PED in pairs(getAllChars()) do -- перебор всех игроков в зоне стрима, где PED - хэндл
local res, id = sampGetPlayerIdByCharHandle(PED) -- получение id этих игроков
if res then -- если получение ид прошло успешно, то
if isCharOnScreen(PED) and PED ~= PLAYER_PED and not sampIsPlayerNpc(id) then -- если игрок на экране и этот игрок не наш и игрок не npc, то
local x, y, z = getCharCoordinates(PED) -- получаем координаты игрока
local x2, y2, z2 = getCharCoordinates(PLAYER_PED) -- получаем свои координаты
local distance = getDistanceBetweenCoords3d(x, y, z, x2, y2, z2) -- получаем расстояние от себя до игрока
if distance <= DIST and isPointOnScreen(x, y, z, 0.0) and isCharOnScreen(PED) then -- если дистанция меньше или равна указанной в переменной DIST и виден на экране, то
local x6, y6, z6 = GetBodyPartCoordinates(6, PED) -- получение координатов кости под идом 6 (голова).
local x6, y6 = convert3DCoordsToScreen(x6, y6, z6) -- Конвертация 3д координаты в координаты экрана.
local color = sampGetPlayerColor(id) -- получение цвета игрока
local score = sampGetPlayerScore(id) -- получаем лвл игрока
renderFontDrawText(font, '[LVL: '..score..']', x6, y6 / 1.14, color) -- также если тебе нужно, чтобы было над головой, то делай небольшое смещение от координат головы,
-- в данном случае 1.14, если тебе нужно более высокое расположение, то увеличивай это значение.
end
end
end
end
end
end
end
function GetBodyPartCoordinates(id, handle)
local pedptr = getCharPointer(handle)
local vec = ffi.new("float[3]")
getBonePosition(ffi.cast("void*", pedptr), vec, id, true)
return vec[0], vec[1], vec[2]
end