Другое С/С++ Вопрос - Ответ

Nerry12345

Новичок
1
0
Как получить пакет SyncPlayerData именно локал игрока и как получить игрока по айди?
 

ARMOR

Мне кажется, я всё проебал
Модератор
5,018
7,060
Вопрос 1: как заменить FindPlayerVehicle в коде ниже используя только sampapi
Вопрос 2: как с помощью sampapi узнать айди скина на игроке
Код:
CVehicle* car = FindPlayerVehicle(0, false);
if (!car)
return "no-data";
return to_string(car->m_nCurrentGear);
Ты где в самп апи нашёл функции и поля классов из ПСДК?
 

marqusss_

Новичок
3
0
Лад а на 2 вопрос хоть ответ можно?
как с помощью sampapi узнать айди скина на игроке

как с помощью sampapi узнать айди скина на игроке(при спавне)
Ответ:
namespace samp = sampapi::v037r3; - либо ваша версия

samp::RefNetGame()->GetPlayerPool()->GetLocalPlayer()->m_spawnInfo.m_nSkin
 
Последнее редактирование:

#r666

Известный
11
0
Добавил кастомную машину в игру с помощью FLA, пропатчил клиент и сервер, все окей, синхронизация имеется.

Но вот незадача, пытаюсь вывести TextDrawSetPreviewModel с новой машиной и пустота...
Как с этим бороться ?
 

ARMOR

Мне кажется, я всё проебал
Модератор
5,018
7,060
Добавил кастомную машину в игру с помощью FLA, пропатчил клиент и сервер, все окей, синхронизация имеется.

Но вот незадача, пытаюсь вывести TextDrawSetPreviewModel с новой машиной и пустота...
Как с этим бороться ?
Патчил добавление моделей на текстдравы? Вот например у транспорта проверка на модель
1737603047015.png
1737602989060.png
 
  • Нравится
Реакции: sizeoftrickster

whyega52

Eblang головного мозга
Модератор
2,825
2,725

#r666

Известный
11
0
Патчил добавление моделей на текстдравы? Вот например у транспорта проверка на модель Посмотреть вложение 262310Посмотреть вложение 262309
Нет, не патчил. Подскажите адрес памяти для r3?
В целом с тяжестью нахожу какие-то куски, реверся samp.dll через IDA PRO, возможно есть какие-то более внятные источники, где можно посмотреть код сампа.
В идеале конечно узнать, откуда Ваш скрин взят)
 
Последнее редактирование:

AdCKuY_DpO4uLa

Адский дрочер
Друг
333
727
Нет, не патчил. Подскажите адрес памяти для r3?
В целом с тяжестью нахожу какие-то куски, реверся samp.dll через IDA PRO, возможно есть какие-то более внятные источники, где можно посмотреть код сампа.
В идеале конечно узнать, откуда Ваш скрин взят)
 

#r666

Известный
11
0
1737653064389.png

У меня это выглядит подобным образом(не так подробно, как у парня сверху). Я пропатчил адрес, заменив числа 263u на те, что мне нужны, но эффекта по прежнему 0. Что делаю не так?

1737653064389.png

У меня это выглядит подобным образом(не так подробно, как у парня сверху). Я пропатчил адрес, заменив числа 263u на те, что мне нужны, но эффекта по прежнему 0. Что делаю не так?
Удалось всё таки пропатчить, патчил не то место. Но вопрос остаётся актуальным, у меня часть в псевдокоде нормально выглядит, а часть подобным образом. Может я как-то не так открываю idb? Хотелось бы, чтобы было как у ARMOR
 
Последнее редактирование:

ARMOR

Мне кажется, я всё проебал
Модератор
5,018
7,060
Удалось всё таки пропатчить, патчил не то место. Но вопрос остаётся актуальным, у меня часть в псевдокоде нормально выглядит, а часть подобным образом. Может я как-то не так открываю idb? Хотелось бы, чтобы было как у ARMOR
Потому что в большинстве случаев я использую свою базу для 0.3.DL которую делал сам на основе баз от #Northn и допиливал нужные части сам. Тебе нужно:
1. Изменить проверки которые как либо проверяют модели игры
2. Изменить указатель CModelInfo::ms_aModelsInfoPtrs на указатель от FLA в функции GetModelInfoPtr
 

thelupa1488

Новичок
11
3
Здарова, хочу сделать рендер руды (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;
    }
 
Последнее редактирование:

whyega52

Eblang головного мозга
Модератор
2,825
2,725
Здарова, хочу сделать рендер руды (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
 
  • Нравится
Реакции: thelupa1488