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

iAmerican

Известный
Друг
614
257
Как получить свой id и после чего выполнить условие - если id < 100 то будет выполнен реконнект

if(SF->getSAMP()->getPlayers()->plocalplayerid > 100)
функция реконекта

Как получить CPed чужой машины?
Конкретнее задачу описывай, что ты спрашиваешь , какая то дичь.
 

iAmerican

Известный
Друг
614
257
как сделать неуязвимость к пробитию колёс на тачке в которой я сижу?
Так должны колеса чинится , но могу с адрессом что то попутать , проверь.
C++:
DWORD dwThis = (DWORD)PEDSELF->GetInterface();
        DWORD dwFunc = 0x6C4530;
        if (dwFunc)
        {
            _asm
            {
                mov     ecx, dwThis
                call    dwFunc
            }
        }

Еще вроде так можно попробовать...

C++:
CVehicle *pVehicle = GAME->GetPools()->GetVehicle((DWORD *)(struct vehicle_info *)(UINT_PTR) * (uint32_t *)VEHICLE_POINTER_SELF);

Vehicle->GetDamageManager()->SetWheelStatus(FRONT_LEFT_WHEEL,1); // Хз какие там статусы , ну попробуй 1.
Vehicle->GetDamageManager()->SetWheelStatus(REAR_LEFT_WHEEL,1)
Vehicle->GetDamageManager()->SetWheelStatus(FRONT_RIGHT_WHEEL,1)
Vehicle->GetDamageManager()->SetWheelStatus(REAR_RIGHT_WHEEL,1)

Пришлите мне файл, который работает с sampfuncs на новой версии r3 samp.
Совместим только с SA-MP 0.3.7-R1, поддержки других версий SA-MP не будет.
 
Последнее редактирование:
  • Нравится
Реакции: [w0te]

iAmerican

Известный
Друг
614
257
Где можно про эти структуры почитать? Да и вообще какую-нибудь инфу о SF API кроме уроков ur shadow
ПКМ по getPlayers() допустим и там "показать определение", и там тоже самое примерно по stPlayerPool . Но может быть и другое название.
Посмотри на ютубе что такое структуры и я думаю разберешься.

C++:
SF->getSAMP()->getPlayers()->sLocalPlayerID
слоу
 
Последнее редактирование:

Stiopko

Известный
Проверенный
307
218
Почему в SF 5.3.3 битсрим нормально изменяется а в 5.4.0 не меняется битстрим. 75 строчка
C++:
#include <windows.h>
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#pragma comment(lib, "User32.lib")
SAMPFUNCS *SF = new SAMPFUNCS();

BYTE state = false;
unsigned int countRes[2] = {0, 0};

bool IsOkGo()
{
    return SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->state == 1 ? true : false;
};

void CALLBACK EnableBot(std::string params) {
    state = state > 0 ? 0 : 1;
    SF->getCLEO()->callOpcode("0ACD: \"~y~AutoLenCot: %s\" 2000", state > 0 ? "~g~ON" : "~r~OFF");
}

void CALLBACK GetCout(std::string params) {
    SF->getSAMP()->getChat()->AddChatMessage(-1, "{87CEFA}Linen: {FFFFFF} %u {FFFFFF}| {87CEFA}Cotton: {FFFFFF} %u", countRes[0], countRes[1]);
}

void CALLBACK ResetCout(std::string params) {
    countRes[0] = 0;
    countRes[1] = 0;
    GetCout("");
}

bool CALLBACK OnSetAnim(stRakNetHookParams *params) {
    // УДЕРЖИВАТЬ пробел до окончания
    if (state) {
        static char temp[100], temp_2[100];
        static short actID;
        static BYTE tempLen;
        if (params->packetId == ScriptRPCEnumeration::RPC_ScrApplyAnimation) {
            params->bitStream->ResetReadPointer();
            params->bitStream->Read(actID);
            if (actID == SF->getSAMP()->getPlayers()->sLocalPlayerID) {
                params->bitStream->Read(tempLen);
                params->bitStream->Read(temp, tempLen);
                temp[tempLen] = '\0';
                if (!strcmp(temp, "BOMBER")) {
                    params->bitStream->Read(tempLen);
                    params->bitStream->Read(temp, tempLen);
                    temp[tempLen] = '\0';
                    if (!strcmp(temp, "BOM_Plant_Loop")) state = 2;
                }
                else if (!strcmp(temp, "BD_FIRE")) state = 1;
            }
        }
        else if (params->packetId == ScriptRPCEnumeration::RPC_ScrDisplayGameText) {
            static int style, time;
            params->bitStream->ResetReadPointer();
            params->bitStream->Read(style);
            if (style == 1) {
                params->bitStream->Read(time);
                params->bitStream->Read(style);
                params->bitStream->Read(temp, style);
                temp_2[0] = '\0';
                temp[style] = '\0';
                if (strstr(temp, "cotton")) {
                    countRes[1]++;
                    strcpy(temp, "cotton = ");
                    itoa(countRes[1], temp_2, 10);
                }
                else if (strstr(temp, "linen")) {
                    countRes[0]++;
                    strcpy(temp, "linen = ");
                    itoa(countRes[0], temp_2, 10);
                }
                if (temp_2[0] != '\0') {
                    strcat(temp, temp_2);
                    params->bitStream->ResetWritePointer();
                    params->bitStream->Write(4);
                    params->bitStream->Write(time + 5000);
                    params->bitStream->Write(int(strlen(temp)));
                    params->bitStream->Write(temp, strlen(temp));
                }

            }
        }
    }

    return true;
}

