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

2Shae

Известный
149
8
Как считывать RPC_DamageVehicle ?
Код:
[13:05:04.571] < [RPC Send] RPC_DamageVehicle[106](length: 12 bytes, 96 bits, priority: 1, reliability: 8, orderingChannel: 0)
< dump:
0000  2B 05 10 00 20 00 00 00  00 00 04 08                +... .......
Либо альтернативный вариант получение ID / ника игрока, который нанёс урон по транспорту локального игрока?
 
1,417
1,029
Как считывать RPC_DamageVehicle ?
Код:
[13:05:04.571] < [RPC Send] RPC_DamageVehicle[106](length: 12 bytes, 96 bits, priority: 1, reliability: 8, orderingChannel: 0)
< dump:
0000  2B 05 10 00 20 00 00 00  00 00 04 08                +... .......
Либо альтернативный вариант получение ID / ника игрока, который нанёс урон по транспорту локального игрока?
C++:
bool CALLBACK rpc(stRakNetHookParams *params)
{
    if (params->packetId == RPCEnumeration::RPC_DamageVehicle)
    {
        BitStream *bs = params->bitStream;
        int vehicleId, panelDmg, doorDmg;
        int8 lights, tires;
        bs->Read(vehicleId);
        bs->Read(panelDmg);
        bs->Read(doorDmg);
        bs->Read(lights);
        bs->Read(tires);
        SF->getSAMP()->getChat()->AddChatMessage(-1, "vId: %d; panel: %d; door: %d; lights: %d; tires: %d", vehicleId, panelDmg, doorDmg, lights, tires);
    };
    return true;
};
в mainloop
C++:
SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_OUTCOMING_RPC, rpc);
только этот рпц триггерится, когда ты в машине и наносишь ей урон(столкновение и т.п), и id игрока в этом рпц нет.
Нужен курс для написания .sf
C, C++(https://blast.hk/forums/7/?prefix_id=39)
 

mrdiimax

Известный
566
79
Как получить IP пользователя и сделать условие? Типо, если ип не тот который нужен, то крашит игру
 

LaRossa

Потрачен
429
117
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

ЯedЯuM

Malware Maker
244
304
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
hmm, can you give me an example?
C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>
#include <thread>
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
using namespace std;
#pragma warning (disable:4700)
#pragma warning (disable:4244)
#pragma warning (disable:4018)
#pragma comment(lib,"User32.lib")
SAMPFUNCS *SF = new SAMPFUNCS();
DWORD ThreadID; HANDLE hThread;
volatile bool Activated = false;
typedef struct
{
    int delay;
} ThreadParams;
void __stdcall ThreadBody(void *prm)
{
    ThreadParams *param = (ThreadParams*)prm;
    do
    {
        Sleep(param->delay); // like a wait opcode from cleo`s
        // Your code, for example we show a message when time from sleep ago.
        SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(204, 255, 51),
        "{ff751a}Thread Executed!");
    }
    while (Activated);
}
void __stdcall CmdBody(string arg) // example call from the command body
{
    if (!Activated)
    {
        if (arg.empty())
        {
            
             SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(204, 255, 51),
             "{ff751a}Type: /sleep {ffff00}[milliseconds]");
              return;
        }
        Activated = true;
        static ThreadParams prm;
        prm.delay = stoi(arg);
        hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&ThreadBody,
        (void*)&prm, 0, &ThreadID);
        SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(148, 112, 255),
        "{FF144C}Plugin {8c66ff}Enabled!");
    }
    else
    {
        SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(148, 112, 255), "Disabled.");
        Activated = false;
        if (hThread != 0) TerminateThread(hThread, 0); // in some times thread can not ended cuz probally sleep function was not ended yet.
    }
}
void __stdcall Destr()
{
     // For a special situations when game exit was been before than our thread was executed, so if that - we must stop it;
     // This problem caused from Sleep(ms); function in the threads wich waiting their end.
    if (hThread != 0) TerminateThread(hThread, 0);
}
void __stdcall mainloop(void)
{
    static bool init = false;
    if (!init)
    {
        if (GAME == nullptr) return;
        if (!SF->getSAMP()->IsInitialized()) return;
        SF->getSAMP()->registerChatCommand("sleep", CmdBody);
        SF->getGame()->registerGameDestructorCallback(Destr);
        init = true;
    }
}
bool __stdcall 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;
}
 
Последнее редактирование:

romanblinov2013

RB_PRO
Проверенный
212
196
Наткнулся на очень плохие и никчемные ошибки. Покажите, где я написал не то, что нужно, пожалуйста.

Ошибка из-за этих строк.
C++:
        while (true) // Бесконечный цикл
        {

            Sleep(1);
           
            if (GetAsyncKeyState(VK_NUMPAD1)) // Проверка на нажатие клавиши
            {
                while (GetAsyncKeyState(VK_NUMPAD1))// Если клавиша
                {
                    Sleep(1);
                }
                SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded.");
                // вывод в чат
            }
        }
C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#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();

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;
       
        while (true) // Бесконечный цикл
        {

            Sleep(1);
           
            if (GetAsyncKeyState(VK_NUMPAD1)) // Проверка на нажатие клавиши
            {
                while (GetAsyncKeyState(VK_NUMPAD1))// Если клавиша
                {
                    Sleep(1);
                }
                SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded.");
                // вывод в чат
            }
        }
        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;
}

Ошибки:
Код:
Серьезность    Код    Описание    Строка    Состояние подавления
Ошибка    LNK2019    ссылка на неразрешенный внешний символ __imp__GetAsyncKeyState@4 в функции "void __stdcall mainloop(void)" (?mainloop@@YGXXZ)    1   
Серьезность    Код    Описание    Строка    Состояние подавления
Ошибка    LNK1120    неразрешенных внешних элементов: 1    1
 

ALF

Известный
Проверенный
320
537
Наткнулся на очень плохие и никчемные ошибки. Покажите, где я написал не то, что нужно, пожалуйста.

Ошибка из-за этих строк.
C++:
        while (true) // Бесконечный цикл
        {

            Sleep(1);
          
            if (GetAsyncKeyState(VK_NUMPAD1)) // Проверка на нажатие клавиши
            {
                while (GetAsyncKeyState(VK_NUMPAD1))// Если клавиша
                {
                    Sleep(1);
                }
                SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded.");
                // вывод в чат
            }
        }
C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#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();

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;
      
        while (true) // Бесконечный цикл
        {

            Sleep(1);
          
            if (GetAsyncKeyState(VK_NUMPAD1)) // Проверка на нажатие клавиши
            {
                while (GetAsyncKeyState(VK_NUMPAD1))// Если клавиша
                {
                    Sleep(1);
                }
                SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded.");
                // вывод в чат
            }
        }
        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;
}

Ошибки:
Код:
Серьезность    Код    Описание    Строка    Состояние подавления
Ошибка    LNK2019    ссылка на неразрешенный внешний символ __imp__GetAsyncKeyState@4 в функции "void __stdcall mainloop(void)" (?mainloop@@YGXXZ)    1  
Серьезность    Код    Описание    Строка    Состояние подавления
Ошибка    LNK1120    неразрешенных внешних элементов: 1    1
#pragma comment(lib, "User32.lib")
 
  • Нравится
Реакции: romanblinov2013