- 211
- 126
Подскажите как получить материал объекта.
Я хочу парсить материалы с объектов лаунчера, она туда не от сервера приходят, а храняться в файлах(в .bin точно есть, через блокнот смотрел, но там скомпилированная часть ещё мешает)...
Пробовал через это https://www.blast.hk/threads/204683/ , но там через раз материалы показывает, либо ошибку выдает на получение с пула ...
указывает на ошибку в строке
local textureName = ffi.string(sprite.m_pTexture.name)
Я хочу парсить материалы с объектов лаунчера, она туда не от сервера приходят, а храняться в файлах(в .bin точно есть, через блокнот смотрел, но там скомпилированная часть ещё мешает)...
Пробовал через это https://www.blast.hk/threads/204683/ , но там через раз материалы показывает, либо ошибку выдает на получение с пула ...
указывает на ошибку в строке
local textureName = ffi.string(sprite.m_pTexture.name)
Lua:
local samp = sampGetBase()
ffi.cdef([[
typedef unsigned long D3DCOLOR;
typedef int BOOL;
typedef unsigned short ID;
struct RwLLLink {
struct RwLLLink *next;
struct RwLLLink *prev;
};
typedef struct RwTexture RwTexture;
struct RwTexture {
void *raster;
void *dict;
struct RwLLLink lInDictionary;
char name[32];
char mask[32];
unsigned filterAddressing;
int refCount;
};
struct CSprite2d {
RwTexture *m_pTexture;
};
typedef struct CVector {
float x, y, z;
} CVector;
typedef struct CMatrix {
CVector right, up, at, pos;
} CMatrix;
typedef struct ObjectMaterialText {
char m_nMaterialIndex;
char pad_0[137];
char m_nMaterialSize;
char m_szFont[65];
char m_nFontSize;
BOOL m_bBold;
D3DCOLOR m_fontColor;
D3DCOLOR m_backgroundColor;
char m_align;
} ObjectMaterialText;
typedef struct ObjectMaterial {
union {
struct CSprite2d* m_pSprite[16];
struct RwTexture* m_pTextBackground[16];
};
D3DCOLOR m_color[16];
char pad_6[68];
int m_nType[16];
BOOL m_bTextureWasCreated[16];
ObjectMaterialText m_textInfo[16];
char* m_szText[16];
void* m_pBackgroundTexture[16]; // IDirect3DTexture9*
void* m_pTexture[16]; // IDirect3DTexture9*
} ObjectMaterial;
typedef struct CObject CObject;
struct CObject {
char pad_0[6];
int m_nModel;
char pad_1;
BOOL m_bDontCollideWithCamera;
float m_fDrawDistance;
float field_0;
CVector m_position;
float m_fDistanceToCamera;
BOOL m_bDrawLast;
char pad_2[64];
CVector m_rotation;
char pad_3[5];
ID m_nAttachedToVehicle;
ID m_nAttachedToObject;
CVector m_attachOffset;
CVector m_attachRotation;
BOOL m_bSyncRotation;
CMatrix m_targetMatrix;
char pad_4[148];
char m_bMoving;
float m_fSpeed;
char pad_5[99];
ObjectMaterial m_material;
BOOL m_bHasCustomMaterial;
char pad_9[13];
};
]])
local CObjectPool = ffi.cast('int(__thiscall*)(void*)', samp + 0x2DF0)
local CObject = ffi.cast('CObject*(__thiscall*)(void*, int)', samp + 0x2DC0)
function getObjectMaterialTexture(objectId)
local CNetGame = ffi.cast('uintptr_t*', samp + 0x26E8DC)
local objectPool = CObjectPool(ffi.cast('void*', CNetGame[0]))
local cobject = CObject(ffi.cast('void*', objectPool), tonumber(objectId))
if cobject ~= nil and cobject.m_material.m_pSprite ~= nil then
for i = 0, 15 do
local sprite = cobject.m_material.m_pSprite[i]
if sprite ~= nil and sprite.m_pTexture ~= nil and sprite.m_pTexture.name ~= nil then
local textureName = ffi.string(sprite.m_pTexture.name)
print("Texture name " .. objectId .. ": " .. textureName)
return textureName
end
end
end
return nil
end
Последнее редактирование: