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

vasiliy130198

Новичок
27
0
Подскажите пожалуйста нормальные примеры проектов для гта, где используется рендер directx. Sobeit, plugin sdk знаю, нужны еще варианты)
Есть еще Samp Omega, там очень круто всё рассписано, но при создании шрифта (D3DXCreateFont) происходит краш именно на этой функции.. :wall:

И такой вопрос: бывали раньше случаи такие, когда рендер не рисовал текст на экране, а как только уберу какую-то дллку с папки игры -- всё окей. Что это значит, и в каком проекте можно подсмотреть решение?

Спасибо. :thank_you:
 

Akatosh

Известный
21
0
Появилась необходимость реализовать на С++ консольном приложении систему горячих клавиш. Если принимать сообщения через WndProc о нажатиях, всё работает нормально, но до тех пор, пока я не сверну/уберу фокус с моего приложения.
Вопрос: как можно сделать так, чтобы моё приложения после скрытия продолжало принимать события нажатия клавиши/мыши, как это сделано в AHK?
 

Stiopko

Известный
Проверенный
307
218
Как можно расположит текст по центру форми в ImGui?
 

ae1c2a

Известный
195
6
Код:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include "imgui.h"
#include <d3d9.h>
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#include <tchar.h>
#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();

SAMPFUNCS *SF = new SAMPFUNCS();

void CALLBACK cmd_show_info_player(std::string param)
{
    if (param.empty()) return;
    int    i = std::stoi(param);

    char buf[128];

    stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[i];

    if (!pPlayer) return;

    sprintf(buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",
        pPlayer->szPlayerName,
        pPlayer->iPing,
        pPlayer->iScore,
        pPlayer->iIsNPC,
        pPlayer->pPlayerData->iAFKState == 2);

    SF->getSAMP()->getChat()->AddChatMessage(-1, buf);
};

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->getSAMP()->registerChatCommand("showinfo", cmd_show_info_player);
        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;
}
Как пофиксить?
Imgur(https://imgur.com/a/vOrjMjA)
 
1,417
1,029
Код:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include "imgui.h"
#include <d3d9.h>
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#include <tchar.h>
#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();

SAMPFUNCS *SF = new SAMPFUNCS();

void CALLBACK cmd_show_info_player(std::string param)
{
    if (param.empty()) return;
    int    i = std::stoi(param);

    char buf[128];

    stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[i];

    if (!pPlayer) return;

    sprintf(buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",
        pPlayer->szPlayerName,
        pPlayer->iPing,
        pPlayer->iScore,
        pPlayer->iIsNPC,
        pPlayer->pPlayerData->iAFKState == 2);

    SF->getSAMP()->getChat()->AddChatMessage(-1, buf);
};

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->getSAMP()->registerChatCommand("showinfo", cmd_show_info_player);
        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;
}
Как пофиксить?
Imgur(https://imgur.com/a/vOrjMjA)
14 строку удали.
 

Harryss

Участник
233
26
Я криворукий шушуть, поэтому буду признателен за объяснение этой херни:
Imgur(https://imgur.com/a/nxPA8KT)
При использовании cmd? Параметр функции у тебя принимает целочисленные значения, а на скриншоте используешь строковые значения < >, оттого и крашит.
 
У

Удалённый пользователь 123482

Гость
Как получить ближайшею машину?
 

Woofing Giraffe

Активный
402
49
Как получить ближайшею машину?
Код:
int GetNearestVehicle() {
    int nearestVehicle = -1;
    double closestDistance = -1;
    typedef long double(__thiscall* GetDistance)(stSAMPVehicle*);
    for (int vID = 1; vID <= MAX_VEHICLES; vID++) {
        static stVehiclePool *allVehicles;
        allVehicles = SF->getSAMP()->getVehicles();
        if (allVehicles->iIsListed[vID] != 1 || allVehicles->iIsListed2[vID] != 1)
            continue;
        if (allVehicles->pSAMP_Vehicle[vID] == 0 || allVehicles->pSAMP_Vehicle[vID]->pGTA_Vehicle == 0)
            continue;
        static double currentDistance;
        static GetDistance getDistanceToLocalPlayer = (GetDistance)(SF->getSAMP()->getSAMPAddr() + 0x9A700);
        currentDistance = getDistanceToLocalPlayer(allVehicles->pSAMP_Vehicle[vID]);
        if (closestDistance == -1) {
            closestDistance = currentDistance;
            nearestVehicle = vID;
        }
        else if (currentDistance < closestDistance) {
            closestDistance = currentDistance;
            nearestVehicle = vID;
        }
    }
    return nearestVehicle;
}
 
Последнее редактирование:
У

Удалённый пользователь 123482

Гость
Код:
int GetNearestVehicle() {
    int nearestVehicle = -1;
    double closestDistance = -1;
    typedef long double(__thiscall* GetDistance)(stSAMPVehicle*);
    for (int vID = 1; vID <= MAX_VEHICLES; vID++) {
        static stVehiclePool *allVehicles;
        allVehicles = SF->getSAMP()->getVehicles();
        if (allVehicles->iIsListed[vID] != 1 || allVehicles->iIsListed2[vID] != 1)
            continue;
        if (allVehicles->pSAMP_Vehicle[vID] == 0 || allVehicles->pSAMP_Vehicle[vID]->pGTA_Vehicle == 0)
            continue;
        static double currentDistance;
        static GetDistance getDistanceToLocalPlayer = (GetDistance)(SF->getSAMP()->getSAMPAddr() + 0x9A700);
        currentDistance = getDistanceToLocalPlayer(allVehicles->pSAMP_Vehicle[vID]);
        if (closestDistance == -1) {
            closestDistance = currentDistance;
            nearestVehicle = vID;
        }
        else if (currentDistance < closestDistance) {
            closestDistance = currentDistance;
            nearestVehicle = vID;
        }
    }
    return nearestVehicle;
}
Как ID в CVehicle преобразовать?
 

xISRAPILx

Перепишу свою жизнь на PHP
Проверенный
248
173
Cannot open include file: 'd3dx9.h'
Как это пофиксить? До переустановки студии всё было нормально. DirectX 9 установлен.
 

0xNull_Dll

Известный
143
20
Существует ли способ повернуть колеса на определенный градус?

К примеру, если эмулировать нажатие кнопки - колеса поворачиваются градусов на 50, а мне нужно, допустим, на 10.

Как это сделать?