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

PanSeek

t.me/dailypanseek
Всефорумный модератор
908
1,775
SF. Как получить с радара определенную иконку? ID иконок - https://www.mta-resource.ru/wiki/article/id/13
Пробовал вот так: GAME->GetRadar()->GetMarker(RADAR_SPRITE_MAP_HERE); и вот так GAME->GetRadar()->GetMarker(2);
При взаимодействии иконки, он работал с иконками других игроков/транспорта которые возле меня.
Если я правильно понял, то я получаю не иконки, а маркеры (я думал что одно и тоже). Как я понял мне нужны спрайты, а их получить не могу, только SetSprite есть.
 
  • Нравится
Реакции: James Saula

Krisp

Новичок
23
1
У меня есть функция:
GetAimingPlayer:
void CAimbot::GetAimingPlayer()
{
    iTargetPlayer = -1;
    float fNearestDistance = 9999.0f;
// тут шлак бесполезный, смотри с нижнего комментария
    if (g_Config.g_Aimbot.bAimbot || g_Config.g_Aimbot.bSmooth || g_Config.g_Aimbot.bSilent || g_Config.g_Aimbot.bProAim)
    {
        CVector vecCamera, vecOrigin, vecTarget;
        Utils::getBonePosition(FindPlayerPed(), BONE_RIGHTWRIST, &vecOrigin);
        TheCamera.Find3rdPersonCamTargetVector(100.f, vecOrigin, &vecCamera, &vecTarget);

        for (int i = 0; i < SAMP_MAX_PLAYERS; i++)
        {
            if (!pSAMP->isPlayerStreamed(i))
                continue;

            CPed* pPed = CPools::GetPed(pSAMP->getPlayers()->pRemotePlayer[I]->pPlayerData->pSAMP_Actor->ulGTAEntityHandle);
            if (!pPed || !pPed->IsAlive())
                continue;

            if (g_Config.g_Aimbot.bTeamProtect && pSAMP->getPlayerColor(i) == pSAMP->getPlayerColor(pSAMP->getPlayers()->sLocalPlayerID))
                continue;

            if (!g_Config.g_Aimbot.bIgnoreEverything)
            {
                if (g_Config.g_Aimbot.bIgnoreAFK && pSAMP->getPlayers()->pRemotePlayer[I]->pPlayerData->iAFKState == 2)
                    continue;

                float fTargetDistance = Math::vect3_dist(&pSAMP->getPlayers()->pRemotePlayer[I]->pPlayerData->pSAMP_Actor->pGTA_Ped->base.matrix[12], &pSAMP->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->base.matrix[12]);
                if (!g_Config.g_Aimbot.bIgnoreMaxDistance && fTargetDistance > fWeaponRange[pSAMP->getPlayers()->pLocalPlayer->byteCurrentWeapon])
                    continue;
            }
// Сам захват кости начинается отсюда
            for (auto iBone : iBoneList)
            {
                CVector vecBone, vecBoneScreen;
                Utils::getBonePosition(pPed, (ePedBones)iBone, &vecBone);
                Utils::CalcScreenCoors(&vecBone, &vecBoneScreen);
                if (vecBoneScreen.z < 1.0f)
                    continue;

                float fCentreDistance = Math::vect2_dist(&vecCrosshair, &vecBoneScreen);
                if (g_Config.g_Aimbot.bAimbot && fCentreDistance >= (float)g_Config.g_Aimbot.iAimbotConfig[pSAMP->getPlayers()->pLocalPlayer->byteCurrentWeapon][CRANGE] * 1.5f)
                    continue;

                if (!g_Config.g_Aimbot.bIgnoreEverything && !g_Config.g_Aimbot.bLockThroughObjects && !CWorld::GetIsLineOfSightClear(vecCamera, vecBone, true, true, false, true, true, true, false))
                    continue;

                if (fCentreDistance <= fNearestDistance)
                {
                    fNearestDistance = fCentreDistance;
                    iTargetPlayer = i; iTargetBone = iBone;
                    vecTargetBone = vecBoneScreen;
                    break;
                }
            }
        }
    }
}

Вот содержимое iBoneList[]:
C++:
static int iBoneList[]
{
    BONE_PELVIS1, BONE_PELVIS, BONE_SPINE1, BONE_UPPERTORSO, BONE_NECK,
    BONE_HEAD2, BONE_HEAD1, BONE_HEAD, BONE_RIGHTUPPERTORSO, BONE_RIGHTSHOULDER,
    BONE_RIGHTELBOW, BONE_LEFTUPPERTORSO, BONE_LEFTSHOULDER, BONE_LEFTELBOW,
    BONE_LEFTHIP, BONE_LEFTKNEE, BONE_RIGHTHIP, BONE_RIGHTKNEE,
};

И сама проблема в том, что при большом CRANGE - рендже аимбота, если первые 2-3 кости iBoneList[] в радиусе, то аим будет захватывать их, хотя по логике должен захватить ближайшую, подскажите пожалуйста, как это исправить :З
При маленьком все нормально захватывает.

Если нужно, то вот код Math::vect2_dist:

C++:
static float vect2_dist(CVector* point1, CVector* point2)
    {
        return sqrt(pow(point1->x - point2->x, 2) + pow(point1->y - point2->y, 2));
    }
Код взят отсюда -> https://www.blast.hk/threads/63079/
 
Последнее редактирование:

K_E_N_T

Новичок
9
0
Чем открывать код .sf .
И если можно гайды/тему на БХ по написанию sf плагинов в самп.
 
  • Злость
Реакции: GradoFomin

