скрипт который показывает уровень над головой

paulohardy

вы еще постите говно? тогда я иду к вам
Всефорумный модератор
1,887
1,246
Убери видимость через стены плиз :D
Попробую высрать чичас
upd сделал пока что видимым не во всем стриме, а вместе с ником.
хуй знает как сделать так, что бы не видно было через стены, но я попробую
настроить дальность можете командой /setdist метры, по стандарту стоит 18 как на дрп
 

Вложения

  • showlvl.lua
    1.3 KB · Просмотры: 19
Последнее редактирование:

P0M61K

Активный
Автор темы
266
57
Попробую высрать чичас
upd сделал пока что видимым не во всем стриме, а вместе с ником.
хуй знает как сделать так, что бы не видно было через стены, но я попробую
настроить дальность можете командой /setdist метры, по стандарту стоит 18 как на дрп
isCharOnScreen(PED)

Код:
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
 
Последнее редактирование:

paulohardy

вы еще постите говно? тогда я иду к вам
Всефорумный модератор
1,887
1,246