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

AdCKuY_DpO4uLa

Адский дрочер
Друг
315
667
Пробовал напрямую передавать в Print(), с явным приведением типов (D3DCOLOR)color, так и так даёт неправильные цвета. Синий вместо красного, зелёный вместо лилового и т.д.
Это происходит из-за того, что ты передаешь не правильную последовательность байт, к примеру, ты получил цвет в формате ARGB, а функция принимает RGBA. Поковыряйся с этим, попробуй сперва перекинуть цвет в RGBA, а потом в ARGB, посмотри в каком случае будет правильная отрисовка цвета. Все функции конвертирования есть в гугле
 
  • Нравится
Реакции: Ya Zaregalsya

Ya Zaregalsya

Известный
387
135
Это происходит из-за того, что ты передаешь не правильную последовательность байт, к примеру, ты получил цвет в формате ARGB, а функция принимает RGBA. Поковыряйся с этим, попробуй сперва перекинуть цвет в RGBA, а потом в ARGB, посмотри в каком случае будет правильная отрисовка цвета. Все функции конвертирования есть в гугле
Спасиб да действительно формат в пакете такой ABGR.

C++:
UINT8 bubbleColor[4];
memcpy(bubbleColor, &bubbleData.color, sizeof(bubbleData.color));

pGTADefaultFont->Print(
    bubbleData.text.data(),
    D3DCOLOR_ARGB(bubbleColor[0], bubbleColor[3], bubbleColor[2], bubbleColor[1]),
    bubbleScreenPos.fX,
    bubbleScreenPos.fY, false);
 
  • Нравится
Реакции: AdCKuY_DpO4uLa

F0RQU1N and

Известный
1,309
498
Как можно хукнуть ввод клиентской команды? (преимущественно интересует /quit)
DLL_PROCESS_DETACH вызывается совсем непонятно, и при запуске, и при сворачивании, не подойдет.
Коллбек регистрируемый через SF->getGame()->registerGameDestructorCallback срабатывает корректно, но при наличии fastquit игнорируется.
в самп идб поищи, там уже есть обработчики для этих команд, их и хукай
 

Ya Zaregalsya

Известный
387
135
Можно ли как-то получить stRemotePlayer локального игрока? Или конвертировать stLocalPlayer в ремот? в Не хочется дублировать большой кусок кода для случая если под ид попадётся локальный перс.

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

В идеале получить что-то типа PlayerState как с другими игроками.
 
Последнее редактирование:

Musaigen

abobusnik
Проверенный
1,607
1,365
Как проверить, что локальный игрок сидит на пассажирке или за рулём?
в классе CVehicle должны быть поля m_pDriver или метод GetDriver. Короче, что-то такое. Получаешь и сверяешь с локальным игроком. Если равно, то за рулём, иначе — пассажир.

Можно ли как-то получить stRemotePlayer локального игрока? Или конвертировать stLocalPlayer в ремот? в Не хочется дублировать большой кусок кода для случая если под ид попадётся локальный перс.
Если тебе нужно дублировать код, то что-то ты делаешь явно не так.
 

Ya Zaregalsya

Известный
387
135
в классе CVehicle должны быть поля m_pDriver или метод GetDriver. Короче, что-то такое. Получаешь и сверяешь с локальным игроком. Если равно, то за рулём, иначе — пассажир.


Если тебе нужно дублировать код, то что-то ты делаешь явно не так.
Ну если у тебя есть решение как надо делать, то можешь поделиться. Я нашёл выход в том, чтобы написать несколько функций, которые возвращают нужное значение как в случае локального, так и в случае удалённого игрока.


