Ah, jetzt seh ich den Fehler. vID - 400 ist falsch. Das muss die Model ID sein, nicht die Vehicle ID.
Debugging ist einfach toll! 
public OnPlayerStateChange(playerid, newstate, oldstate)
{
printf("OnPlayerStateChange wurde aufgerufen! (playerid: %d)", playerid);
if(newstate == PLAYER_STATE_DRIVER)
{
printf("%d ist im Auto als Fahrer",playerid);
new vID = GetPlayerVehicleID(playerid);
new mID = GetVehicleModel(vID);
printf("Vehicle-ID: %d",vID);
for(new i=0; i<sizeof(ahCars); i++)
{
printf("id_x: %d (i=%d)", ahCars[i][id_x],i);
if(ahCars[i][id_x]!=vID) continue;
printf("%s ist im Autohaus. Fahrzeug: %s | i: %d ",SpielerName(playerid),VehicleName[mID-400],i);
SetPVarInt(playerid,"BuyCarID",i);
new string[250];
format(string,250,"{0089E5}Fahrzeug: {FEFEFE}%s\n{0089E5}Kaufpreis: {FEFEFE}%d$\n{0089E5}Kauflevel: {FEFEFE}%d\n\n\
Möchten sie das Fahrzeug kaufen?",VehicleName[mID-400],ahCars[i][c_preis],ahCars[i][c_level]);
ShowPlayerDialog(playerid,DIALOG_AHKAUFEN,DIALOG_STYLE_MSGBOX,"Autohaus",string,"Kaufen","Abbrechen");
printf("Dialog wurde aufgerufen\n%s",string);
break;
}
return 1;
}
return 1;
}
Falls es noch immer nicht klappt, nochmal den Log posten.