2016-12-23 18 views
0

私はコーディングに新しく、何か助けが必要です。私は、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()); 
    } 
} 
+1

物事は声明 'WAITTIME = 200周りにゆがんで行く;'、見当違いの括弧と本質的に起因します。 – Bathsheba

+1

@Bathsheba:主に私が何かを見つけることができないので、それは間違った中括弧とは関係がないと私は考えています。代わりに、 'ケース'自体は大きく歪んでいます。 –

+0

このコードを読めないままにしなければならない場合、今から何年後にやるのですか? 関数を書く。各ケースのコードを小さくしておきます。 –

答えて

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; 
    } 
+0

これはほとんどうまくいくようですが、 VEHICLE :: SET_VEHICLE_CUSTOM_PRIMARY_COLOUR(veh、rand()%255、d()%255、rand()%255); 行、dは未定義の識別子エラーを取得しています。 – Aidan

+0

私はタイプミスをしたようですが、dはrand()でなければなりません。私は私の答えを編集しました – TeaMonkie

+0

ありがとうございました。 – Aidan

2

です。あなたはと同じ通りにさえないcaseラベルを持っています!

case 3:はパブから帰る途中で失われましたか?

+0

[OK]を、私はケースの上にスイッチを追加し、それは働いた。新しいエラーが発生しました。この行でplayerPedはエラーを出しています:Error:識別子 "playerPed"は未定義です。スイッチを追加する前に、playerPedが定義されましたが、その後、エラーが表示されました。申し訳ありませんが、私はこのようなことについてよく分かりません。 – Aidan

+0

if(!PED :: IS_PED_IN_ANY_VEHICLE(playerPed、false))return; – Aidan

+0

プログラムの途中でランダムに 'switch'行を追加することはできません。コードロジックをどこに置かなければならないのか考える必要があります。それがどこにあるのかはわかりません:あなたはプログラマですので、あなたのプログラムの仕組みを決めるのはあなた次第です! –

関連する問題