"案例标签只能在交换机中使用"

时间:2016-12-23 11:14:23

标签: c++ menu switch-statement label case

我是编码新手,需要一些帮助。我正在从GTA Mod菜单中整理出案例,并尝试从SDK中添加一个新案例。当我尝试添加它,并为它添加一个案例,以便它知道该怎么做时,我在标题中得到错误。我用C ++编写代码。

    int activeLineIndexVeh = 0;

void process_veh_menu()
{
    const float lineWidth = 230.0;
    const int lineCount = 9;

    std::string caption = "Vehicle Options";

    static struct {
        LPCSTR      text;
        bool        *pState;
        bool        *pUpdated;
    } lines[lineCount] = {
        { "Car Spawner", NULL, NULL },
        { "Random Paint", NULL, NULL },
        { "Fix", NULL, NULL },
        { "Custom Plate", NULL, NULL },
        { "Seat Belt", &featureVehSeatbelt, &featureVehSeatbeltUpdated },
        { "Wrap In Spawned", &featureVehWrapInSpawned, NULL },
        { "Invincible", &featureVehInvincible, &featureVehInvincibleUpdated },
        { "Strong Wheels", &featureVehInvincibleWheels, &featureVehInvincibleWheelsUpdated },
        { "Speed Boost", &featureVehSpeedBoost, NULL }
    };

    DWORD waitTime = 150;
    while (true)
    {
        // timed menu draw, used for pause after active line switch
        DWORD maxTickCount = GetTickCount() + waitTime;
        do
        {
            // draw menu
            draw_menu_line(caption, lineWidth, 7.9, 14.0, 4.0, 4.0, false, true);
            for (int i = 0; i < lineCount; i++)
                if (i != activeLineIndexVeh)
                    draw_menu_line(line_as_str(lines[i].text, lines[i].pState),
                    lineWidth, 4.0, 60.0 + i * 22.8, 4.0, 9.0, false, false);
            draw_menu_line(line_as_str(lines[activeLineIndexVeh].text, lines[activeLineIndexVeh].pState),
                lineWidth + 0.0, 2.0, 60.0 + activeLineIndexVeh * 22.9, 4.0, 7.0, true, false);

            update_features();
            WAIT(0);
        } while (GetTickCount() < maxTickCount);
        waitTime = 0;

        // process buttons
        bool bSelect, bBack, bUp, bDown;
        get_button_state(&bSelect, &bBack, &bUp, &bDown, NULL, NULL);
        if (bSelect)
        {
            menu_beep();

            // common variables
            BOOL bPlayerExists = ENTITY::DOES_ENTITY_EXIST(PLAYER::PLAYER_PED_ID());
            Player player = PLAYER::PLAYER_ID();
            Ped playerPed = PLAYER::PLAYER_PED_ID();

            switch (activeLineIndexVeh)
            {
            case 0:
                if (process_carspawn_menu()) return;
                break;
            case 1:
                if (bPlayerExists)
                {
                    if (PED::IS_PED_IN_ANY_VEHICLE(playerPed, 0))
                    {
                        Vehicle veh = PED::GET_VEHICLE_PED_IS_USING(playerPed);
                        VEHICLE::SET_VEHICLE_CUSTOM_PRIMARY_COLOUR(veh, rand() % 255, rand() % 255, rand() % 255);
                        if (VEHICLE::GET_IS_VEHICLE_PRIMARY_COLOUR_CUSTOM(veh))
                            VEHICLE::SET_VEHICLE_CUSTOM_SECONDARY_COLOUR(veh, rand() % 255, rand() % 255, rand() % 255);
                    }
                    else
                    {
                        set_status_text("player isn't in a vehicle");
                    }
                }
                break;
            case 2:
                if (bPlayerExists)
                    if (PED::IS_PED_IN_ANY_VEHICLE(playerPed, 0))
                        VEHICLE::SET_VEHICLE_FIXED(PED::GET_VEHICLE_PED_IS_USING(playerPed));
                    else
                        set_status_text("player isn't in a vehicle");
                break;
                // switchable features
            default:
                if (lines[activeLineIndexVeh].pState)
                    *lines[activeLineIndexVeh].pState = !(*lines[activeLineIndexVeh].pState);
                if (lines[activeLineIndexVeh].pUpdated)
                    *lines[activeLineIndexVeh].pUpdated = true;
            }
            waitTime = 200;
        }
        else
            if (bBack || trainer_switch_pressed())
            {
                menu_beep();
                break;
            }
            else
                if (bUp)
                {
                    menu_beep();
                    if (activeLineIndexVeh == 0)
                        activeLineIndexVeh = lineCount;
                    activeLineIndexVeh--;
                    waitTime = 150;
                }
                else
                    if (bDown)
                    {
                        menu_beep();
                        activeLineIndexVeh++;
                        if (activeLineIndexVeh == lineCount)
                            activeLineIndexVeh = 0;
                        waitTime = 150;
                    }
        case 3: // error starts here
            Ped playerPed = PLAYER::PLAYER_PED_ID();

            // No point in displaying the keyboard if they aren't in a vehicle
            if (!PED::IS_PED_IN_ANY_VEHICLE(playerPed, false)) return;

            // Invoke keyboard
            GAMEPLAY::DISPLAY_ONSCREEN_KEYBOARD(true, "", "", VEHICLE::GET_VEHICLE_NUMBER_PLATE_TEXT(PED::GET_VEHICLE_PED_IS_IN(playerPed, false)), "", "", "", 9);

            // Wait for the user to edit
            while (GAMEPLAY::UPDATE_ONSCREEN_KEYBOARD() == 0) WAIT(0);

            // Make sure they didn't exit without confirming their change, and that they're still in a vehicle
            if (!GAMEPLAY::GET_ONSCREEN_KEYBOARD_RESULT() || !PED::IS_PED_IN_ANY_VEHICLE(playerPed, false)) return;

            // Update the licenseplate
            VEHICLE::SET_VEHICLE_NUMBER_PLATE_TEXT(PED::GET_VEHICLE_PED_IS_IN(playerPed, false), GAMEPLAY::GET_ONSCREEN_KEYBOARD_RESULT());
    }
}

