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

iAmerican

Известный
Друг
614
260
Как сделать постепенное исчезание ?
PHP:
pFont->Print(arr[0], D3DCOLOR_ARGB(255, 255, 255, 0), 1454, 1000, false);
 

iAmerican

Известный
Друг
614
260
Ну вот накидал так , с использованием таймера. Но очень быстро пропадает, текст даже не успевает появляться .

например заменить его переменной, значение которой и будешь менять
PHP:
#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 bstarttext = false;
int iA;
DWORD dgoiA;
bool bgoiA;

bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
    CONST RGNDATA *pDirtyRegion)
{
    if (SUCCEEDED(SF->getRender()->BeginRender())) // если девайс готов к рисованию
    {

        if (!SF->getGame()->isGTAMenuActive())
        {
            if (bstarttext)
            {
                pFont->Print("{87CEFA}iAmerican text invisibleeeeeeeeeeeeeeeeee", D3DCOLOR_ARGB(iA, 255, 255, 255), 330, 330, false);  // A = 0
            }
           
        }
        SF->getRender()->EndRender(); // завершаем рисование
    };
    return true; // возвращаем положительный результат
};




void Timers() {

    if (bgoiA)
    {
        if (GetTickCount() - dgoiA > 10)
        {
            iA = 0;
            bgoiA = false;
        }
    }
}


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()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 0, 0xAA, 0 ), "SAMPFUNCS Plugin loaded." );
        SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
        pFont = SF->getRender()->CreateNewFont("Comic Sans MS", 12, FCR_BORDER);

        init = true;
    }

    Timers();
    if (SF->getGame()->isKeyPressed(VK_F2)) // Старт текста
    {
        if (bstarttext)
        {
            bstarttext = false;
        }
        else
        {
            bstarttext = true;
            dgoiA = GetTickCount();
            iA = 255;
            bgoiA = 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;
}
 

iAmerican

Известный
Друг
614
260
10 милисекунд же.
Конечно , как бы вопрос я решил. Но все таки , как обойтись без этого ...
И сделать более плавное исчезновение текста.
PHP:
void Timers() {

    if (bgoiA)
    {
        if (GetTickCount() - dgoiA > 1000)
        {
            iA = 200;
           
        }
        if (GetTickCount() - dgoiA > 2000)
        {
            iA = 150;
           
        }
        if (GetTickCount() - dgoiA > 3000)
        {
            iA = 150;
       
        }
        if (GetTickCount() - dgoiA > 4000)
        {
            iA = 65;
       
        }
        if (GetTickCount() - dgoiA > 5000)
        {
            iA = 0;
            bgoiA = false;
        }
    }
}
 

Woofing Giraffe

Активный
402
49
Конечно , как бы вопрос я решил. Но все таки , как обойтись без этого ...
И сделать более плавное исчезновение текста.
PHP:
void Timers() {

    if (bgoiA)
    {
        if (GetTickCount() - dgoiA > 1000)
        {
            iA = 200;
          
        }
        if (GetTickCount() - dgoiA > 2000)
        {
            iA = 150;
          
        }
        if (GetTickCount() - dgoiA > 3000)
        {
            iA = 150;
      
        }
        if (GetTickCount() - dgoiA > 4000)
        {
            iA = 65;
      
        }
        if (GetTickCount() - dgoiA > 5000)
        {
            iA = 0;
            bgoiA = false;
        }
    }
}
Заюзай в цикле SetTimer которые каждую 1 сек будет от А отнимать к примеру 50
 

Gabriel__

Известный
Проверенный
411
183
Конечно , как бы вопрос я решил. Но все таки , как обойтись без этого ...
И сделать более плавное исчезновение текста.
1 способ. Создай переменную типа float и в главном цикле отнимай от неё сколько-то десятых или сотых (методом подбора) и потом когда нужно рисовать округляй её до целого числа.
2 способ:
C++:
DWORD tick = 0;
uint32 alpha = 255;

// mainloop
if(GetTickCount() >= tick)
{
      alpha--;
      tick = GetTickCount() + 100;
}
 
  • Нравится
Реакции: iAmerican

QGate

Новичок
78
0
Отказывается выводить сообщение при нажатии клавиш, что делать?
C++:
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()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 0, 0xAA, 0 ), "SAMPFUNCS Plugin loaded." );
        SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC); // регистрируем callback
        init = true;
    }
    if (SF->getGame()->isKeyPressed(VK_LMENU) && SF->getGame()->isKeyPressed(VK_UP))
    {
        SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded.");
    };
}
 

barspinoff

Известный
126
34
народ, подскажите как читать RPC_ServerCommand, RPC_Chat принимает только слова из чата