Другое SAMPFUNCS | API C++

Perojek)0

Известный
205
3
Как узнать текст TextDraw'a, если я перехватил RPC_SCRSHOWTEXTDRAW? (В нём только ID)
Мне нужно сравнить текст, а потом вернуть false/true.
 
  • Нравится
Реакции: _fat

iAmerican

Известный
Друг
614
260
Как узнать текст TextDraw'a, если я перехватил RPC_SCRSHOWTEXTDRAW? (В нём только ID)
Мне нужно сравнить текст, а потом вернуть false/true.
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");
 

Loku

Известный
30
7
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
That wasn't my question, I mean to do something like this on c++
rakNet.Write(20@, 2@, 2, 2)
Aka write Bitstream, value, type and size and not just the value
 

Perojek)0

Известный
205
3
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");
Пока я не верну в хуке true, этого TextDraw'a не существует и проверить нельзя.
 

Dark_Knight

Me, me and me.
Друг
4,085
2,114
Пока я не верну в хуке 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';
 
  • Нравится
Реакции: Perojek)0

return

Новичок
82
5
Если что то рендерить и сесть в машину на срп 898.png ломается рендер.
Как это исправить?

На самп-рп сделали новый спидометр и сразу стала такая фигня с рендером.
 

return

Новичок
82
5
стандартный код с вики
ничего больше не изменял
C++:
bool CALLBACK Present ( CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
CONST RGNDATA *pDirtyRegion )
{
    if( SUCCEEDED( SF->getRender()->BeginRender() ) ) // если рендерер готов к рисованию
    {
        // рисуем
        SF->getRender()->EndRender(); // завершаем рисование
    };

    return true; // возвращаем положительный результат
};
 

return

Новичок
82
5
Всё по стандарту.
C++:
#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;
}
Если отключить текстдрав спидометра, тогда рендер нормально работает.

P.S. мажет только текст