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

ishi

Известный
493
110
Как заставить vector и string в std выделять динамическую память, а не стек?
 

_Vine_

Активный
154
57
Как заставить vector и string в std выделять динамическую память, а не стек?
Динамически выделить std::string или std::vector

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(D3DCOLOR_XRGB(255,55,55), "хуйня загружена." );

        init = true;
    }

    if (SF->getSAMP()->getDialog()->iIsActive && (SF->getSAMP()->getDialog()->DialogID == 1)
    {
            static DWORD dwTime = 0;
            char result[5];
            char * text = "лох";
            static int state = 0;

            switch (state)
            {
                case 0: dwTime = GetTickCount(); state ++;
                case 1:
                {
                    if (GetTickCount() - dwTime > 500)
                    {
                        sprintf(result, "%c", text[0]);
                        SF->getSAMP()->getDialog()->SetInputText(result);
                        state ++;
                        dwTime = GetTickCount();
                    }

                }
                case 2:
                {
                    if (GetTickCount() - dwTime > 600)
                    {
                        sprintf(result, "%c%c", text[0], text[1]);
                        SF->getSAMP()->getDialog()->SetInputText(result);
                        state ++;
                        dwTime = GetTickCount();
                    }

                }
                case 3:
                {
                    if (GetTickCount() - dwTime > 700)
                    {
                        sprintf(result, "%c%c%c", text[0], text[1], text[2]);
                        SF->getSAMP()->getDialog()->SetInputText(result);
                        state ++;
                        dwTime = GetTickCount();
                    }

                }
            }
            char result2[255];
            sprintf(result2, "%d | %d | %d", GetTickCount(), GetTickCount() - dwTime, state);
            SF->getSAMP()->getChat()->AddChatMessage(-1, result2);
    }





}

если в зоне стрима есть человек, то скрипт сразу переходит к state 3, то есть вводу последнего символа

Ты забыл оператор break после case X:
C++:
switch (a){
case 0: {
// code
} break;
case 1: {
// code
} break;
}
 
Последнее редактирование:

_Vine_

Активный
154
57
Он должен стоять внутри конструкции.
Если ты про скобки после case - то их можно вообще не ставить, и break может быть хоть в них, хоть за ними.
C++:
    for (int i = 0; i < 4; i++) {
        printf("Switch test %d: ", i);
        switch (i) {
        case 0: printf("1 ");
        case 1: {
            printf("2 ");
        }
        case 2: {
            printf("3 ");
            break;
        }
        case 3: {
            printf("4 ");
        } break;
        }
        printf("\n");
    }
Вывод:
Код:
Switch test 0: 1 2 3
Switch test 1: 2 3
Switch test 2: 3
Switch test 3: 4
 

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,982
Если ты про скобки после case - то их можно вообще не ставить
Причем тут синтаксис? При использовании многослойного switch/case, внешний break нарушит слой и произойдет незапланированный выход. Зачем лишний раз себе палку в колеса пихать?
 

_Vine_

Активный
154
57
Причем тут синтаксис? При использовании многослойного switch/case, внешний break нарушит слой и произойдет незапланированный выход. Зачем лишний раз себе палку в колеса пихать?
Можешь привести пример того, где break нарушит слой?
 
  • Нравится
Реакции: Receiver

Receiver

leet-cheats 👑
Проверенный
619
882
C++:
            static DWORD dwTime = 0;

            switch (state)
            {
                case 0: dwTime = GetTickCount(); SF->getSAMP()->getDialog()->SetInputText(""); state++;
                case 1:
                {
                    if (GetTickCount() - dwTime > (DWORD)cc_delay_1)
                    {
                        SF->getSAMP()->getDialog()->SetInputText("Л");
                        state ++;
                        dwTime = GetTickCount();
                    }

                }
                case 2:
                {
                    if (GetTickCount() - dwTime > (DWORD)cc_delay_2)
                    {
                        SF->getSAMP()->getDialog()->SetInputText("О");
                        state ++;
                        dwTime = GetTickCount();
                    }

                }
                case 3:
                {
                    if (GetTickCount() - dwTime > (DWORD)cc_delay_3)
                    {
                        SF->getSAMP()->getDialog()->SetInputText("Х");
                        state ++;
                        dwTime = GetTickCount();
                    }
                }
               case 6:
                {
                    if (GetTickCount() - dwTime > (DWORD)cc_delay_4)
                    {
                        SF->getSAMP()->getDialog()->Close(1);
                        state = 0;
                    }
                }
        }

Скрипт моментально вводит слово и переходит к state 6 (закрытию диалога), как пофиксеть
 

_Vine_

