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

F11GAR0.

Потрачен
0
57
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Хз почему, но в студии нельзя сделать jmp адрес.
Записывай адрес в какой-либо регистр. Ну или закрой asm вставку и запиши static uint32_t addr =адрес, и в jmp юзать его.
кароче там немного в другом был прикол, я переписывал fixdist от сртима, и долго думал чё там хук на хук стоит, кароче это были джампы внутри области этой хексовой, я тупо метки ебанул и заработало норм
upload_2019-1-9_17-40-59.png
 

Rjx13

Известный
Проверенный
224
160
Как получить координату кости?
Пример получения кости игрока и отрисовка их. ID костей находятся в CPed.h

Код:
#pragma region DrawBones
                    if (enableDrawBones) {
                        actor_info *actorInfo = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped;
                        CPed* Ped = GAME->GetPools()->GetPed((DWORD*)actorInfo);

                        float posX[15], posY[15];
                        int counter = 0;
                        CVector vPos[15];

                        for (int i = 1; i <= 53; i++)
                        {
                            switch (i)
                            {
                            case 1:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 3:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 4:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);

                                counter++;
                                break;
                            case 5:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 6:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 22:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 23:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 25:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 32:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 33:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 35:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 42:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 43:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 52:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 53:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;

                            }

                        }

                        for (int i = 0; i <= 14; i++) SF->getGame()->convert3DCoordsToScreen(vPos[i].fX, vPos[i].fY, vPos[i].fZ, &posX[i], &posY[i]);

                        SF->getRender()->DrawLine(posX[0], posY[0], posX[1], posY[1], 1, 0xFFFFFFFF);
                        SF->getRender()->DrawLine(posX[0], posY[0], posX[11], posY[11], 1, 0xFFFFFFFF);
                        SF->getRender()->DrawLine(posX[0], posY[0], posX[13], posY[13], 1, 0xFFFFFFFF);

                        SF->getRender()->DrawLine(posX[1], posY[1], posX[2], posY[2], 1, 0xFFFFFFFF);

                        SF->getRender()->DrawLine(posX[2], posY[2], posX[5], posY[5], 1, 0xFFFFFFFF);
                        SF->getRender()->DrawLine(posX[2], posY[2], posX[8], posY[8], 1, 0xFFFFFFFF);
                        SF->getRender()->DrawLine(posX[2], posY[2], posX[3], posY[3], 1, 0xFFFFFFFF);

                        SF->getRender()->DrawLine(posX[3], posY[3], posX[4], posY[4], 1, 0xFFFFFFFF);

                        SF->getRender()->DrawLine(posX[5], posY[5], posX[6], posY[6], 1, 0xFFFFFFFF);

                        SF->getRender()->DrawLine(posX[6], posY[6], posX[7], posY[7], 1, 0xFFFFFFFF);

                        SF->getRender()->DrawLine(posX[8], posY[8], posX[9], posY[9], 1, 0xFFFFFFFF);

                        SF->getRender()->DrawLine(posX[9], posY[9], posX[10], posY[10], 1, 0xFFFFFFFF);
                    }
#pragma endregion DrawBones
 
  • Нравится
Реакции: SiTrak

jenekbueno

Известный
157
69
Пример получения кости игрока и отрисовка их. ID костей находятся в CPed.h

