Помогите написать полосы на луа

MSIMI

Новичок
Автор темы
2
0
Версия SA-MP
  1. Любая
Если в двух словах, то хочу добавить в свой скрипт подобные полосы и инфу, но не знаю как, пожалуйста помогите
 

Вложения

  • Безымянный.png
    Безымянный.png
    198.5 KB · Просмотры: 41

Sadow

Известный
1,427
592
Я тебе приведу пример рендера на объекты. Думаю сам разберёшься что делать.
Lua:
function main() -- Главная функция
    while not isSampAvailable() do wait(100) end -- Если самп не загружен то не начинать работу всех действий снизу

    local font = renderCreateFont("Arial", 7, 4) -- Загружаем шрифт. Вместо Arial пиши свой шрифт, цифра 7 это размер текста, а 4 размер обводки

    sampAddChatMessage("{5A90CE}[ID Objects] {FFFFFF}Скрипт успешно загружен! | Активация: /idobj") -- Сообщение при старте сампа

    sampRegisterChatCommand("idobj", function() -- Регистрация команды
        idobj = not idobj -- Переменную делаем противоположным её значением при вводе команды для активации скрипта
        sampAddChatMessage(idobj and "{5A90CE}[ID Objects] {FFFFFF}Скрипт - {66FF00}Активирован!" or "{5A90CE}[ID Objects] {FFFFFF}Скрипт - {FF0000}Де-Активирован!") -- Сообщение при вводе команды. Если переменная true то высветится первое сообщение, если false то второе
    end)

    while true do -- Бесконечный цикл
        wait(0) -- Хз зачем это
   
        if idobj then -- Если переменная равна true то
            for k, v in pairs(getAllObjects()) do -- Перебирать все объекты в зоне стрима
                if isObjectOnScreen(v) then -- Если объект в зоне стрима то
                    local pX, pY, pZ = getCharCoordinates(PLAYER_PED) -- Получать местоположение пользователя
                    local res, oX, oY, oZ = getObjectCoordinates(v) -- Получать местоположение объекта
                    local wpX, wpY = convert3DCoordsToScreen(pX, pY, pZ) -- Конвертируем 3D координаты пользователя в экранные, необходимо для отображения текста/полоски
                    local woX, woY = convert3DCoordsToScreen(oX, oY, oZ) -- Конвертируем 3D координаты объекты в экранные, необходимо для отображения текста/полоски
                    local dist = string.format("%.1f", getDistanceBetweenCoords3d(pX, pY, pZ, oX, oY, oZ)) -- Если тебе будет нужно то это получение дистанции, если хочешь без 10.5 (к примеру) дистанцию то введи %.0f
                    renderDrawLine(wpX, wpY, woX, woY, 1, -1) -- Проводим линию.  wpX, wpY это координаты первой точки, woX, woY это второй, 1 это толщина, а -1 цвет, вместо него пишешь 0xFFFFFF (к примеру)
                    renderFontDrawText(font, "Объект. Дистанция: " .. dist .. " метров. Айди: " .. getObjectModel(v), woX, woY, -1) -- Сам текст. font - переменная с шрифтом. Затем идёт текст, далее экранные координаты и цвет. Также цвет писать 0xFFFFFF (к примеру)
                end -- Завершаем проверку на нахождение объекта в зоне видимости игрока
            end -- Завершаем перебор всех объектов в зоне стрима
        end -- Завершаем проверку на значение переменной

    end -- Завершаем бесконечный цикл
end -- Завершаем всю функцию
 
  • Нравится
Реакции: MSIMI

MSIMI

Новичок
Автор темы
2
0
Я тебе приведу пример рендера на объекты. Думаю сам разберёшься что делать.
Lua:
function main() -- Главная функция
    while not isSampAvailable() do wait(100) end -- Если самп не загружен то не начинать работу всех действий снизу

    local font = renderCreateFont("Arial", 7, 4) -- Загружаем шрифт. Вместо Arial пиши свой шрифт, цифра 7 это размер текста, а 4 размер обводки

    sampAddChatMessage("{5A90CE}[ID Objects] {FFFFFF}Скрипт успешно загружен! | Активация: /idobj") -- Сообщение при старте сампа

    sampRegisterChatCommand("idobj", function() -- Регистрация команды
        idobj = not idobj -- Переменную делаем противоположным её значением при вводе команды для активации скрипта
        sampAddChatMessage(idobj and "{5A90CE}[ID Objects] {FFFFFF}Скрипт - {66FF00}Активирован!" or "{5A90CE}[ID Objects] {FFFFFF}Скрипт - {FF0000}Де-Активирован!") -- Сообщение при вводе команды. Если переменная true то высветится первое сообщение, если false то второе
    end)

    while true do -- Бесконечный цикл
        wait(0) -- Хз зачем это
  
        if idobj then -- Если переменная равна true то
            for k, v in pairs(getAllObjects()) do -- Перебирать все объекты в зоне стрима
                if isObjectOnScreen(v) then -- Если объект в зоне стрима то
                    local pX, pY, pZ = getCharCoordinates(PLAYER_PED) -- Получать местоположение пользователя
                    local res, oX, oY, oZ = getObjectCoordinates(v) -- Получать местоположение объекта
                    local wpX, wpY = convert3DCoordsToScreen(pX, pY, pZ) -- Конвертируем 3D координаты пользователя в экранные, необходимо для отображения текста/полоски
                    local woX, woY = convert3DCoordsToScreen(oX, oY, oZ) -- Конвертируем 3D координаты объекты в экранные, необходимо для отображения текста/полоски
                    local dist = string.format("%.1f", getDistanceBetweenCoords3d(pX, pY, pZ, oX, oY, oZ)) -- Если тебе будет нужно то это получение дистанции, если хочешь без 10.5 (к примеру) дистанцию то введи %.0f
                    renderDrawLine(wpX, wpY, woX, woY, 1, -1) -- Проводим линию.  wpX, wpY это координаты первой точки, woX, woY это второй, 1 это толщина, а -1 цвет, вместо него пишешь 0xFFFFFF (к примеру)
                    renderFontDrawText(font, "Объект. Дистанция: " .. dist .. " метров. Айди: " .. getObjectModel(v), woX, woY, -1) -- Сам текст. font - переменная с шрифтом. Затем идёт текст, далее экранные координаты и цвет. Также цвет писать 0xFFFFFF (к примеру)
                end -- Завершаем проверку на нахождение объекта в зоне видимости игрока
            end -- Завершаем перебор всех объектов в зоне стрима
        end -- Завершаем проверку на значение переменной

    end -- Завершаем бесконечный цикл
end -- Завершаем всю функцию
Спасибо большое, а то я нигде найти не мог это.
Осталось понять как сделать на игроков.