Другое SAMPFUNCS | API C++

C&J

Известный
41
22
Здравствуйте,не могли бы вы,описать за что отвечают данный переменные в textdraw,или дать ссылку для прочтение?

struct stTextdraw
{
char szText[800 + 1]; // Вроде как за текст?
char szString[1600 + 2];//Тоже текст
float fLetterWidth;//Размеры?
float fLetterHeight;//Так же размеры
DWORD dwLetterColor;//Цвет
uint8_t byte_unk; // always = 01 (?)
BYTE byteCenter;// ?
BYTE byteBox;// Бокс
float fBoxSizeX;//Размер Бокса по X
float fBoxSizeY;//Размеры Бокса по Y
DWORD dwBoxColor;//Цвет Бокса
BYTE byteProportional;// ?
DWORD dwShadowColor;//Цвет чего-то
BYTE byteShadowSize;//Размер чего-то
BYTE byteOutline;// ?
BYTE byteLeft;//?
BYTE byteRight;//?
int iStyle; // font style/texture/model |Так понял стиль textdraw
float fX;// Позиция чего-то по X?
float fY;//Позиция чего-то по Y
byte unk[8];// ?
DWORD dword99B; // -1 by default ???
DWORD dword99F; // -1 by default ???
DWORD index; // -1 if bad ID textdraw'a?
BYTE byte9A7; // = 1; 0 by default ???
uint16_t sModel; //???
float fRot[3];//???
float fZoom;//???
WORD sColor[2];// Цвет чего-то
BYTE f9BE; //???
BYTE byte9BF;//???
BYTE byte9C0;//???
DWORD dword9C1;//???
DWORD dword9C5;//???
DWORD dword9C9;//???
DWORD dword9CD;//???
BYTE byte9D1;//???
DWORD dword9D2;//???
};
struct stTextdrawPool
{
int iIsListed[SAMP_MAX_TEXTDRAWS]; //Существует ли глобальный textdraw?
int iPlayerTextDraw[SAMP_MAX_PLAYERTEXTDRAWS];//Существует ли textdraw для игрока?
struct stTextdraw *textdraw[SAMP_MAX_TEXTDRAWS];//???
struct stTextdraw *playerTextdraw[SAMP_MAX_PLAYERTEXTDRAWS];//???

};
 
Последнее редактирование модератором:

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Ничего нет. Разберись сам. можешь опкоды СФ для работы с текстдравами заюзать.
 

AWRage

Активный
642
141
struct stTextdraw
{
char szText[800 + 1]; // Вроде как за текст?
char szString[1600 + 2];//Тоже текст
float fLetterWidth; Ширина
float fLetterHeight; Высота
DWORD dwLetterColor;//Цвет
uint8_t byte_unk; // always = 01 (?)
BYTE byteCenter; Выравнивание по центру
BYTE byteBox;// Бокс
float fBoxSizeX;//Размер Бокса по X
float fBoxSizeY;//Размеры Бокса по Y
DWORD dwBoxColor;//Цвет Бокса
BYTE byteProportional;// Пропорциональность, потести, поймешь.
DWORD dwShadowColor;// Цвет тени
BYTE byteShadowSize;//Размер тени
BYTE byteOutline;// Обводка
BYTE byteLeft;// Выравнивание по левому краю
BYTE byteRight;// Выравнивание по правому краю
int iStyle; // font style/texture/model |Так понял стиль textdraw
float fX;// Позиция текстдрава
float fY;//Позиция текстдрава
byte unk[8];// ?
DWORD dword99B; // -1 by default ???
DWORD dword99F; // -1 by default ???
DWORD index; // -1 if bad ID textdraw'a?
BYTE byte9A7; // = 1; 0 by default ???
uint16_t sModel; //???
float fRot[3];//???
float fZoom;//???
WORD sColor[2];// Цвет чего-то
BYTE f9BE; //???
BYTE byte9BF;//???
BYTE byte9C0;//???
DWORD dword9C1;//???
DWORD dword9C5;//???
DWORD dword9C9;//???
DWORD dword9CD;//???
BYTE byte9D1;//???
DWORD dword9D2;//???
};
struct stTextdrawPool
{
int iIsListed[SAMP_MAX_TEXTDRAWS]; //Существует ли глобальный textdraw?
int iPlayerTextDraw[SAMP_MAX_PLAYERTEXTDRAWS];//Существует ли textdraw для игрока?
struct stTextdraw *textdraw[SAMP_MAX_TEXTDRAWS];// массив текстдравов. То есть, можно обращаться к элементам и получать текстдрав по его ID
struct stTextdraw *playerTextdraw[SAMP_MAX_PLAYERTEXTDRAWS];// массив текстдравов игрока ^

};
 

Dimoz

