Другое С/С++ Вопрос - Ответ

SR_team

like pancake
BH Team
4,720
6,370
Эта ошибка говорит, что у них нет vcruntime140d.dll, а не что твой код кривой
А буква d в названии библиотеки говорит, что он скомпилировал бинарь в debug-режиме, и не факт, что в MSVCPPRP поставляются debug-бинари, так что, прежде, чем пихать MSVCPPRP надо перекомпилить в release
 

Dark_Knight

Me, me and me.
Друг
4,064
2,078
А буква d в названии библиотеки говорит, что он скомпилировал бинарь в debug-режиме, и не факт, что в MSVCPPRP поставляются debug-бинари, так что, прежде, чем пихать MSVCPPRP надо перекомпилить в release
Че проебался с буквой D :D
 

loganhackerdff

Известный
868
517
А буква d в названии библиотеки говорит, что он скомпилировал бинарь в debug-режиме, и не факт, что в MSVCPPRP поставляются debug-бинари, так что, прежде, чем пихать MSVCPPRP надо перекомпилить в release
теперь программа работает, но свою функцию не выполняет, всё таки я чо то не то, сделал, помогите починить пж
ссылка на описание функции - https://docs.microsoft.com/en-us/previous-versions/dd757161(v=vs.85)
Описание: Открывает дисковод ;D.
Использование: 0AB1: call_scm_func @mciSendString 0

CLEO:
:mciSendString
0AA2: 25@ = load_library "Winmm.DLL"
0AA4: 26@ = get_proc_address "mciSendStringA" library 25@
0AA7: call_function 26@ num_params 4 pop 0 0 0 0 "Set cdaudio door open wait" 27@
0AA3: free_library 25@
0AB2: ret 0

Описание: Закрывает дисковод .
Использование: 0AB1: call_scm_func @mciSendString 0

CLEO:
:mciSendString
0AA2: 25@ = load_library "Winmm.DLL"
0AA4: 26@ = get_proc_address "mciSendStringA" library 25@
0AA7: call_function 26@ num_params 4 pop 0 0 0 0 "Set cdaudio door closed wait" 27@
0AA3: free_library 25@
0AB2: ret 0
C:
#include "stdafx.h"
#include "windows.h"
#include "iostream"
using namespace std;
typedef MCIERROR(WINAPI *PGNSI)(LPCTSTR, LPTSTR, UINT, HANDLE);
PGNSI Binput;

int main()
{
    MCIERROR uReturnVal;
    HMODULE hdll = LoadLibrary(L"Winmm.DLL");
    Binput = (PGNSI)GetProcAddress(hdll, "mciSendStringA"); //0 0 0 "Set cdaudio door open wait" 27@
    uReturnVal = Binput(L"Set cdaudio door open wait", 0, 0, 0);
    //FreeLibrary(hdll);    
    return 0;
}
 
Последнее редактирование:

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
597
819
как отправить синхру нажатия клавиши N через bitstream
 
Последнее редактирование:

astap_

Известный
Всефорумный модератор
626
597
как отправить синхру нажатия клавиши N через bitstream
с сампфунксом, как я понимаю
C++:
void SendCustomOnfootSync() {
    stOnFootData sync;
    memset(&sync, 0, sizeof(stOnFootData));

    sync = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;
    sync.byteCurrentWeapon += 128;

    BitStream bsActorSync;
    bsActorSync.Write((BYTE)ID_PLAYER_SYNC);
    bsActorSync.Write((PCHAR)&sync, sizeof(stOnFootData));
    SF->getRakNet()->SendPacket(&bsActorSync);
}
 
  • Нравится
Реакции: Receiver

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
597
819
с сампфунксом, как я понимаю
C++:
void SendCustomOnfootSync() {
    stOnFootData sync;
    memset(&sync, 0, sizeof(stOnFootData));

    sync = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;
    sync.byteCurrentWeapon += 128;

    BitStream bsActorSync;
    bsActorSync.Write((BYTE)ID_PLAYER_SYNC);
    bsActorSync.Write((PCHAR)&sync, sizeof(stOnFootData));
    SF->getRakNet()->SendPacket(&bsActorSync);
}
это зажатие получается или просто одноразовое нажатие?
 

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
597
819
Я использую поток с циклом. Выгружаю значит скрипт, сворачиваю игру. Затем разворачиваю её и у меня чёрный экран. Цикл останавливаю через EVENT
Помогите сделать нормальный поток с остановкой цикла и завершением самого потока при отгрузке скрипта)

