как?Нужно читать текст в текстдраве я предполагаю
как?Нужно читать текст в текстдраве я предполагаю
SF->getSAMP()->getInfo()->pPools->pTextdraw->textdraw[ID texdraw]->szText
SF->getSAMP()->getInfo()->pPools->pTextdraw->textdraw[ID texdraw]->szString
спасибо. а еще можешь подсказать, пожалуйста, как получить список всех тектдравов и как узнать что мне нарисовало эту таблицу, как это хукать?ЛегкоC++:SF->getSAMP()->getInfo()->pPools->pTextdraw->textdraw[ID texdraw]->szText SF->getSAMP()->getInfo()->pPools->pTextdraw->textdraw[ID texdraw]->szString
В самом начале тебя ввели в заблуждение.error C2440: reinterpret_cast: невозможно преобразовать "CVector" в "float"
CVector pos;
pos.fX;
pos.fY;
pos.fZ;
ну список всех которые сейчас присутствуют у меня на экране. под хуком подразумеваю типо сервер отправляет мне текстдравы, в плагине это узнаю сразу и пишу в чат, например.В смысле список?? Конкретнее. Что ты подразумеваешь под хуком? Клик его? Есть два варианта:
1.
2.C++:SF->getSAMP()->sendClickTextDraw();
ClickTextdraw // rpc
Чтобы получить информацию с текстдрава
1.
ShowTextDraw
Потому что читаешь не правильно:Посмотреть вложение 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
из-за id все равно крашит, а текст все тот же пишетПотому что читаешь не правильно:
Код: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
Потому что ты гений, который читает не по структуре RPCиз-за id все равно крашит, а текст все тот же пишет
Посмотреть вложение 29914
а как надо? я из примера бралПотому что ты гений, который читает не по структуре RPC
Facepalm... Нужно читать textdraw id. Textdraw data, len textdraw, text textdrawa, в конце обязательно очисти мусор в строке. Я не за компом , так бы написал код. Я думаю , разберёшься самПосмотреть вложение 29906
Почему если пытаюсь получить index сразу крашит? и почему szString всегда одинаковый пишет, какое то не понятное число?
Длину текста нужно читать перед текстома как надо? я из примера брал
!отдельно!Facepalm... Нужно читать textdraw id. Textdraw data, len textdraw, text textdrawa, в конце обязательно очисти мусор в строке. Я не за компом , так бы написал код. Я думаю , разберёшься сам
Длину текста нужно читать перед текстом
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;
}
а как? напиши, пожалуйста, а то я дурачекFacepalm... Нужно читать textdraw id. Textdraw data, len textdraw, text textdrawa, в конце обязательно очисти мусор в строке. Я не за компом , так бы написал код. Я думаю , разберёшься сам
Длину текста нужно читать перед текстом
!отдельно!
Попробуй просто длину текста читать отдельноа как? напиши, пожалуйста, а то я дурачек
Дату текстдрава вроде не обязательно читатьПопробуй просто длину текста читать отдельно
И используй 256 элементов в массиве , на всякий случайПопробуй просто длину текста читать отдельно
Дату текстдрава вроде не обязательно читать
а как? напиши, пожалуйста, а то я дурачек
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;
};