vbg

Известный
41
17
Чем открывать код .sf .
И если можно гайды/тему на БХ по написанию sf плагинов в самп.
 
У

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

Гость
Помогите сконвертировать самповскую строку 1251 в utf-8 для последующего использования в imgui
C++:
ImGui::BulletText("Text: %s", SAMP::convert1251toUTF8(pTextLabel.m_pText).c_str());
C++:
std::string convert1251toUTF8(const char *szString) {
    if (szString == nullptr) {
        return std::string();
    }

    std::string szMultiByteString = szString;
    std::wstring szWideCharString;

    MultiByteToWideChar(
        1251, 0,
        szMultiByteString.data(), szMultiByteString.size(),
        szWideCharString.data(), szMultiByteString.size()
    );

    WideCharToMultiByte(
        65001, 0,
        szWideCharString.data(), szWideCharString.size(),
        szMultiByteString.data(), szWideCharString.size(),
        nullptr, nullptr
    );

    return szMultiByteString;
}

Screenshot_2.png


Screenshot_1.png
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,745
4,815
Помогите сконвертировать самповскую строку 1251 в utf-8 для последующего использования в imgui
C++:
ImGui::BulletText("Text: %s", SAMP::convert1251toUTF8(pTextLabel.m_pText).c_str());
C++:
std::string convert1251toUTF8(const char *szString) {
    if (szString == nullptr) {
        return std::string();
    }

    std::string szMultiByteString = szString;
    std::wstring szWideCharString;

    MultiByteToWideChar(
        1251, 0,
        szMultiByteString.data(), szMultiByteString.size(),
        szWideCharString.data(), szMultiByteString.size()
    );

    WideCharToMultiByte(
        65001, 0,
        szWideCharString.data(), szWideCharString.size(),
        szMultiByteString.data(), szWideCharString.size(),
        nullptr, nullptr
    );

    return szMultiByteString;
}

Посмотреть вложение 95279

Посмотреть вложение 95278
C++:
std::string szMultiByteString{ szString };
std::wstring szWideCharString;
szWideCharString.reserve(szMultiByteString.size() * 2);
MultiByteToWideChar(
    1251, 0,
    szMultiByteString.data(), -1,
    szWideCharString.data(), szMultiByteString.size()
);
szMultiByteString.reserve(szMultiByteString.size() * 4);
WideCharToMultiByte(
        65001, 0,
        szWideCharString.data(), -1,
        szMultiByteString.data(), szWideCharString.size(),
        nullptr, nullptr
);
 
У

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

Гость
C++:
std::string szMultiByteString{ szString };
std::wstring szWideCharString;
szWideCharString.reserve(szMultiByteString.size() * 2);
MultiByteToWideChar(
    1251, 0,
    szMultiByteString.data(), -1,
    szWideCharString.data(), szMultiByteString.size()
);
szMultiByteString.reserve(szMultiByteString.size() * 4);
WideCharToMultiByte(
        65001, 0,
        szWideCharString.data(), -1,
        szMultiByteString.data(), szWideCharString.size(),
        nullptr, nullptr
);
Screenshot_3.png


Не работает 😕
 

Dark_Knight

Me, me and me.
Друг
4,083
2,111
Помогите сконвертировать самповскую строку 1251 в utf-8 для последующего использования в imgui
C++:
ImGui::BulletText("Text: %s", SAMP::convert1251toUTF8(pTextLabel.m_pText).c_str());
C++:
std::string convert1251toUTF8(const char *szString) {
    if (szString == nullptr) {
        return std::string();
    }

    std::string szMultiByteString = szString;
    std::wstring szWideCharString;

    MultiByteToWideChar(
        1251, 0,
        szMultiByteString.data(), szMultiByteString.size(),
        szWideCharString.data(), szMultiByteString.size()
    );

    WideCharToMultiByte(
        65001, 0,
        szWideCharString.data(), szWideCharString.size(),
        szMultiByteString.data(), szWideCharString.size(),
        nullptr, nullptr
    );

    return szMultiByteString;
}

Посмотреть вложение 95279

Посмотреть вложение 95278
30 секунд поиска в гугле.
 

Cake_

Потрачен
Проверенный
263
313
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
  • Нравится
Реакции: #Northn и 3lcode

Dark_Knight

Me, me and me.
Друг
4,083
2,111
@pMozze
https://github.com/ocornut/imgui/bl...f2cff29d15/backends/imgui_impl_win32.cpp#L380 замени на

C++:
case WM_CHAR:
        wchar_t wch;
        MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (char*)&wParam, 1, &wch, 1);
        io.AddInputCharacter(wch);
        break;
Это тоже сделай.
Я пастил этот код. Он тоже не работает
Работает. Ты же не сказал, что не работает в инпате. В буллете все работает прекрасно. Не раз уже тестилось.
 
У

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

Гость
@pMozze
https://github.com/ocornut/imgui/bl...f2cff29d15/backends/imgui_impl_win32.cpp#L380 замени на

C++:
case WM_CHAR:
        wchar_t wch;
        MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (char*)&wParam, 1, &wch, 1);
        io.AddInputCharacter(wch);
        break;
И что мне это даст?
Во-первых это для Wnd Proc'а, чтобы в input'е отображалась кириллица при вводе, а во вторых в wParam символ в кодировке ANSI.
В третьих мне нужно сконвертировать строку сампа (у неё кодировка Windows-1251 насколько мне известно) в UTF-8

Ты же не сказал, что не работает в инпате.
На кой хуй мне инпут? Мне bullet нужен, я проверял - в нём не работает.