bool CALLBACK OnPlayyerZbor(stRakNetHookParams *params) {
    if (state > 1 && params->packetId == ID_PLAYER_SYNC) {
        static stOnFootData ofSync;
        ofSync = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;
        ofSync.sKeys = 8;
        params->bitStream->ResetWritePointer();
        params->bitStream->Write((BYTE)ID_PLAYER_SYNC);
        params->bitStream->Write((PCHAR)&ofSync, sizeof(stOnFootData));
    }
    return true;
}

void CALLBACK mainloop(void)
{
    static unsigned long long timer = false;

    if (!timer)
    {
        if (GAME == nullptr || GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME || !SF->getSAMP()->IsInitialized()) return;
        SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, OnSetAnim);
        SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_OUTCOMING_PACKET, OnPlayyerZbor);
        SF->getSAMP()->registerChatCommand("slen", EnableBot);
        SF->getSAMP()->registerChatCommand("sres", ResetCout);
        SF->getSAMP()->registerChatCommand("sgt", GetCout);
        SF->getSAMP()->getChat()->AddChatMessage(-1, "{87CEFA}AutoLenCot{FFFFFF} by Stiopko {87CEFA}loaded!");
        timer = GetTickCount() + 1;
    }
    else if (state > 0) {
        if (!(GetKeyState(VK_ADD) & 0x8000)) {
            if (timer + 1 < GetTickCount()){
                if (IsOkGo()) {
                    static BitStream bsOnfootSync;
                    static stOnFootData ofSync;
                    memset(&ofSync, 0, sizeof(stOnFootData));
                    ofSync = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;

                    /*if (state == 1) {
                        ofSync.sKeys = 0;
                        bsOnfootSync.ResetWritePointer();
                        bsOnfootSync.Write((BYTE)ID_PLAYER_SYNC);
                        bsOnfootSync.Write((PCHAR)&ofSync, sizeof(stOnFootData));
                        SF->getRakNet()->SendPacket(&bsOnfootSync);
                    }*/
                  
                    ofSync.sKeys = 8;
                    bsOnfootSync.ResetWritePointer();
                    bsOnfootSync.Write((BYTE)ID_PLAYER_SYNC);
                    bsOnfootSync.Write((PCHAR)&ofSync, sizeof(stOnFootData));

                    SF->getRakNet()->SendPacket(&bsOnfootSync);
                }
                timer = GetTickCount();
            }
        } else EnableBot("");
    }
}

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;
}
 

-raymond-

Известный
110
9
C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include "imgui.h"
#include "imgui_impl_dx9.h"
#include "imgui_impl_win32.h"
#include <d3d9.h>
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#include <tchar.h>
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
#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;
        SF->getSAMP()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 0, 0xAA, 0 ), "SAMPFUNCS Plugin loaded." );
        SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
        SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_RESET, Reset);
        SF->getGame()->registerWndProcCallback(SFGame::MEDIUM_CB_PRIORITY, WndProcHandler);

        init = true;
        ImGui::CreateContext();
        ImGuiIO& io = ImGui::GetIO(); (void)io;
        ImGui_ImplWin32_Init(GetActiveWindow());
        ImGui_ImplDX9_Init(SF->getRender()->getD3DDevice());
    }
}

bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)
{

    if (SUCCEEDED(SF->getRender()->BeginRender()))
    {


        SF->getRender()->EndRender();
    }
    return true;
}

HRESULT CALLBACK Reset(D3DPRESENT_PARAMETERS* pPresentationParameters)
{
    return true;
}

bool CALLBACK WndProcHandler(HWND hwd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    return 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;
}

LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    return LRESULT();
}

Что не так?

поставь это выше mainloop

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;
}

HRESULT CALLBACK Reset(D3DPRESENT_PARAMETERS* pPresentationParameters)
{
    return true;
}

bool CALLBACK WndProcHandler(HWND hwd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    return true;
}
 

Harryss

Участник
233
26
Скачал шаблонный проект из данной темы - https://blast.hk/threads/23410/ , при открытии проекта выдает следующую ошибку:
Код:
\SF Plugin Template\SFPlugin\SFPlugin.vcxproj : warning  : Невозможно найти средства сборки для Visual Studio 2012 - Windows XP (v110_xp). Установите Visual Studio 2012 - Windows XP (v110_xp), чтобы выполнить сборку с использованием средств сборки Visual Studio 2012 - Windows XP (v110_xp).
Установил "Разработка приложений для универсальной платформы Windows" и "Разработка класс. приложений на C++", в отдельных компонентах нашел "Поддержка Windows XP для C++", установил - не помогло. Помогите. Visual Studio 2017.

 
Последнее редактирование:

-raymond-

Известный
110
9
Скачал шаблонный проект из данной темы - https://blast.hk/threads/23410/ , при открытии проекта выдает следующую ошибку:
Код:
\SF Plugin Template\SFPlugin\SFPlugin.vcxproj : warning  : Невозможно найти средства сборки для Visual Studio 2012 - Windows XP (v110_xp). Установите Visual Studio 2012 - Windows XP (v110_xp), чтобы выполнить сборку с использованием средств сборки Visual Studio 2012 - Windows XP (v110_xp).
Установил "Разработка приложений для универсальной платформы Windows" и "Разработка класс. приложений на C++", в отдельных компонентах нашел "Поддержка Windows XP для C++", установил - не помогло. Помогите. Visual Studio 2017.



Проект -> Свойства: 'название проекта',
потом справа где 'Набор инструментов платформы' выбираешь 'Visual Studio 2017 (v141)'
 
  • Нравится
Реакции: Harryss