C++:
HANDLE event;

void ThreadProc(void* pParam) {
    while (WaitForSingleObject(event, 100) != WAIT_OBJECT_0)
    {
        // Anything actions in while
    }
    _endthread();
}

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;
      
        event = CreateEvent(NULL, FALSE, FALSE, NULL);
        _beginthread(ThreadProc, 0, NULL);
      
        init = true;
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    switch (dwReasonForCall)
    {
        case DLL_PROCESS_ATTACH:
        {
            SF->initPlugin(mainloop, hModule);
        } break;
        case DLL_PROCESS_DETACH:
        {
            SetEvent(event);
        } break;
    }
    return TRUE;
}
 

Vintik

Мечтатель
Проверенный
1,471
920
Приветствую. Есть несколько вопросов, желаю по всем получить ответ, конечно =)
1) Как найти оффсеты на самп-античит (который фризит)? Мне нужно для КРМП, но оффсеты я желаю найти сам, хочу получить лишь пошаговый алгоритм действий (это тебе не хп или координаты искать, не от чего оттолкнуться).
2) Я сделал хук функции [посл. введённая команда], но там есть несколько багов. Помогите, плиз (всё описал в посту): клик
3) Как на чистом С++ заспавнить машину? Тоже интересно узнать, желательно опять таки, не скидывать функцию из собейта, а расписать пошаговый алгоритм (хотя бы примерный), чтобы я смог повторить его в других играх (не только самп).

Пока что всё =) Еще раз спасибки
 

pretlant

Новичок
20
28
Мне в GTA:SA нужно получить список объетов (их координаты и т.п), которые расположены от меня на определенном радиусе. Есть идеи? Кто-нибудь пробовал?

Больше упор на то, как получить этим объекты?
 

SR_team

like pancake
BH Team
4,720
6,370
Я использую поток с циклом. Выгружаю значит скрипт, сворачиваю игру. Затем разворачиваю её и у меня чёрный экран. Цикл останавливаю через EVENT
Помогите сделать нормальный поток с остановкой цикла и завершением самого потока при отгрузке скрипта)

C++:
HANDLE event;

void ThreadProc(void* pParam) {
    while (WaitForSingleObject(event, 100) != WAIT_OBJECT_0)
    {
        // Anything actions in while
    }
    _endthread();
}

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;
     
        event = CreateEvent(NULL, FALSE, FALSE, NULL);
        _beginthread(ThreadProc, 0, NULL);
     
        init = true;
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    switch (dwReasonForCall)
    {
        case DLL_PROCESS_ATTACH:
        {
            SF->initPlugin(mainloop, hModule);
        } break;
        case DLL_PROCESS_DETACH:
        {
            SetEvent(event);
        } break;
    }
    return TRUE;
}
Зачем тебе поток?
 

Vintik

Мечтатель
Проверенный
1,471
920
Приветствую. Есть несколько вопросов, желаю по всем получить ответ, конечно =)
1) Как найти оффсеты на самп-античит (который фризит)? Мне нужно для КРМП, но оффсеты я желаю найти сам, хочу получить лишь пошаговый алгоритм действий (это тебе не хп или координаты искать, не от чего оттолкнуться).
2) Я сделал хук функции [посл. введённая команда], но там есть несколько багов. Помогите, плиз (всё описал в посту): клик
3) Как на чистом С++ заспавнить машину? Тоже интересно узнать, желательно опять таки, не скидывать функцию из собейта, а расписать пошаговый алгоритм (хотя бы примерный), чтобы я смог повторить его в других играх (не только самп).

Пока что всё =) Еще раз спасибки
@SR_team @DarkP1xel помогите