[Вопрос][API SF] Чат

Статус
В этой теме нельзя размещать новые ответы.

Revalto

Известный
Автор темы
531
225
Кто может подсказать как считывать строку с чата?
Если он допустим видит строку в чате нажмет на кнопку...
 

Alfinity

Известный
94
53
C++:
if (params->packetId == RPC_ScrClientMessage)
        {
            DWORD chatLen, color;
            char text[144];
            params->bitStream->ResetReadPointer();
            params->bitStream->Read(color);
            params->bitStream->Read(chatLen);
            params->bitStream->Read(text, chatLen);
            text[chatLen] = '\0';

           // Тут действие с текстом

              params->bitStream->ResetWritePointer();
              params->bitStream->Write(color);
              params->bitStream->Write(strlen(text));
              params->bitStream->Write(text, strlen(text));
            }
            return true;
        }
C++:
if (params->packetId == RPC_ScrClientMessage)
        {
            DWORD chatLen, color;
            char text[144];
            params->bitStream->ResetReadPointer();
            params->bitStream->Read(color);
            params->bitStream->Read(chatLen);
            params->bitStream->Read(text, chatLen);
            text[chatLen] = '\0';

           // Тут действие с текстом
            }
            return true;
        }
Подробнее: tutorials - api_lesson_raknet | BlastHack — DEV_WIKI (https://blast.hk/wiki/tutorials:api_lesson_raknet)
 
  • Нравится
Реакции: Gunirs и Revalto

Revalto

Известный
Автор темы
531
225
C++:
if (params->packetId == RPC_ScrClientMessage)
        {
            DWORD chatLen, color;
            char text[144];
            params->bitStream->ResetReadPointer();
            params->bitStream->Read(color);
            params->bitStream->Read(chatLen);
            params->bitStream->Read(text, chatLen);
            text[chatLen] = '\0';

           // Тут действие с текстом

              params->bitStream->ResetWritePointer();
              params->bitStream->Write(color);
              params->bitStream->Write(strlen(text));
              params->bitStream->Write(text, strlen(text));
            }
            return true;
        }
C++:
if (params->packetId == RPC_ScrClientMessage)
        {
            DWORD chatLen, color;
            char text[144];
            params->bitStream->ResetReadPointer();
            params->bitStream->Read(color);
            params->bitStream->Read(chatLen);
            params->bitStream->Read(text, chatLen);
            text[chatLen] = '\0';

           // Тут действие с текстом
            }
            return true;
        }
Подробнее: tutorials - api_lesson_raknet | BlastHack — DEV_WIKI (https://blast.hk/wiki/tutorials:api_lesson_raknet)
И как допустим произвести действие нажатия клавиши F
Если он увидит допустим текст "Садись"
 

ЯedЯuM

Malware Maker
242
302
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
И как допустим произвести действие нажатия клавиши F
Если он увидит допустим текст "Садись"
C++:
bool IsDigited = false; // в начале плагина
bool __stdcall Hook(stRakNetHookParams *hook)
{
    if (hook->packetId == RPC_ScrClientMessage)
    {
        DWORD color, strLen; char msg[256];
        hook->bitStream->ResetReadPointer();
        hook->bitStream->Read(color);
        hook->bitStream->Read(strLen);
        hook->bitStream->Read(msg, strLen);
        hook->bitStream->ResetReadPointer();
        char *ptr = strstr(msg, "Садись уебок");
        if (ptr != nullptr) IsDigited = true;
    }
}
void __stdcall mainloop( void )
{
    static bool init = false;
    if( !init )
    {
        if (GAME == nullptr) return;
        if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME) return;
        if(!SF->getSAMP()->IsInitialized()) return;
        SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, Hook);
        init = true;
    }
    else
    {
        if (SF->getGame()->isKeyPressed(70) && isDigited)
        {
            isDigited = false;
            // действие
        }
    }
}
Воздержись от удовольствия выразить свою благодарность.
 
Последнее редактирование:
  • Нравится
Реакции: Gunirs и Revalto

MISTER_GONWIK

Всефорумный гонщик
Всефорумный модератор
1,262
1,752
C++:
bool IsDigited = false; // в начале плагина
bool __stdcall Hook(stRakNetHookParams *hook)
{
    if (hook->packetId == RPC_ScrClientMessage)
    {
        DWORD color, strLen; char msg[256];
        hook->bitStream->ResetReadPointer();
        hook->bitStream->Read(color);
        hook->bitStream->Read(strLen);
        hook->bitStream->Read(msg, strLen);
        hook->bitStream->ResetReadPointer();
        char *ptr = strstr(msg, "Садись уебок");
        if (ptr != nullptr) IsDigited = true;
    }
}
void __stdcall mainloop( void )
{
    static bool init = false;
    if( !init )
    {
        if (GAME == nullptr) return;
        if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME) return;
        if(!SF->getSAMP()->IsInitialized()) return;
        SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, Hook);
        init = true;
    }
    else
    {
        if (SF->getGame()->isKeyPressed(70) && isDigited)
        {
            isDigited = false;
            // действие
        }
    }
}
Воздержись от удовольствия выразить свою благодарность.

для чего там
C++:
SF->getGame()->isKeyPressed(70)
?
 

Revalto

Известный
Автор темы
531
225
upload_2017-9-11_11-48-47.png

Вылазит такая ошибка...
 
Статус
В этой теме нельзя размещать новые ответы.