C++:
    bool DevKit::isPlayerOnFoot(int sampPlayerId)
    {
        if (SF->getSAMP()->getPlayers()->IsPlayerDefined(sampPlayerId, true))
        {
            if (sampPlayerId == SF->getSAMP()->getPlayers()->sLocalPlayerID)
            {
                CPed* pCPed = GAME->GetPools()->GetPed((DWORD*)SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped);
                if (pCPed->GetVehicle() != nullptr)
                {
                }
                if (SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->state == 50)
                {
                    return false;
                }
                else { return true; }
            }
            else
            {
                if (SF->getSAMP()->getPlayers()->pRemotePlayer[sampPlayerId]->pPlayerData->pSAMP_Actor->pGTA_Ped->state == 50)
                {
                    return false;
                }
                else { return true; }
            }
        }
    }
    bool DevKit::isPlayerDriver(int sampPlayerId)
    {
        if (SF->getSAMP()->getPlayers()->IsPlayerDefined(sampPlayerId, true))
        {
            if (sampPlayerId == SF->getSAMP()->getPlayers()->sLocalPlayerID)
            {
                CPed* pCPed = GAME->GetPools()->GetPed((DWORD*)SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped);
                if (SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->state == 50 && pCPed->GetVehicle() != nullptr)
                {
                    if (pCPed->GetVehicle()->GetDriver() == pCPed)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else { return false; }
            }
            else
            {
                CPed* pCPed = GAME->GetPools()->GetPed((DWORD*)SF->getSAMP()->getPlayers()->pRemotePlayer[sampPlayerId]->pPlayerData->pSAMP_Actor->pGTA_Ped);
                if (pCPed->GetVehicle() != nullptr)
                {
                }
                if (SF->getSAMP()->getPlayers()->pRemotePlayer[sampPlayerId]->pPlayerData->pSAMP_Actor->pGTA_Ped->state == 50 && pCPed->GetVehicle() != nullptr)
                {
                    if (pCPed->GetVehicle()->GetDriver() == pCPed)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else { return false; }
            }
        }
    }
    bool DevKit::isPlayerPassenger(int sampPlayerId)
    {
        if (SF->getSAMP()->getPlayers()->IsPlayerDefined(sampPlayerId, true))
        {
            if (sampPlayerId == SF->getSAMP()->getPlayers()->sLocalPlayerID)
            {
                CPed* pCPed = GAME->GetPools()->GetPed((DWORD*)SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped);
                if (pCPed->GetVehicle() != nullptr)
                {
                }
                if (SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->state == 50 && pCPed->GetVehicle() != nullptr)
                {
                    if (pCPed->GetVehicle()->GetDriver() == pCPed)
                    {
                        return false;
                    }
                    else
                    {
                        return true;
                    }
                }
                else { return false; }
            }
            else
            {
                CPed* pCPed = GAME->GetPools()->GetPed((DWORD*)SF->getSAMP()->getPlayers()->pRemotePlayer[sampPlayerId]->pPlayerData->pSAMP_Actor->pGTA_Ped);
                if (pCPed->GetVehicle() != nullptr)
                {
                }
                if (SF->getSAMP()->getPlayers()->pRemotePlayer[sampPlayerId]->pPlayerData->pSAMP_Actor->pGTA_Ped->state == 50 && pCPed->GetVehicle() != nullptr)
                {
                    if (pCPed->GetVehicle()->GetDriver() == pCPed)
                    {
                        return false;
                    }
                    else
                    {
                        return true;
                    }
                }
                else { return false; }
            }
        }
    }
    int DevKit::isPassengerDriveBy(int sampPlayerId)
    {
        if (SF->getSAMP()->getPlayers()->IsPlayerDefined(sampPlayerId, true))
        {
            if (sampPlayerId == SF->getSAMP()->getPlayers()->sLocalPlayerID)
            {
                CPed* pCPed = GAME->GetPools()->GetPed((DWORD*)SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped);
                if (SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->state == 50 && pCPed->GetVehicle() != nullptr)
                {
                    return SF->getSAMP()->getPlayers()->pLocalPlayer->iPassengerDriveBy;
                }
                else { return -1; }
            }
            else
            {
                CPed* pCPed = GAME->GetPools()->GetPed((DWORD*)SF->getSAMP()->getPlayers()->pRemotePlayer[sampPlayerId]->pPlayerData->pSAMP_Actor->pGTA_Ped);
                if (SF->getSAMP()->getPlayers()->pRemotePlayer[sampPlayerId]->pPlayerData->pSAMP_Actor->pGTA_Ped->state == 50 && pCPed->GetVehicle() != nullptr)
                {
                    return SF->getSAMP()->getPlayers()->pLocalPlayer->iPassengerDriveBy;
                }
                else { return -1; }
            }
        }
    }
    stPassengerData DevKit::getPassengerData(int sampPlayerId)
    {
        if (sampPlayerId == SF->getSAMP()->getPlayers()->sLocalPlayerID)
        {
            return SF->getSAMP()->getPlayers()->pLocalPlayer->passengerData;
        }
        else
        {
            return SF->getSAMP()->getPlayers()->pRemotePlayer[sampPlayerId]->pPlayerData->passengerData;
        }
    }
    stInCarData DevKit::getInCarData(int sampPlayerId)
    {
        if (sampPlayerId == SF->getSAMP()->getPlayers()->sLocalPlayerID)
        {
            return SF->getSAMP()->getPlayers()->pLocalPlayer->inCarData;
        }
        else
        {
            return SF->getSAMP()->getPlayers()->pRemotePlayer[sampPlayerId]->pPlayerData->inCarData;
        }
    }
    stOnFootData DevKit::getOnFootData(int sampPlayerId)
    {
        if (sampPlayerId == SF->getSAMP()->getPlayers()->sLocalPlayerID)
        {
            return SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;
        }
        else
        {
            return SF->getSAMP()->getPlayers()->pRemotePlayer[sampPlayerId]->pPlayerData->onFootData;
        }
    }
 

Ya Zaregalsya

Известный
387
135
Как сделать чтобы машина не исчезала после взрыва? Заспавнена локально без синхры.
 

Shepi

Активный
178
37
ребят, я кароч скачал этот ваш визуал студио, скачал директИкс СДК, и тому подобные вещи. Решил собрать sf плагин и кароч послали меня

вывело в консоль:
Сборка начата…
1>------ Сборка начата: проект: SFPlugin, Конфигурация: Release Win32 ------
1>main.cpp
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\google\dense_hash_map(106): error C2065: hash_compare: необъявленный идентификатор
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\SharedUtil.FastHashMap.h(70,6): message : выполняется компиляция ссылки на экземпляр класс шаблон функции "SharedUtil::CFastHashMap<K,V>"
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\SharedUtil.FastHashMap.h(56,41): error C2974: "google::dense_hash_map": недопустимый аргумент шаблон для "HashFcn", ожидается тип
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\google\dense_hash_map(109,22): message : см. объявление "google::dense_hash_map"
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\SharedUtil.FastHashMap.h(56,41): error C2976: google::dense_hash_map: слишком мало аргументов шаблон
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\google\dense_hash_map(109,22): message : см. объявление "google::dense_hash_map"
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\SharedUtil.FastHashMap.h(57): error C2955: "google::dense_hash_map": для использования класс шаблон требуется список аргументов шаблон
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\google\dense_hash_map(109,22): message : см. объявление "google::dense_hash_map"
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\google\dense_hash_set(110): error C2065: hash_compare: необъявленный идентификатор
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\SharedUtil.FastHashSet.h(45,6): message : выполняется компиляция ссылки на экземпляр класс шаблон функции "SharedUtil::CFastHashSet<K>"
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\SharedUtil.FastHashSet.h(37,41): error C2974: "google::dense_hash_set": недопустимый аргумент шаблон для "HashFcn", ожидается тип
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\google\dense_hash_set(113,22): message : см. объявление "google::dense_hash_set"
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\SharedUtil.FastHashSet.h(37,41): error C2976: google::dense_hash_set: слишком мало аргументов шаблон
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\google\dense_hash_set(113,22): message : см. объявление "google::dense_hash_set"
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\SharedUtil.FastHashSet.h(38): error C2955: "google::dense_hash_set": для использования класс шаблон требуется список аргументов шаблон
1>E:\Users\shepe\Desktop\sf\SAMPFUNCS SDK\SF Plugin Template\SFPlugin\game_api\sdk\google\dense_hash_set(113,22): message : см. объявление "google::dense_hash_set"
1>Сборка проекта "SFPlugin.vcxproj" завершена с ошибкой.
========== Сборка: успешно выполнено — 0 , со сбоем — 1, в актуальном состоянии — 0, пропущено — 0 ==========
========== Сборка запущено в 12:32 PM, заняло 44,731 с ==========


чо делать
 

ARMOR

Модератор по раксампу
Модератор
4,936
6,738
ребят, я кароч скачал этот ваш визуал студио, скачал директИкс СДК, и тому подобные вещи. Решил собрать sf плагин и кароч послали меня

вывело в консоль:



чо делать
Компоненты сборки 2019 поставь а настройках, а не 2022. Если у тебя их нет - установи в Visual Studio Installer
 
  • Нравится
Реакции: Randy и Shepi

Гриша23079

Потрачен
3
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как проверить 3Dtext на существование в версии 5.5.1?
 

Smeruxa

Известный
1,361
722
как получить угол поворота камеры? Как персонажа, только камеры
 

Smeruxa

Известный
1,361
722
GAME->GetCamera()->GetCam(GAME->GetCamera()->GetActiveCam())->GetDirection()
Оно возвращает не угол, а требует две координаты, а какие брать нужно?
Я такой код попробовал
C++:
CCam *camera = GAME->GetCamera()->GetCam(GAME->GetCamera()->GetActiveCam());
CVector camera_position = *camera->GetSource();
camera->GetDirection(camera_position.fX, camera_position.fY);
float angle = atan2(camera_position.fY, camera_position.fX);
PEDSELF->SetCurrentRotation(angle);
сделал, вращение камеры за игроком, кому нужно будет ->
C++:
CCam* camera = GAME->GetCamera()->GetCam(GAME->GetCamera()->GetActiveCam());
CVector camera_position = *camera->GetSource();
CVector camera_last = *camera->GetTargetHistoryPos();
CVector new_vector = { camera_last.fX - camera_position.fX, camera_last.fY - camera_position.fY, camera_position.fZ};
float angle = atan2(new_vector.fY, new_vector.fX) + (90 * (PI / 180));
float new_angle = atan2(sin(angle), cos(angle));
PEDSELF->SetCurrentRotation(new_angle);
 
Последнее редактирование:
  • Нравится
Реакции: Z3roKwq