HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 22.04.2016, 20:05
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

Ничего нет. Разберись сам. можешь опкоды СФ для работы с текстдравами заюзать.
 
Ответить с цитированием

  #2  
Старый 22.04.2016, 22:06
AWRage
Постоянный
Регистрация: 10.07.2015
Сообщений: 642
С нами: 5706781

Репутация: 43


По умолчанию

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];// массив текстдравов игрока ^

};
 
Ответить с цитированием

  #3  
Старый 23.04.2016, 12:05
dimoz
Новичок
Регистрация: 13.12.2020
Сообщений: 0
С нами: 2851002

Репутация: 0
По умолчанию

пытаюсь прочитать позицию пикапа с помощью перехвата 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]);
 
Ответить с цитированием

  #4  
Старый 23.04.2016, 15:41
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

Цитата:
Сообщение от Dimoz  

пытаюсь прочитать позицию пикапа с помощью перехвата 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=0AtKPKl8O9mGodFZESEp6WEdzcTB0U2V1ZkR0UWpub 1E#gid=1
 
Ответить с цитированием

  #5  
Старый 23.04.2016, 16:03
AWRage
Постоянный
Регистрация: 10.07.2015
Сообщений: 642
С нами: 5706781

Репутация: 43


По умолчанию

Мой хук работает так:

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

  #6  
Старый 23.04.2016, 16:21
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

В СФ юзается хук как в собейте. Можешь там глянуть.
 
Ответить с цитированием

  #7  
Старый 23.04.2016, 21:53
AWRage
Постоянный
Регистрация: 10.07.2015
Сообщений: 642
С нами: 5706781

Репутация: 43


По умолчанию

Цитата:
Сообщение от Dark_Knight  

В СФ юзается хук как в собейте. Можешь там глянуть.
Но там тоже в конце выполняется оригинальная функция 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 );
}
 
Ответить с цитированием

  #8  
Старый 23.04.2016, 22:06
Dark_Knight
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами: 6921957

Репутация: 183


По умолчанию

И?
 
Ответить с цитированием

  #9  
Старый 23.04.2016, 23:06
AWRage
Постоянный
Регистрация: 10.07.2015
Сообщений: 642
С нами: 5706781

Репутация: 43


По умолчанию

Цитата:
Сообщение от Dark_Knight  

И?
А в SFAPI функция просто возвращает TRUE. То есть, оригинальная функция не вызывается. Почему так?
 
Ответить с цитированием

  #10  
Старый 24.04.2016, 15:31
SR_team
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами: 6603505

Репутация: 183


По умолчанию

Цитата:
Сообщение от AWRage  

А в SFAPI функция просто возвращает TRUE. То есть, оригинальная функция не вызывается. Почему так?
плагинов может быть over9000, а хуков столько не надо. Сам хук находится в СФ и он вызывает стандартную функцию в конце, а в теле хука опрашивает функции в плагинах и рисует чот свое.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Внести депозит

Введите сумму USDT:

Принимается только USDT TRC20. Fake/Flash USDT не засчитывается.

×

Вывести депозит

Сумма USDT:

Ваш USDT TRC20 кошелек:

Заявка будет отправлена администратору.