2 个答案:

答案 0 :(得分:2)

这就是它所说的。您的case标签与switch甚至不在同一条街上!

case 3:在离开酒吧的路上迷路了吗?

答案 1 :(得分:0)

您正在尝试添加案例,您应该在正确的位置执行此操作。尝试在案例2和默认案例之间添加案例3,如下所示:

switch (activeLineIndexVeh)
    {
    case 0:
        if (process_carspawn_menu()) return;
        break;
    case 1:
        if (bPlayerExists)
        {
            if (PED::IS_PED_IN_ANY_VEHICLE(playerPed, 0))
            {
                Vehicle veh = PED::GET_VEHICLE_PED_IS_USING(playerPed);
                VEHICLE::SET_VEHICLE_CUSTOM_PRIMARY_COLOUR(veh, rand() % 255,rand() % 255, rand() % 255);
                    if (VEHICLE::GET_IS_VEHICLE_PRIMARY_COLOUR_CUSTOM(veh))
                        VEHICLE::SET_VEHICLE_CUSTOM_SECONDARY_COLOUR(veh, rand() % 255, rand() % 255, rand() % 255);
                }
                else
                {
                    set_status_text("player isn't in a vehicle");
                }
            }
            break;
    case 2:
        if (bPlayerExists)
            if (PED::IS_PED_IN_ANY_VEHICLE(playerPed, 0))
                    VEHICLE::SET_VEHICLE_FIXED(PED::GET_VEHICLE_PED_IS_USING(playerPed));
            else
                set_status_text("player isn't in a vehicle");
            break;
            // switchable features
    case 3: 
        Ped playerPed = PLAYER::PLAYER_PED_ID();

        // No point in displaying the keyboard if they aren't in a vehicle
        if (!PED::IS_PED_IN_ANY_VEHICLE(playerPed, false)) return;

        // Invoke keyboard
        GAMEPLAY::DISPLAY_ONSCREEN_KEYBOARD(true, "", "", VEHICLE::GET_VEHICLE_NUMBER_PLATE_TEXT(PED::GET_VEHICLE_PED_IS_IN(playerPed, false)), "", "", "", 9);

        // Wait for the user to edit
        while (GAMEPLAY::UPDATE_ONSCREEN_KEYBOARD() == 0) WAIT(0);

        // Make sure they didn't exit without confirming their change, and that they're still in a vehicle
        if (!GAMEPLAY::GET_ONSCREEN_KEYBOARD_RESULT() || !PED::IS_PED_IN_ANY_VEHICLE(playerPed, false)) return;

        // Update the licenseplate
        VEHICLE::SET_VEHICLE_NUMBER_PLATE_TEXT(PED::GET_VEHICLE_PED_IS_IN(playerPed, false), GAMEPLAY::GET_ONSCREEN_KEYBOARD_RESULT());
        default:
            if (lines[activeLineIndexVeh].pState)
                *lines[activeLineIndexVeh].pState = !(*lines[activeLineIndexVeh].pState);
            if (lines[activeLineIndexVeh].pUpdated)
                *lines[activeLineIndexVeh].pUpdated = true;
        }
    default:
        if (lines[activeLineIndexVeh].pState)
            *lines[activeLineIndexVeh].pState = !(*lines[activeLineIndexVeh].pState);
        if (lines[activeLineIndexVeh].pUpdated)
            *lines[activeLineIndexVeh].pUpdated = true;
    }