Nerry12345
Новичок
- 1
- 0
Ты где в самп апи нашёл функции и поля классов из ПСДК?Вопрос 1: как заменить FindPlayerVehicle в коде ниже используя только sampapi
Вопрос 2: как с помощью sampapi узнать айди скина на игроке
Код:
CVehicle* car = FindPlayerVehicle(0, false);
if (!car)
return "no-data";
return to_string(car->m_nCurrentGear);
Патчил добавление моделей на текстдравы? Вот например у транспорта проверка на модельДобавил кастомную машину в игру с помощью FLA, пропатчил клиент и сервер, все окей, синхронизация имеется.
Но вот незадача, пытаюсь вывести TextDrawSetPreviewModel с новой машиной и пустота...
Как с этим бороться ?
Это надо правильно патчить, чтобы нормальные текстдравы не крашилиПатчил добавление моделей на текстдравы? Вот например у транспорта проверка на модель Посмотреть вложение 262310Посмотреть вложение 262309
Нет, не патчил. Подскажите адрес памяти для r3?Патчил добавление моделей на текстдравы? Вот например у транспорта проверка на модель Посмотреть вложение 262310Посмотреть вложение 262309
Нет, не патчил. Подскажите адрес памяти для r3?
В целом с тяжестью нахожу какие-то куски, реверся samp.dll через IDA PRO, возможно есть какие-то более внятные источники, где можно посмотреть код сампа.
В идеале конечно узнать, откуда Ваш скрин взят)
![]()
GitHub - Northn/SAMP_IDBs
Contribute to Northn/SAMP_IDBs development by creating an account on GitHub.github.com
Удалось всё таки пропатчить, патчил не то место. Но вопрос остаётся актуальным, у меня часть в псевдокоде нормально выглядит, а часть подобным образом. Может я как-то не так открываю idb? Хотелось бы, чтобы было как у ARMOR![]()
У меня это выглядит подобным образом(не так подробно, как у парня сверху). Я пропатчил адрес, заменив числа 263u на те, что мне нужны, но эффекта по прежнему 0. Что делаю не так?
Потому что в большинстве случаев я использую свою базу для 0.3.DL которую делал сам на основе баз от #Northn и допиливал нужные части сам. Тебе нужно:Удалось всё таки пропатчить, патчил не то место. Но вопрос остаётся актуальным, у меня часть в псевдокоде нормально выглядит, а часть подобным образом. Может я как-то не так открываю idb? Хотелось бы, чтобы было как у ARMOR
Подскажешь адрес для R3 или хотя бы как в реверсе этот участок выглядит? Я постараюсь найти аналогичным образом, как и с твоим скрином вышеCModelInfo::ms_aModelsInfoPtrs
enum Limits
{
SAMP_MAX_ACTORS = 1000,
SAMP_MAX_PLAYERS = 1004,
SAMP_MAX_VEHICLES = 2000,
SAMP_MAX_PICKUPS = 4096,
SAMP_MAX_OBJECTS = 1000,
SAMP_MAX_GANGZONES = 1024,
SAMP_MAX_3DTEXTS = 2048,
SAMP_MAX_TEXTDRAWS = 2048,
SAMP_MAX_PLAYERTEXTDRAWS = 256,
SAMP_MAX_CLIENTCMDS = 144,
SAMP_MAX_MENUS = 128,
SAMP_MAX_PLAYER_NAME = 24,
SAMP_ALLOWED_PLAYER_NAME_LENGTH = 20,
SAMP_MAX_MAPICONS = 100,
};
struct stObject {
char pad_0[6];
int m_nModel;
char pad_1;
bool m_bDontCollideWithCamera;
float m_fDrawDistance;
float field_0;
float m_position[3];
float m_fDistanceToCamera;
bool m_bDrawLast;
char pad_2[64];
float m_rotation[3];
char pad_3[5];
unsigned short m_nAttachedToVehicle;
unsigned short m_nAttachedToObject;
float m_attachOffset[3];
float m_attachRotation[3];
char field_1;
float m_targetMatrix[4][4];
char pad_4[148];
char m_bMoving;
float m_fSpeed;
char pad_5[99];
};
struct stObjectPool
{
int m_nLargestId;
BOOL m_bNotEmpty[SAMP_MAX_OBJECTS];
stObject* m_pObject[SAMP_MAX_OBJECTS];
};
uint32_t dwSAMPModule = pGTA->get_module_address("azmp.dll");
uint32_t dwSampInfo = pGTA->read<uint32_t>(dwSAMPModule + 0x26E8DC);
uint32_t dwPools = pGTA->read<uint32_t>(dwSampInfo + 0x3DE);
uint32_t dwObjects = pGTA->read<uint32_t>(dwPools + 0x14);
stObjectPool m_Object = pGTA->read<stObjectPool>(dwObjects);
for (int i = 0; i < SAMP_MAX_OBJECTS; ++i) {
if (!m_Object.m_bNotEmpty[i]) continue;
uint32_t dwObj = (uint32_t)m_Object.m_pObject[i];
stObject obj = pGTA->read<stObject>(dwObj);
int iModel = obj.m_nModel;
}
используй sampapiЗдарова, хочу сделать рендер руды (external) на амайзинге samp R3, но не могу правильно получить адрес объекта
Структуры:enum Limits { SAMP_MAX_ACTORS = 1000, SAMP_MAX_PLAYERS = 1004, SAMP_MAX_VEHICLES = 2000, SAMP_MAX_PICKUPS = 4096, SAMP_MAX_OBJECTS = 1000, SAMP_MAX_GANGZONES = 1024, SAMP_MAX_3DTEXTS = 2048, SAMP_MAX_TEXTDRAWS = 2048, SAMP_MAX_PLAYERTEXTDRAWS = 256, SAMP_MAX_CLIENTCMDS = 144, SAMP_MAX_MENUS = 128, SAMP_MAX_PLAYER_NAME = 24, SAMP_ALLOWED_PLAYER_NAME_LENGTH = 20, SAMP_MAX_MAPICONS = 100, }; struct stObject { char pad_0[6]; int m_nModel; char pad_1; bool m_bDontCollideWithCamera; float m_fDrawDistance; float field_0; float m_position[3]; float m_fDistanceToCamera; bool m_bDrawLast; char pad_2[64]; float m_rotation[3]; char pad_3[5]; unsigned short m_nAttachedToVehicle; unsigned short m_nAttachedToObject; float m_attachOffset[3]; float m_attachRotation[3]; char field_1; float m_targetMatrix[4][4]; char pad_4[148]; char m_bMoving; float m_fSpeed; char pad_5[99]; }; struct stObjectPool { int m_nLargestId; BOOL m_bNotEmpty[SAMP_MAX_OBJECTS]; stObject* m_pObject[SAMP_MAX_OBJECTS]; };
Получение объекта:uint32_t dwSAMPModule = pGTA->get_module_address("azmp.dll"); uint32_t dwSampInfo = pGTA->read<uint32_t>(dwSAMPModule + 0x26E8DC); uint32_t dwPools = pGTA->read<uint32_t>(dwSampInfo + 0x3DE); uint32_t dwObjects = pGTA->read<uint32_t>(dwPools + 0x14); stObjectPool m_Object = pGTA->read<stObjectPool>(dwObjects); for (int i = 0; i < SAMP_MAX_OBJECTS; ++i) { if (!m_Object.m_bNotEmpty[i]) continue; uint32_t dwObj = (uint32_t)m_Object.m_pObject[i]; stObject obj = pGTA->read<stObject>(dwObj); int iModel = obj.m_nModel; }
Спасибо, я решил использовать поиск объектов из гта, а не сампа, так что вопрос отпалиспользуй sampapi