Unkown command Problem

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Ich habe schon seit langem das Problem, dass das Speichern von privaten Autos einfach nicht klappen will. Immer wenn ich mein Command ausführe bekomme ich nur ERROR: Unkown command zurück. Ich habe alles immer direkt in dem Befehl gehabt, aber jetzt habe ich eine Stock daraus gemacht, immer noch der selbe Fehler: (Ich habe zwei Abfragen bezüglich des Besitzers mal ausgeklammert um Fehler zu vermeiden)
    stock SavePlayerVehicle(playerid)
    {
    new parkID;
    parkID = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid,COLOR_RED,"You have to be in a vehicle to use this command.");
    //if(!IsPrivateCar(parkID))return SendClientMessage(playerid,COLOR_RED,"You can only use this command in your own vehicle.");
    //if(!IsPlayerVehicleOwner(playerid, parkID))return SendClientMessage(playerid,COLOR_RED,"You can only use this command in your own vehicle.");
    GetVehiclePos(parkID,cInfo[parkID][c_x],cInfo[parkID][c_y],cInfo[parkID][c_z]);
    GetVehicleZAngle(parkID,cInfo[parkID][c_r]);
    GetVehicleColor(parkID,cInfo[parkID][vcolor1],cInfo[parkID][vcolor2]);
    cInfo[parkID][tuning0] = GetVehicleComponentInSlot(parkID,0);
    cInfo[parkID][tuning1] = GetVehicleComponentInSlot(parkID,1);
    cInfo[parkID][tuning2] = GetVehicleComponentInSlot(parkID,2);
    cInfo[parkID][tuning3] = GetVehicleComponentInSlot(parkID,3);
    cInfo[parkID][tuning4] = GetVehicleComponentInSlot(parkID,4);
    cInfo[parkID][tuning5] = GetVehicleComponentInSlot(parkID,5);
    cInfo[parkID][tuning6] = GetVehicleComponentInSlot(parkID,6);
    cInfo[parkID][tuning7] = GetVehicleComponentInSlot(parkID,7);
    cInfo[parkID][tuning8] = GetVehicleComponentInSlot(parkID,8);
    cInfo[parkID][tuning9] = GetVehicleComponentInSlot(parkID,9);
    cInfo[parkID][tuning10] = GetVehicleComponentInSlot(parkID,10);
    cInfo[parkID][tuning11] = GetVehicleComponentInSlot(parkID,11);
    cInfo[parkID][tuning12] = GetVehicleComponentInSlot(parkID,12);
    cInfo[parkID][tuning13] = GetVehicleComponentInSlot(parkID,13);
    new query[256];
    format(query,sizeof(query),"UPDATE vehicles SET x='%f',y='%f',z='%f',r='%f',color1='%i',color2='%i',tune0='%i',tune1='%i',tune2='%i',tune3='%i',tune4='%i',tune5='%i',tune6='%i',tune7='%i',tune8='%i',tune9='%i',tune10='%i',tune11='%i',tune12='%i',tune13='%i' WHERE id='%i'",cInfo[parkID][c_x],cInfo[parkID][c_y],
    cInfo[parkID][c_z],
    cInfo[parkID][c_r],
    cInfo[parkID][vcolor1],
    cInfo[parkID][vcolor2],
    cInfo[parkID][tuning0],
    cInfo[parkID][tuning1],
    cInfo[parkID][tuning2],
    cInfo[parkID][tuning3],
    cInfo[parkID][tuning4],
    cInfo[parkID][tuning5],
    cInfo[parkID][tuning6],
    cInfo[parkID][tuning7],
    cInfo[parkID][tuning8],
    cInfo[parkID][tuning9],
    cInfo[parkID][tuning10],
    cInfo[parkID][tuning11],
    cInfo[parkID][tuning12],
    cInfo[parkID][tuning13],
    cInfo[parkID][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    SendClientMessage(playerid,COLOR_RED,"Vehicle parked!");


    return 1;
    }
    Ich bin mir zu 99% sicher es liegt an der parkID in mein Array cInfo.
    cInfo[parkID].
    Wieso bin ich mir so sicher ? Wenn ich alles in eine Schleife packe und das parkID dann durch ggf. "i" ersetze parken zwar alle Fahrzeuge an der selben Position, aber es funktioniert.

  • Habe jetzt das mit dem Unkown Command gelöst indem ich das Array cInfo erhöht habe, aber leider speichern jetzt alle Fahrzeuge auf einer Position.
    enum carEnum{
    id_x,
    model,
    besitzer,
    Float:c_x,
    Float:c_y,
    Float:c_z,
    Float:c_r,
    vcolor1,
    vcolor2,
    tuning0,
    tuning1,
    tuning2,
    tuning3,
    tuning4,
    tuning5,
    tuning6,
    tuning7,
    tuning8,
    tuning9,
    tuning10,
    tuning11,
    tuning12,
    tuning13,
    db_id
    }
    new cInfo[250][carEnum];
    Hier noch zur Demonstration wenn ich das mache speichern zwar alle meiner Privaten Fahrzeuge, aber richtig auf deren Position und nicht alle auf einer :
    CMD:park1(playerid, params[])
    {
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]==0)continue;
    if(cInfo[i][besitzer]!=sInfo[playerid][id0])continue;
    GetVehiclePos(cInfo[i][id_x],cInfo[i][c_x],cInfo[i][c_y],cInfo[i][c_z]);
    GetVehicleZAngle(cInfo[i][id_x],cInfo[i][c_r]);
    new query[256];
    format(query,sizeof(query),"UPDATE vehicles SET x='%f',y='%f',z='%f',r='%f' WHERE id='%i'",cInfo[i][c_x],cInfo[i][c_y],cInfo[i][c_z],cInfo[i][c_r],cInfo[i][db_id]);
    mysql_function_query(dbhandle,query,false,"","");


    }
    return 1;
    }

    Einmal editiert, zuletzt von Oskaar1994 ()

  • new cInfo[250][carEnum];
    250 wird auch nicht unbedingt reichen.
    parkID = GetPlayerVehicleID(playerid);
    parkID kann also zwischen 1 und 2000 liegen.
    Du tust zZt so,als wäre vehicleid IMMER der richtige Index im Array. Ich glaube aber nicht,dass du das so wirklich von Anfang bis Ende durchziehst da es doch recht fehleranfällig ist.


    Ich weiss nicht wie du das System aufziehst, denke aber, dass du hinter "id_x" die vehicleid versteckst.
    Du müsstest also rausfinden in welchem Index des Arrays "cInfo" der Wert von "parkID" dem Wert hinter "id_x" entspricht.
    Wenn du dann den Index gefunden hast,kannst und musst du damit arbeiten in Bezug auf cInfo.


    Bei /park1 machst du ja auch eine Abfrage, um nur die richtigen Einträge von cInfo zu finden mit:
    if(cInfo[i][id_x]==0)continue;
    if(cInfo[i][besitzer]!=sInfo[playerid][id0])continue;

  • Du kannst es probieren und es könnte funktionieren.
    Ich sehe aber nirgendwo wie du den Index beim Erstellen festlegst, daher kann ich das nicht beurteilen. Der Wert von CreateVehicle() müsste dann immer als Index gewählt werden, für die Daten des Fahrzeuges.
    Nur am Rande: Es mit MAX_VEHICLES zu machen wäre aber Speicherverschwendung.

  • Du kannst es probieren und es könnte funktionieren.
    Ich sehe aber nirgendwo wie du den Index beim Erstellen festlegst, daher kann ich das nicht beurteilen. Der Wert von CreateVehicle() müsste dann immer als Index gewählt werden, für die Daten des Fahrzeuges.
    Nur am Rande: Es mit MAX_VEHICLES zu machen wäre aber Speicherverschwendung.


    Hier ein kleiner Ausschnitt wie ich die Fahrzeuge lade:new id=getFreeCarID();
    cInfo[id][id_x]=CreateVehicle(cInfo[id][model],cInfo[id][c_x],cInfo[id][c_y],cInfo[id][c_z],cInfo[id][c_r],cInfo[id][vcolor1],cInfo[id][vcolor2],500);
    Ich kann mir leider immer noch nicht vorstellen wie ich dieses Problem lösen kann.

  • Viel mehr Informationen gibt mir das jetzt auch nicht,da ich jetzt nich getFreeCarID() kenne.
    Denke aber es funktioniert so, wie ich dachte. Ein leerer Slot / Index wird gesucht und dort wird das Fahrzeug dann mit seinen Daten abgelegt.
    Hier ist der Fall: Vehicleid != Index


    Wenn du unbedingt Vehicleid = Index haben möchtest:
    new id=CreateVehicle(model,x,y,z, ...etc); // cInfo[id] kann man hier noch nicht verwenden, da id noch nicht "da ist".
    cInfo[id][id_x]=id;
    cInfo[id][model] = model; // etc


    Wie gesagt, dass ist Speicherverschwendung. Wirklich gut find es das so auch nicht umgesetzt.


    Daher nochmal die andere Methode:

    Zitat

    Ich weiss nicht wie du das System aufziehst, denke aber, dass du hinter "id_x" die vehicleid versteckst.
    Du müsstest also rausfinden in welchem Index des Arrays "cInfo" der Wert von "parkID" dem Wert hinter "id_x" entspricht.
    Wenn du dann den Index gefunden hast,kannst und musst du damit arbeiten in Bezug auf cInfo.

  • Muss ich an dieser Stelle nochmal erwähnen,dass du zu wenig Informationen gibst ?
    Was willst du machen ? Wie willst du es umsetzen ? Dein Problem liegt genau wo ?


    Nebenbei:
    Hast du das System überhaupt selber geschrieben ?! Davon kann ich nämlich gerade nicht ausgehen,da du einfache Anweisungen nicht wirklich verstehst. Sonst frag doch mal den ursprünglichen Autoren des Scriptes.
    Ich hoffe du antwortest auf alles.

  • Mal unabhängig von dem was Goldkiller schon geschrieben hat (er hat völlig Recht!) hier ein Lösungsansatz:



    Bei SavePlayerVehicle:
    new parkID;
    parkID = GetPlayerVehicleID(playerid);

    ersetzen mit:


    new tmpid = GetPlayerVehicleID(playerid), parkID = -1;
    for(new i=0; i<sizeof(cInfo); i++) if(cInfo[i][id_x] == tmpid) parkID = i;
    if(parkID == -1) return SendClientMessage(playerid,COLOR_RED,"This is no private vehicle.");


  • Die Autos werden leider immer noch alle an der gleichen Stelle geparkt. Und zum GoldKiller's Frage. Das Laden der Autos habe ich mit Hilfe von MrMonats Tutorial gemacht, weil ich damals als ich das erstellt habe noch nicht so recht mit MySql zu Recht kam. Den Rest habe ich selber gemacht. Und ich weiß halt nicht welche Informationen du brauchst um mir helfen zu können. Aber wie gesagt ich denke nach wie vor es liegt an der ParkID. Habe jezt lange daran gegrübelt, aber ich komme leider einfach nicht weiter.

  • Dann liegt der Fehler entweder nicht hier, oder nicht nur hier.
    Die Variablen sind zudem richtig toll benannt, da kann man kaum auf etwas schließen.


    Am besten du machst es komplett raus und von Grund auf neu. Dann weißt du was du gemacht hast und kannst eventuelle Fehler direkt beheben.