Новичок
98
16
пытаюсь прочитать позицию пикапа с помощью перехвата RPC, но правильно читается только его ID, а всё остальное - нет.
Код:
else if (params->packetId == ScriptRPCEnumeration::RPC_ScrCreatePickup)
    {
        short pickup_id;
        float pos[3];
        int model_id;
        int type;
        params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
        params->bitStream->Read(pickup_id); // читаем отправляемые данные
        params->bitStream->Read(model_id); // читаем отправляемые данные
        params->bitStream->Read(type); // читаем отправляемые данные
        params->bitStream->Read(pos); // читаем отправляемые данные
        params->bitStream->ResetReadPointer(); // снова обнуляем оффсет чтения
        SF->getSAMP()->getChat()->AddChatMessage(-1, "%d %f %f %f", pickup_id, pos[0], pos[1], pos[2]);
  
        return true;
    }

Решил методом тыка.
Код:
params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
        params->bitStream->Read(pickup_id); // читаем отправляемые данные
        params->bitStream->SetReadOffset(96);
        params->bitStream->Read(pos[0]); // читаем отправляемые данные
        params->bitStream->Read(pos[1]); // читаем отправляемые данные
        params->bitStream->Read(pos[2]); // читаем отправляемые данные
        params->bitStream->ResetReadPointer(); // снова обнуляем оффсет чтения
        SF->getSAMP()->getChat()->AddChatMessage(-1, "%d %f %f %f", pickup_id, pos[0], pos[1], pos[2]);
 
Последнее редактирование:

Dark_Knight

Me, me and me.
Друг
4,062
2,077
пытаюсь прочитать позицию пикапа с помощью перехвата RPC, но правильно читается только его ID, а всё остальное - нет.
Код:
else if (params->packetId == ScriptRPCEnumeration::RPC_ScrCreatePickup)
    {
        short pickup_id;
        float pos[3];
        int model_id;
        int type;
        params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
        params->bitStream->Read(pickup_id); // читаем отправляемые данные
        params->bitStream->Read(model_id); // читаем отправляемые данные
        params->bitStream->Read(type); // читаем отправляемые данные
        params->bitStream->Read(pos); // читаем отправляемые данные
        params->bitStream->ResetReadPointer(); // снова обнуляем оффсет чтения
        SF->getSAMP()->getChat()->AddChatMessage(-1, "%d %f %f %f", pickup_id, pos[0], pos[1], pos[2]);
 
        return true;
    }

Решил методом тыка.
Код:
params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
        params->bitStream->Read(pickup_id); // читаем отправляемые данные
        params->bitStream->SetReadOffset(96);
        params->bitStream->Read(pos[0]); // читаем отправляемые данные
        params->bitStream->Read(pos[1]); // читаем отправляемые данные
        params->bitStream->Read(pos[2]); // читаем отправляемые данные
        params->bitStream->ResetReadPointer(); // снова обнуляем оффсет чтения
        SF->getSAMP()->getChat()->AddChatMessage(-1, "%d %f %f %f", pickup_id, pos[0], pos[1], pos[2]);
https://docs.google.com/spreadsheet/ccc?key=0AtKPKl8O9mGodFZESEp6WEdzcTB0U2V1ZkR0UWpub1E#gid=1
 
  • Нравится
Реакции: Dimoz

AWRage

Активный
642
141
Мой хук работает так:
Я хукаю оргинальную функцию Present (или End Scene) моей функцией Present. Когда оригинальная функция Present вызовется игрой, сначала выполнится моя функция, а потом в конце моей функции я вызову стандартную функцию. Но в SFAPI там немного по другому. То есть, оригинальная функция не вызывается ибо в конце функций стоит не return originalPresent(pDevice, ...), а просто return TRUE. Как это работает в SFAPI? Это другой вид хука?
 

AWRage

Активный
642
141
В СФ юзается хук как в собейте. Можешь там глянуть.
Но там тоже в конце выполняется оригинальная функция present.
Код:
HRESULT proxyIDirect3DDevice9::Present ( CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
                                         CONST RGNDATA *pDirtyRegion )
{
    traceLastFunc( "proxyIDirect3DDevice9::Present()" );

    renderHandler();

    // get original function to return
    return origIDirect3DDevice9->Present( pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion );
}
 

SR_team

like pancake
BH Team
4,720
6,369
А в SFAPI функция просто возвращает TRUE. То есть, оригинальная функция не вызывается. Почему так?
плагинов может быть over9000, а хуков столько не надо. Сам хук находится в СФ и он вызывает стандартную функцию в конце, а в теле хука опрашивает функции в плагинах и рисует чот свое.
 
  • Нравится
Реакции: AWRage

Tray228

Новичок
218
27
можно ли получить ники игроков которые поменяли со старого на новый