Исходник Гайд BaseModelRender | Рендер аксесуаров без создания сущностей

ARMOR

Я креветка
Автор темы
Модератор
5,068
7,363
Описание: Данная библиотека разрешает рендерить аксесуары на педах не через сущности, а через сами модели, тем самым не забивая игровые пуллы. Так же библиотека дает возможность подгружать кастомные модели для аксесуаров.

Установка: скачать файл BaseModelRender.dll из вложений и перенести его в папку moonloader\lib.

Функционал:
Описание
Функция
Добавляет модель на игрока по его хендлуbaseModelRender.addModel(Ptr modelPtr, Handle pedHandle, int boneId, int slot)
Указывает масштаб моделиbaseModelRender.setModelScale(Handle pedHandle, int slot, float x, float y, float z)
Указывает смещение от кости к моделиbaseModelRender.setModelOffset(Handle pedHandle, int slot, float x, float y, float z)
Указывает поворот моделиbaseModelRender.setModelRotate(Handle pedHandle, int slot, float x, float y, float z)
Указывает цвет моделиbaseModelRender.setModelColor(Handle pedHandle, int slot, int r, int g, int b, int a)
Удаляет модель по слотуbaseModelRender.removeModel(Handle pedHandle, int slot)
Удаляет модели со всех слотовbaseModelRender.removeAllModels(Handle pedHandle)
Возвращает указатель на CBaseModelInfo игровой модели по её IDlocal modelPtr = baseModelRender.getGameBaseModel(int modelIndex)
Подгружает кастомную модель через .txd и .dff файлы и возвращает их кастомный ID.local customModelId = baseModelRender.loadSimpleModel(string dffPath, string txdPath)
Возвращает указатель на CBaseModelInfo для кастомной модели.local customModelPtr = baseModelRender.getSimpleBaseModel(int customModelIndex)
* Ptr - это указатель на CBaseModelInfo. Если вы хотите рендерить игровую модель - для этого используйте getGameBaseModel().
* Слотов 8, начиная с 0. ID костей можете взять здесь. https://sampwiki.blast.hk/wiki/Bone_IDs_RU


Пример кода с рендером игровых моделей
Lua:
local baseModelRender = require("BaseModelRender")

function main()
    while not isSampAvailable() do wait(0) end

    sampRegisterChatCommand("guitar", function()
        -- Добавляем гитару на спину
        while not hasModelLoaded(19318) do
            requestModel(19318)
            loadAllModelsNow()
        end

        local pGuitarModel = baseModelRender.getGameBaseModel(19318)
        if (pGuitarModel) then
            baseModelRender.addModel(pGuitarModel, playerPed, 1, 0);
            baseModelRender.setModelScale(playerPed, 0, 0.8, 1.0, 0.8);
            baseModelRender.setModelRotate(playerPed, 0, 180.0, 50.0, 180.0);
            baseModelRender.setModelOffset(playerPed, 0, 0.1, -0.1, 0.0)
            baseModelRender.setModelColor(playerPed, 0, 255, 0, 0, 255)
        end
    end)

    sampRegisterChatCommand("mask", function()
        -- Добавляем маску на пиздак
        while not hasModelLoaded(11704) do
            requestModel(11704)
            loadAllModelsNow()
        end

        local pMaskModel = baseModelRender.getGameBaseModel(11704)
        if (pMaskModel) then
            baseModelRender.addModel(pMaskModel, playerPed, 2, 1);
            baseModelRender.setModelScale(playerPed, 1, 0.38, 0.5, 0.38);
            baseModelRender.setModelRotate(playerPed, 1, -90.0, -90.0, -90.0);
            baseModelRender.setModelOffset(playerPed, 1, 0.08, 0.1, 0.0)
            baseModelRender.setModelColor(playerPed, 1, 255, 255, 255, 255)
        end
    end)
 
    sampRegisterChatCommand("cleanModels", function()
        baseModelRender.removeAllModels(playerPed)
    end)

    wait(-1)
end

Пример кода с подгрузкой и рендером кастомных моделей на примере аксесуаров аризоны:
Lua:
local baseModelRender = require("BaseModelRender")
function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand("set", function()
        local nBackpackId = baseModelRender.loadSimpleModel("models\\obj52_narutobp.dff", "models\\obj52_1.txd");
        local pBackpackModel = baseModelRender.getSimpleBaseModel(nBackpackId)
        if (pBackpackModel) then
            baseModelRender.addModel(pBackpackModel, playerPed, 1, 0);
            baseModelRender.setModelScale(playerPed, 0, 0.8, 1.0, 0.8);
            baseModelRender.setModelRotate(playerPed, 0, 0, 0, 0);
            baseModelRender.setModelOffset(playerPed, 0, 0.2, -0.15, 0.0)
        end
        local nHatId = baseModelRender.loadSimpleModel("models\\obj84_hat2.dff", "models\\obj84.txd");
        local pHatModel = baseModelRender.getSimpleBaseModel(nHatId)
        if (pHatModel) then
            baseModelRender.addModel(pHatModel, playerPed, 2, 1);
            baseModelRender.setModelScale(playerPed, 1, 0.9, 0.9, 0.9);
            baseModelRender.setModelOffset(playerPed, 1, 0.15, -0.1, 0.0)
        end
        local nLampId = baseModelRender.loadSimpleModel("models\\obj84_lamp.dff", "models\\obj84.txd");
        local pLampModel = baseModelRender.getSimpleBaseModel(nLampId)
        if (pLampModel) then
            baseModelRender.addModel(pLampModel, playerPed, 6, 2);
            baseModelRender.setModelScale(playerPed, 2, 0.9, 0.9, 0.9);
            baseModelRender.setModelRotate(playerPed, 2, -90, 0, 180)
            baseModelRender.setModelOffset(playerPed, 2, 0.2, 0.05, 0.0)
        end
    end)
 
    sampRegisterChatCommand("cleanModels", function()
        baseModelRender.removeAllModels(playerPed)
    end)
    wait(-1)
end
Исходник: https://github.com/xARMORx/BaseModelRender
Автор: @ARMOR

PS: Вообще это будет больше полезно разным проектам со своими лаунчерами, а не для луа, но да и похуй, так же будет полезно для использования с этой библиотекой от @SR_team: https://www.blast.hk/threads/220111/
 

Вложения

  • BaseModelRender.dll
    128.5 KB · Просмотры: 66
Последнее редактирование модератором:

Орк

Известный
394
335
Хотел выпендриться перед бразильцами, но оказывается в клео это придумано уже как 5 лет, гы Screenshot_2025-07-31-15-41-25-650_com.discord.jpg

Перепиши Cleo+ под Lua, как это сделал @FYP MoonAdditions из клео NewOpcodes 🫠
 
  • Нравится
Реакции: minxty и Vespan

ARMOR

Я креветка
Автор темы
Модератор
5,068
7,363
@SR_team Чапо говорил что с этой библиотекой аксессуары от аризоны ренерятся без анимации. Это можно осуществить без эмуляции пакета?
 
Последнее редактирование:

SR_team

like pancake
BH Team
4,913
6,612
@SR_team Чапо говорил что с этой библиотекой аксессуары от аризоны ренерятся без анимации. Это можно осуществить без эмуляции пакета?
Да, надо дернуть проигрывание анимки для клампа или атомика, если речь о UV
 

ARMOR

Я креветка
Автор темы
Модератор
5,068
7,363
Update 02.08.2025:
- Добавил возможность подгружать кастомные модели и рендерить их.

Скриншот на примере аксов аризоны:
1754158114959.png
 
  • Влюблен
  • Нравится
Реакции: Орк и вайега52