Активный
154
57
C++:
            static DWORD dwTime = 0;

            switch (state)
            {
                case 0: dwTime = GetTickCount(); SF->getSAMP()->getDialog()->SetInputText(""); state++;
                case 1:
                {
                    if (GetTickCount() - dwTime > (DWORD)cc_delay_1)
                    {
                        SF->getSAMP()->getDialog()->SetInputText("Л");
                        state ++;
                        dwTime = GetTickCount();
                    }

                }
                case 2:
                {
                    if (GetTickCount() - dwTime > (DWORD)cc_delay_2)
                    {
                        SF->getSAMP()->getDialog()->SetInputText("О");
                        state ++;
                        dwTime = GetTickCount();
                    }

                }
                case 3:
                {
                    if (GetTickCount() - dwTime > (DWORD)cc_delay_3)
                    {
                        SF->getSAMP()->getDialog()->SetInputText("Х");
                        state ++;
                        dwTime = GetTickCount();
                    }
                }
               case 6:
                {
                    if (GetTickCount() - dwTime > (DWORD)cc_delay_4)
                    {
                        SF->getSAMP()->getDialog()->Close(1);
                        state = 0;
                    }
                }
        }

Скрипт моментально вводит слово и переходит к state 6 (закрытию диалога), как пофиксеть
C++:
            static DWORD dwTime = 0;

            switch (state)
            {
                case 0: dwTime = GetTickCount(); SF->getSAMP()->getDialog()->SetInputText(""); state++; break;
                case 1:
                {
                    if (GetTickCount() - dwTime > (DWORD)cc_delay_1)
                    {
                        SF->getSAMP()->getDialog()->SetInputText("Л");
                        state ++;
                        dwTime = GetTickCount();
                    }

                } break;
                case 2:
                {
                    if (GetTickCount() - dwTime > (DWORD)cc_delay_2)
                    {
                        SF->getSAMP()->getDialog()->SetInputText("О");
                        state ++;
                        dwTime = GetTickCount();
                    }

                } break;
                case 3:
                {
                    if (GetTickCount() - dwTime > (DWORD)cc_delay_3)
                    {
                        SF->getSAMP()->getDialog()->SetInputText("Х");
                        state ++;
                        dwTime = GetTickCount();
                    }
                } break;
               case 6:
                {
                    if (GetTickCount() - dwTime > (DWORD)cc_delay_4)
                    {
                        SF->getSAMP()->getDialog()->Close(1);
                        state = 0;
                    }
                } break;
        }
 
  • Нравится
Реакции: Receiver

Vadim.dll

Известный
168
81
Как запустить ЖТА и пропустить всю фигню вначале?
У меня получилось убрать меню и перейти сразу к загрузке, но там начинается катсцена и жта виснет. Как ее пропустить, что нужно занопить?
 

ALF

Известный
Проверенный
320
539
Как запустить ЖТА и пропустить всю фигню вначале?
У меня получилось убрать меню и перейти сразу к загрузке, но там начинается катсцена и жта виснет. Как ее пропустить, что нужно занопить?
https://github.com/Whitetigerswt/gtasa_crashfix/blob/master/crashes/crashes/quickload.cpp#L104
 

Vadim.dll

Известный
168
81

Вложения

  • upload_2019-5-28_23-40-8.png
    upload_2019-5-28_23-40-8.png
    177.7 KB · Просмотры: 183

Receiver

leet-cheats 👑
Проверенный
619
882
C++:
bool RegWriteInt(HKEY key, const char *name, int value)
{
    DWORD val = value;
    return RegSetValueExA(key, name, 0, REG_DWORD, (byte *)&val, 1) == ERROR_SUCCESS;
}

bool RegReadInt(HKEY key, const char *name, int &value)
{
    DWORD val = 0, type = REG_DWORD, size = 4;
    bool result = RegQueryValueExA(key, name, NULL, &type, (byte *)&val, &size) == ERROR_SUCCESS;
    value = val;
    return result;
}
нужно сделать чтение и запись int в реестр, не работает, что не так ?
 

Неадекватная сова

Известный
Проверенный
208
147
C++:
bool RegWriteInt(HKEY key, const char *name, int value)
{
    DWORD val = value;
    return RegSetValueExA(key, name, 0, REG_DWORD, (byte *)&val, 1) == ERROR_SUCCESS;
}

bool RegReadInt(HKEY key, const char *name, int &value)
{
    DWORD val = 0, type = REG_DWORD, size = 4;
    bool result = RegQueryValueExA(key, name, NULL, &type, (byte *)&val, &size) == ERROR_SUCCESS;
    value = val;
    return result;
}
нужно сделать чтение и запись int в реестр, не работает, что не так ?
https://blast.hk/threads/13855/