Код:
#pragma region DrawBones
                    if (enableDrawBones) {
                        actor_info *actorInfo = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped;
                        CPed* Ped = GAME->GetPools()->GetPed((DWORD*)actorInfo);

                        float posX[15], posY[15];
                        int counter = 0;
                        CVector vPos[15];

                        for (int i = 1; i <= 53; i++)
                        {
                            switch (i)
                            {
                            case 1:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 3:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 4:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);

                                counter++;
                                break;
                            case 5:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 6:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 22:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 23:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 25:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 32:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 33:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 35:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 42:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 43:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 52:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;
                            case 53:
                                Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                                counter++;
                                break;

                            }

                        }

                        for (int i = 0; i <= 14; i++) SF->getGame()->convert3DCoordsToScreen(vPos[i].fX, vPos[i].fY, vPos[i].fZ, &posX[i], &posY[i]);

                        SF->getRender()->DrawLine(posX[0], posY[0], posX[1], posY[1], 1, 0xFFFFFFFF);
                        SF->getRender()->DrawLine(posX[0], posY[0], posX[11], posY[11], 1, 0xFFFFFFFF);
                        SF->getRender()->DrawLine(posX[0], posY[0], posX[13], posY[13], 1, 0xFFFFFFFF);

                        SF->getRender()->DrawLine(posX[1], posY[1], posX[2], posY[2], 1, 0xFFFFFFFF);

                        SF->getRender()->DrawLine(posX[2], posY[2], posX[5], posY[5], 1, 0xFFFFFFFF);
                        SF->getRender()->DrawLine(posX[2], posY[2], posX[8], posY[8], 1, 0xFFFFFFFF);
                        SF->getRender()->DrawLine(posX[2], posY[2], posX[3], posY[3], 1, 0xFFFFFFFF);

                        SF->getRender()->DrawLine(posX[3], posY[3], posX[4], posY[4], 1, 0xFFFFFFFF);

                        SF->getRender()->DrawLine(posX[5], posY[5], posX[6], posY[6], 1, 0xFFFFFFFF);

                        SF->getRender()->DrawLine(posX[6], posY[6], posX[7], posY[7], 1, 0xFFFFFFFF);

                        SF->getRender()->DrawLine(posX[8], posY[8], posX[9], posY[9], 1, 0xFFFFFFFF);

                        SF->getRender()->DrawLine(posX[9], posY[9], posX[10], posY[10], 1, 0xFFFFFFFF);
                    }
#pragma endregion DrawBones
кто тебя учил плюсам?
 
  • Нравится
Реакции: imring

#Rin

Известный
Всефорумный модератор
1,214
1,035
case 1: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break; case 3: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break; case 4: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break; case 5: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break; case 6: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break; case 22: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break; case 23: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break; case 25: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break; case 32: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break; case 33: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break; case 35: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break; case 42: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break; case 43: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break; case 52: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break; case 53: Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]); counter++; break;
Че за ...?
Перечисляй так:
C++:
case 1: case 3: case 4: case 5: case 6: case 22: // ...
Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
counter++;
break;
 

Harryss

Участник
233
26
Вынес за блок init, но уведомляет об оружии в руке только при загрузке скрипта. Почему лишь при загрузке?
C++:
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(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}Loaded.");
        init = true;  
    }

    // Уведомляет только 1 раз, держа оружие в руке при подгрузке скрипта. без использования static флудит в чат, пытался исправить установкой 0 значения - сразу же заменяет, return'нить - не помогло.
    static int current_weapon = SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon;
    if (current_weapon == 31)
    {
        SF->getSAMP()->getChat()->AddChatMessage(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1 at your right hand.");
        current_weapon = 0;
    }
}
 

Romelo

dev.
Проверенный
540
622
Вынес за блок init, но уведомляет об оружии в руке только при загрузке скрипта. Почему лишь при загрузке?
C++:
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(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}Loaded.");
        init = true; 
    }

    // Уведомляет только 1 раз, держа оружие в руке при подгрузке скрипта. без использования static флудит в чат, пытался исправить установкой 0 значения - сразу же заменяет, return'нить - не помогло.
    static int current_weapon = SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon;
    if (current_weapon == 31)
    {
        SF->getSAMP()->getChat()->AddChatMessage(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1 at your right hand.");
        current_weapon = 0;
    }
}
статик это круто
 
  • Нравится
Реакции: Harryss и Rjx13

jenekbueno

Известный
157
69
Че за ...?
Перечисляй так:
C++:
case 1: case 3: case 4: case 5: case 6: case 22: // ...
Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
counter++;
break;
нахуя здесь свитч обьясните, если можно сразу вызвать функу какую он хочет перед этим поставив проверку на число
 

Soreso

Новичок
4
0
Попытался сделать получение координат кости и рисовать на них, но чё то не то

C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>
#define FUNC_IsVisible 0x536BC0
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS *SF = new SAMPFUNCS();


bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)
{
    if (SUCCEEDED(SF->getRender()->BeginRender())) // если рендерер готов к рисованию
    {
        for (int i = 0; i < SAMP_MAX_PLAYERS; i++)
        {
            actor_info *actorInfo = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped;
            CPed* Ped = GAME->GetPools()->GetPed((DWORD*)actorInfo);

            float posX[15], posY[15];
            int counter = 0;

            CVector vPos[15];

            for (int i = 1; i <= 53; i++)
            {
                switch (i)
                {
                case 1:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 3:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 4:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 5:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 6:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 22:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 23:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 25:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 32:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 33:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 35:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 42:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 43:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 52:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 53:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                }

            }
            if (Ped->IsOnScreen())
            {
                for (int i = 0; i <= 14; i++) SF->getGame()->convert3DCoordsToScreen(vPos[i].fX, vPos[i].fY, vPos[i].fZ, &posX[i], &posY[i]);

                SF->getRender()->DrawLine(posX[0], posY[0], posX[1], posY[1], 2, 0xFFFFFFFF);
                SF->getRender()->DrawLine(posX[0], posY[0], posX[11], posY[11], 2, 0xFFFFFFFF);
                SF->getRender()->DrawLine(posX[0], posY[0], posX[13], posY[13], 2, 0xFFFFFFFF);

                SF->getRender()->DrawLine(posX[1], posY[1], posX[2], posY[2], 2, 0xFFFFFFFF);

                SF->getRender()->DrawLine(posX[2], posY[2], posX[5], posY[5], 2, 0xFFFFFFFF);
                SF->getRender()->DrawLine(posX[2], posY[2], posX[8], posY[8], 2, 0xFFFFFFFF);
                SF->getRender()->DrawLine(posX[2], posY[2], posX[3], posY[3], 2, 0xFFFFFFFF);

                SF->getRender()->DrawLine(posX[3], posY[3], posX[4], posY[4], 2, 0xFFFFFFFF);

                SF->getRender()->DrawLine(posX[5], posY[5], posX[6], posY[6], 2, 0xFFFFFFFF);

                SF->getRender()->DrawLine(posX[6], posY[6], posX[7], posY[7], 2, 0xFFFFFFFF);

                SF->getRender()->DrawLine(posX[8], posY[8], posX[9], posY[9], 2, 0xFFFFFFFF);

                SF->getRender()->DrawLine(posX[9], posY[9], posX[10], posY[10], 2, 0xFFFFFFFF);
            }

            SF->getRender()->EndRender(); // завершаем рисование
        }
    };
    return true; // возвращаем положительный результат
};

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()->registerChatCommand("stillobj", sasas);
        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;
}

В чём ошибка?
 

Rjx13

Известный
Проверенный
224
160
Попытался сделать получение координат кости и рисовать на них, но чё то не то

C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>
#define FUNC_IsVisible 0x536BC0
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS *SF = new SAMPFUNCS();


bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion)
{
    if (SUCCEEDED(SF->getRender()->BeginRender())) // если рендерер готов к рисованию
    {
        for (int i = 0; i < SAMP_MAX_PLAYERS; i++)
        {
            actor_info *actorInfo = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped;
            CPed* Ped = GAME->GetPools()->GetPed((DWORD*)actorInfo);

            float posX[15], posY[15];
            int counter = 0;

            CVector vPos[15];

            for (int i = 1; i <= 53; i++)
            {
                switch (i)
                {
                case 1:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 3:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 4:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 5:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 6:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 22:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 23:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 25:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 32:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 33:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 35:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 42:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 43:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 52:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                case 53:
                    Ped->GetTransformedBonePosition((eBone)i, &vPos[counter]);
                    counter++;
                }

            }
            if (Ped->IsOnScreen())
            {
                for (int i = 0; i <= 14; i++) SF->getGame()->convert3DCoordsToScreen(vPos[i].fX, vPos[i].fY, vPos[i].fZ, &posX[i], &posY[i]);

                SF->getRender()->DrawLine(posX[0], posY[0], posX[1], posY[1], 2, 0xFFFFFFFF);
                SF->getRender()->DrawLine(posX[0], posY[0], posX[11], posY[11], 2, 0xFFFFFFFF);
                SF->getRender()->DrawLine(posX[0], posY[0], posX[13], posY[13], 2, 0xFFFFFFFF);

                SF->getRender()->DrawLine(posX[1], posY[1], posX[2], posY[2], 2, 0xFFFFFFFF);

                SF->getRender()->DrawLine(posX[2], posY[2], posX[5], posY[5], 2, 0xFFFFFFFF);
                SF->getRender()->DrawLine(posX[2], posY[2], posX[8], posY[8], 2, 0xFFFFFFFF);
                SF->getRender()->DrawLine(posX[2], posY[2], posX[3], posY[3], 2, 0xFFFFFFFF);

                SF->getRender()->DrawLine(posX[3], posY[3], posX[4], posY[4], 2, 0xFFFFFFFF);

                SF->getRender()->DrawLine(posX[5], posY[5], posX[6], posY[6], 2, 0xFFFFFFFF);

                SF->getRender()->DrawLine(posX[6], posY[6], posX[7], posY[7], 2, 0xFFFFFFFF);

                SF->getRender()->DrawLine(posX[8], posY[8], posX[9], posY[9], 2, 0xFFFFFFFF);

                SF->getRender()->DrawLine(posX[9], posY[9], posX[10], posY[10], 2, 0xFFFFFFFF);
            }

            SF->getRender()->EndRender(); // завершаем рисование
        }
    };
    return true; // возвращаем положительный результат
};

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()->registerChatCommand("stillobj", sasas);
        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;
}

