Изменение текстуры локального объекта

Tema05

Известный
Автор темы
1,443
403
Версия MoonLoader
.026-beta
Ищу способ поменять текстуру у локально созданного объекта при помощи `createObject`.
С получение и заменой модели я разобрался. оффсет 0x22. Предполагаю что эти оффсеты можно взять отсюда https://github.com/BlastHackNet/SAMP-API/blob/multiver/include/sampapi/0.3.7-R3-1/CObject.h но не совсем представляю как можно обратиться именно к текстуре.
Lua:
function onReceiveRpc(id, bs) --onCreateObject
    if id == 44 then
        local objectId = raknetBitStreamReadInt16(bs)
        lua_thread.create(function(objectId)
            wait(0)
            local handle = sampGetObjectHandleBySampId(objectId)
            local struct = getObjectPointer(handle)
            print(getObjectModel(handle), memory.getuint32(struct + 0x22, true))
        end, objectId)
    end
end
Далее я нашёл библиотеку SAMemory и написал это:
Lua:
local samem = require 'SAMemory'
samem.require 'CPool'
samem.require 'CObject'

local font = renderCreateFont('Verdana', 5, 9)

while true do
    wait(0)

    local pool = samem.object_pool[0]
    if pool ~= samem.nullptr then
        for slot, obj in pool('CObject') do
            local pos = obj.pMatrix.pos
            local x, y = convert3DCoordsToScreen(pos.x, pos.y, pos.z)
            if isPointOnScreen(pos.x, pos.y, pos.z) then
                renderFontDrawText(font, ('#%d. posn: %f, %f, %f'):format(slot, pos.x, pos.y, pos.z), x, y, -1, true)
            end
        end
    end
end
Но как я понял это структура обычного объекта, отличного от samp'а и там нет параметра текстуры https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CObject.h

Думаю что первый вариант наиболее походящий. Пока что не знаю как его развивать.
 

ARMOR

kjor32 is legend
Модератор
4,853
6,094
Тебе нужно скорее всего использовать метод
C++:
void  SetMaterial(int nModel, int nIndex, const char* szTxd, const char* szTexture, D3DCOLOR color);
Чтобы установить текстуру.

Вот я например с помощью SAMP-API изменил текстуру билдборда на текстуру фиста.
Без імені.png
 
Последнее редактирование:
  • Нравится
Реакции: why ega

Tema05

Известный
Автор темы
1,443
403
Тебе нужно скорее всего использовать метод
C++:
void  SetMaterial(int nModel, int nIndex, const char* szTxd, const char* szTexture, D3DCOLOR color);
Чтобы установить текстуру.

Вот я например с помощью SAMP-API изменил текстуру билдборда на текстуру фиста.
Посмотреть вложение 207427
Я думал об использовании samp-api, но он не подходит так как обращаться к объекту нужно по id, которого нет у локально создаваемых объектов при помощи createObject. Создавать "samp" объекты не вариант так как там есть ограничение на количество в 1000 штук. Прошу поправить если не прав.
 

ARMOR

kjor32 is legend
Модератор
4,853
6,094
Я думал об использовании samp-api, но он не подходит так как обращаться к объекту нужно по id, которого нет у локально создаваемых объектов при помощи createObject. Создавать "samp" объекты не вариант так как там есть ограничение на количество в 1000 штук. Прошу поправить если не прав.
Значит ГТАшный CObject::SetRemapTexture юзай.
 

ARMOR

kjor32 is legend
Модератор
4,853
6,094

Tema05

Известный
Автор темы
1,443
403

Ignat56

Новичок
3
0
Не мог бы ты подсказать код, которым у тебя это получилось сделать?

Пробую так:
static samp::CObject* object;
object = refGame->CreateObject(936, sampapi::CVector(0.0f, 0.0f, 3.0f), sampapi::CVector(0.0f, 0.0f, 0.0f), 50.0f);
object->SetMaterial(18031, 0, "cj_exp", "mp_cloth_wall", 0xFFFF4500);
object->SetMaterial(18031, 1, "cj_exp", "mp_cloth_wall", 0xFFFF8C00);

Объект создаётся, но текстура не меняется. Версия samp 037 R1

@ARMOR
 
Последнее редактирование: