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

Cake_

Потрачен
Проверенный
263
313
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
  • Нравится
Реакции: Imbecil

Imbecil

Новичок
15
0
C++:
SF->getSAMP()->getInfo()->pPools->pTextdraw->textdraw[ID texdraw]->szText
SF->getSAMP()->getInfo()->pPools->pTextdraw->textdraw[ID texdraw]->szString
Легко
спасибо. а еще можешь подсказать, пожалуйста, как получить список всех тектдравов и как узнать что мне нарисовало эту таблицу, как это хукать?
 

Imbecil

Новичок
15
0
В смысле список?? Конкретнее. Что ты подразумеваешь под хуком? Клик его? Есть два варианта:
1.
C++:
                SF->getSAMP()->sendClickTextDraw();
2.

ClickTextdraw // rpc

Чтобы получить информацию с текстдрава
1.
ShowTextDraw
ну список всех которые сейчас присутствуют у меня на экране. под хуком подразумеваю типо сервер отправляет мне текстдравы, в плагине это узнаю сразу и пишу в чат, например.
 

Imbecil

Новичок
15
0
upload_2019-5-13_16-22-26.png
Почему если пытаюсь получить index сразу крашит? и почему szString всегда одинаковый пишет, какое то не понятное число?
 

Неадекватная сова

Известный
Проверенный
208
147
Посмотреть вложение 29906
Почему если пытаюсь получить index сразу крашит? и почему szString всегда одинаковый пишет, какое то не понятное число?
Потому что читаешь не правильно:
Код:
ShowTextDraw - ID: 134
Parameters: UINT16 wTextDrawID, UINT8 Flags, float fLetterWidth, float fLetterHeight, UINT32 dwLetterColor, float fLineWidth, float fLineHeight, UINT32 dwBoxColor, UINT8 Shadow, UINT8 Outline, UINT32 dwBackgroundColor, UINT8 Style, UINT8 Selectable, float fX, float fY, UINT16 wModelID, float fRotX, float fRotY, float fRotZ, float fZoom, UINT16 wColor1, UINT16 wColor2, UINT8 szTextLen, char[] szText
 

Imbecil

Новичок
15
0
Потому что читаешь не правильно:
Код:
ShowTextDraw - ID: 134
Parameters: UINT16 wTextDrawID, UINT8 Flags, float fLetterWidth, float fLetterHeight, UINT32 dwLetterColor, float fLineWidth, float fLineHeight, UINT32 dwBoxColor, UINT8 Shadow, UINT8 Outline, UINT32 dwBackgroundColor, UINT8 Style, UINT8 Selectable, float fX, float fY, UINT16 wModelID, float fRotX, float fRotY, float fRotZ, float fZoom, UINT16 wColor1, UINT16 wColor2, UINT8 szTextLen, char[] szText
из-за id все равно крашит, а текст все тот же пишет
upload_2019-5-13_17-52-1.png
 

Cake_

Потрачен
Проверенный
263
313
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Посмотреть вложение 29906
Почему если пытаюсь получить index сразу крашит? и почему szString всегда одинаковый пишет, какое то не понятное число?
Facepalm... Нужно читать textdraw id. Textdraw data, len textdraw, text textdrawa, в конце обязательно очисти мусор в строке. Я не за компом , так бы написал код. Я думаю , разберёшься сам


а как надо? я из примера брал
Длину текста нужно читать перед текстом

Facepalm... Нужно читать textdraw id. Textdraw data, len textdraw, text textdrawa, в конце обязательно очисти мусор в строке. Я не за компом , так бы написал код. Я думаю , разберёшься сам


Длину текста нужно читать перед текстом
!отдельно!
 
  • Нравится
Реакции: Imbecil

SAMP.ASI

Известный
223
53
Хочу получить ники всех игроков на сервере.
C++:
int main() {
   DWORD pID;
   char moduleName[] = "samp.dll";

   HWND hGameWindow = FindWindow(NULL, L"GTA:SA:MP");
   GetWindowThreadProcessId(hGameWindow, &pID);
   HANDLE pGta = OpenProcess(PROCESS_VM_READ, FALSE, pID);
   DWORD pSamp = GetModuleBaseAddress(pID, L"samp.dll");
   
   cout << "samp.dll addr: " << hex << pSamp << endl;

   char nickname[24] = { " " };
   ReadProcessMemory(pGta, (LPCVOID)(pSamp + OFFSET_NICKNAME), &nickname, sizeof(nickname), NULL);

   DWORD dwAddress;
   ReadProcessMemory(pGta, (LPCVOID)(pSamp + 0x21A0F8), &dwAddress, 4, 0);
   cout << "dwAdress : " << dwAddress << endl;

   ReadProcessMemory(pGta, (LPCVOID)(dwAddress + 0x3CD), &dwAddress, 4, 0);
   cout << "dwAdres : " << dwAddress << endl;

   DWORD dwPlayers;
   ReadProcessMemory(pGta, (LPCVOID)(dwAddress + 0x18), &dwPlayers, 4, 0); //stPlayerPool
   cout << "dwPlayers : " << dwPlayers << endl;

   cout << endl << endl;

   uint32_t ulMaxPlayerID;
   ReadProcessMemory(pGta, (LPCVOID)(dwPlayers), &ulMaxPlayerID, sizeof(uint32_t), 0); //ulMaxPlayerID
   cout << "ulMaxPlayerID : " << ulMaxPlayerID << endl;

   uint16_t sLocalPlayerID;
   ReadProcessMemory(pGta, (LPCVOID)(dwPlayers + sizeof(uint32_t)), &sLocalPlayerID, sizeof(uint16_t), 0); //sLocalPlayerID
   cout << "sLocalPlayerID : " << sLocalPlayerID << endl;

   //0x2a

   stRemotePlayer* pRemotePlayer[SAMP_MAX_PLAYERS];
   ReadProcessMemory(pGta, (LPCVOID)(dwPlayers + 0x2a), &pRemotePlayer, 4, 0);
   cout << "pRemotePlayer : " << pRemotePlayer << endl;
   cout << "nick : " << pRemotePlayer[5]->strPlayerName << endl;
}

Но получаю либо кашу либо краш.
 

Imbecil

Новичок
15
0
Facepalm... Нужно читать textdraw id. Textdraw data, len textdraw, text textdrawa, в конце обязательно очисти мусор в строке. Я не за компом , так бы написал код. Я думаю , разберёшься сам


Длину текста нужно читать перед текстом


!отдельно!
а как? напиши, пожалуйста, а то я дурачек
 

Cake_

Потрачен
Проверенный
263
313
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а как? напиши, пожалуйста, а то я дурачек
Попробуй просто длину текста читать отдельно

Попробуй просто длину текста читать отдельно
Дату текстдрава вроде не обязательно читать

Попробуй просто длину текста читать отдельно


Дату текстдрава вроде не обязательно читать
И используй 256 элементов в массиве , на всякий случай
 
  • Нравится
Реакции: Imbecil

astap_

Известный
Всефорумный модератор
626
601
а как? напиши, пожалуйста, а то я дурачек
Код:
bool CALLBACK incomingRPC(stRakNetHookParams *params)
{
    if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowTextDraw)
    {
        stTextDrawTransmit txd;
       
        WORD txdID, cTextLen; char cText[800];
        params->bitStream->ResetReadPointer();
        params->bitStream->Read(txdID);
        params->bitStream->Read((PCHAR)&txd, sizeof(stTextDrawTransmit));
        params->bitStream->Read(cTextLen);
        params->bitStream->Read(cText, cTextLen);
        params->bitStream->ResetReadPointer();
        cText[cTextLen] = '\0';

        SF->getSAMP()->getChat()->AddChatMessage(-1, "Получен текстдрав (%i) с текстом: %s", txdID, cText);
    }
    return true;
};
 
  • Нравится
Реакции: Imbecil