Как узнать текст TextDraw'a, если я перехватил RPC_SCRSHOWTEXTDRAW? (В нём только ID)
Мне нужно сравнить текст, а потом вернуть false/true.
SF->getSAMP()->getInfo()->pPools->pTextdraw->textdraw[ID texdraw]->szText
SF->getSAMP()->getInfo()->pPools->pTextdraw->textdraw[ID texdraw]->szString
if(strstr("Текст тексдрава" , "Текст твой") != NULL)
SF->Log("true");
else
SF->Log("false");
That wasn't my question, I mean to do something like this on c++C++:void CALLBACK setskin(std::string param) { int playerID, skinID; sscanf(param.c_str(), "%d %d", &playerID, &skinID); BitStream bsClass; bsClass.Write(uint32_t(playerID)); bsClass.Write(uint32_t(skinID)); SF->getRakNet()->emulateRecvRPC(153, &bsClass); }; void CALLBACK mainloop() { static bool init = false; if (!init) { if (GAME == nullptr) return; if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME) return; if (!SF->getSAMP()->IsInitialized()) return; SF->getSAMP()->registerChatCommand("setskin", setskin); init = true; } }
C++:using :: /setskin id skinid
Пока я не верну в хуке true, этого TextDraw'a не существует и проверить нельзя.Если на отъебись проверку то ...C++:SF->getSAMP()->getInfo()->pPools->pTextdraw->textdraw[ID texdraw]->szText SF->getSAMP()->getInfo()->pPools->pTextdraw->textdraw[ID texdraw]->szString
C++:if(strstr("Текст тексдрава" , "Текст твой") != NULL) SF->Log("true"); else SF->Log("false");
Читай из битстрима, структуру ищи в SAMP.luaПока я не верну в хуке true, этого TextDraw'a не существует и проверить нельзя.
Пока я не верну в хуке true, этого TextDraw'a не существует и проверить нельзя.
WORD wTextID;
stTextDrawTransmit data;
char cText[1024];
unsigned short cTextLen = 0;
BitStream bsData = *params->bitStream;
bsData.Read(wTextID);
bsData.Read((PCHAR)&data, sizeof(stTextDrawTransmit));
bsData.Read(cTextLen);
bsData.Read(cText, cTextLen);
cText[cTextLen] = '\0';
Кинь кодЕсли что то рендерить и сесть в машину на срп Посмотреть вложение 8048 ломается рендер.
Как это исправить?
На самп-рп сделали новый спидометр и сразу стала такая фигня с рендером.
Код стандартный, с вики.Кинь код
У тебя в рендере есть условия вроде:Код стандартный, с вики.
Не только у меня такая проблема.
if((SUCCEDED)SF->getRender()->BeginRender() && bool)
{}
bool CALLBACK Present ( CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
CONST RGNDATA *pDirtyRegion )
{
if( SUCCEEDED( SF->getRender()->BeginRender() ) ) // если рендерер готов к рисованию
{
// рисуем
SF->getRender()->EndRender(); // завершаем рисование
};
return true; // возвращаем положительный результат
};
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS *SF = new SAMPFUNCS();
stFontInfo *pFont;
bool CALLBACK Present (CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)
{
if(SUCCEEDED(SF->getRender()->BeginRender()))
{
pFont->Print("текст", D3DCOLOR_ARGB( 255, 255, 255, 0 ), 500, 500, false);
SF->getRender()->EndRender();
};
return true;
};
void CALLBACK mainloop()
{
static bool init = false;
if (!init)
{
if (GAME == nullptr)
return;
if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;
if (!SF->getSAMP()->IsInitialized())
return;
SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
pFont = SF->getRender()->CreateNewFont("Tahoma", 12, FCR_BORDER);
init = true;
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
switch (dwReasonForCall)
{
case DLL_PROCESS_ATTACH:
SF->initPlugin(mainloop, hModule);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Больше ничего нетДругие скрипты и плагины отключай, которые юзают рендер