В чём ошибка?
Код:
            for (int i = 0; i < SAMP_MAX_PLAYERS; i++) // перебор всех игроков
            {
#pragma region ValidPlayer
                // провер¤ем каждого игрока на валидность, зону стрима
                if (SF->getSAMP()->getPlayers()->iIsListed[i] != 1) continue;
                if (SF->getSAMP()->getPlayers()->pRemotePlayer[i] == NULL) continue;
                if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData == NULL) continue;
                if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor == NULL) continue;
                if (SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped == NULL) continue;
                // Если игрок не существует или не в зоне стрима, то пропускаем
#pragma endregion ValidPlayer

Регистрация callback"а в mainloop для кого?
Код:
SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
 

Harryss

Участник
233
26
Функция бесконечно вызывается mainloop'ом, флудит сообщением в чат, как беру оружие в руку. Как решить, если помимо mainloop'а нет подходящих мест для ее вызова?
C++:
void gun_func(void)
{
    int current_weapon = SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon;
    if (current_weapon == 31)
    {
        SF->getSAMP()->getChat()->AddChatMessage(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1.");
    }
}

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;
        init = true;   
    }
    gun_func();
}
 
Последнее редактирование:

iAmerican

Известный
Друг
615
257
Функция бесконечно вызывается mainloop'ом, флудит сообщением в чат, как беру оружие в руку. Как решить, если помимо mainloop'а нет подходящих мест для ее вызова?
C++:
int iTempCurrentWeapon = -1;[/FONT]
void gun_func(void)
{

    int current_weapon = SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon;

    if (current_weapon == 31)
    {
        if (iTempCurrentWeapon != 31) 
        {
            SF->getSAMP()->getChat()->AddChatMessage(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1.");
            iTempCurrentWeapon = 31;
        }
    }
    else 
    {
        iTempCurrentWeapon = -1;
    }
}
[FONT=Tahoma]
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;
        init = true;   
    }
    gun_func();
}

Как то так вроде. Не проверял
 
  • Нравится
Реакции: Harryss

Stiopko

Известный
Проверенный
307
218
Функция бесконечно вызывается mainloop'ом, флудит сообщением в чат, как беру оружие в руку. Как решить, если помимо mainloop'а нет подходящих мест для ее вызова?
C++:
void gun_func(void)
{
    int current_weapon = SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon;
    if (current_weapon == 31)
    {
        SF->getSAMP()->getChat()->AddChatMessage(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1.");
    }
}

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;
        init = true;   
    }
    gun_func();
}
Попробуй вот так, не самый лудший вариант, можеш еще задержку(GetTickCount) поставить на gun_func().
C++:
void gun_func(void)
    {
        static unsigned char current_weapon = -1;
        if (SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon != current_weapon){
            if (current_weapon == 31) SF->getSAMP()->getChat()->AddChatMessage(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1.");
            current_weapon = SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon;
        }
    }

    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;
            init = true;
        }
        gun_func();
    }

Подскажите, для чего нужен #pragma region, и что он делает?
 
  • Нравится
Реакции: Harryss