carinfo hilfe

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
  • Hallo liebe Leute ich brauch doch nochmal eure Hilfe bei meinem Carinfo Befehl.



    Sobald ich den Befehl mit der ID eingebe wird mir ein Ergebnis angezeigt allerdings nicht nur bei cInfo[id][fraktion]==1 sondern auch bei anderen Fahrzeugen die diesen Wert garnicht besitzen.


    Vielleicht kann mir da ja jemand bei einen Rat geben.


    Hier mal der Code



    ocmd:carinfo(playerid,params[])
    {
    if(isACop(playerid))return SendClientMessage(playerid,COLOR_RED,"Nein");
    new string[128],vid,Float:x,Float:y,Float:z,pID;
    if(sscanf(params,"d",vid)) return SendClientMessage(playerid,-1,"/carinfo [CARID]");
    if(vid == INVALID_VEHICLE_ID) return SendClientMessage(playerid,-1,"Ungültige Fahrzeug ID");
    GetVehiclePos(vid,x,y,z);
    if(!IsPlayerInRangeOfPoint(playerid,8,x,y,z)) return SendClientMessage(playerid,-1,"Du bist nicht in der Nähe des Fahrzeugs das du abrufen möchtest!");
    pID = GetVehicleBesitzer(vid);
    new id;
    if(cInfo[id][fraktion]==1)
    {
    format(string,sizeof(string),"Fahrzeug Besitzer: LSPD & Letzter Fahrer: %s. [Fahrzeug ID %i]",LastDriver[vid],vid);
    SendClientMessage(playerid,COLOR_BUSBLUE,string);
    return 1;
    }
    return 1;



    }

  • Versuche es so:
    ocmd:carinfo(playerid,params[])
    {
    if(isACop(playerid))return SendClientMessage(playerid,COLOR_RED,"Nein");
    new string[128],vid,Float:x,Float:y,Float:z,pID;
    if(sscanf(params,"d",vid)) return SendClientMessage(playerid,-1,"/carinfo [CARID]");
    if(vid == INVALID_VEHICLE_ID) return SendClientMessage(playerid,-1,"Ungültige Fahrzeug ID");
    GetVehiclePos(vid,x,y,z);
    if(!IsPlayerInRangeOfPoint(playerid,8,x,y,z)) return SendClientMessage(playerid,-1,"Du bist nicht in der Nähe des Fahrzeugs das du abrufen möchtest!");
    pID = GetVehicleBesitzer(vid);
    for(new id = 0; id < sizeof(cInfo); i++)
    {
    if(cInfo[id][id_x]==vid)
    {
    if(cInfo[id][fraktion]==1)
    {
    format(string,sizeof(string),"Fahrzeug Besitzer: LSPD & Letzter Fahrer: %s. [Fahrzeug ID %i]",LastDriver[vid],vid);
    SendClientMessage(playerid,COLOR_BUSBLUE,string);
    }
    else
    {
    return SendClientMessage(playerid,-1,"Dieses Fahrzeug gehört nicht der Fraktion 1.");
    }
    }
    }
    return 1;
    }


    id_x musst du eventuell zu dem anpassen, was vor CreateVehicle der Fahrzeuge steht.

  • Ich scheine es nun nicht für Privat Fahrzeuge hinzukriegen.


    Hier einmal der Code den ich drunter gesetzt habe



    if(cInfo[id][besitzer])
    {
    format(string,sizeof(string),"Fahrzeug Besitzer: %s & Letzter Fahrer: %s. [Fahrzeug ID %i]",GetVehicleBesitzer(vid),LastDriver[vid],vid);
    SendClientMessage(playerid,COLOR_BUSBLUE,string);
    }
    }


    Mir wird ein komischer Wert in allen %s Variablen ausgegeben

  • Ja klar doch :D




    ocmd:carinfo(playerid,params[])
    {
    if(isACop(playerid))return SendClientMessage(playerid,COLOR_RED,"Nein");
    new string[264],vid,Float:x,Float:y,Float:z,pID;
    if(sscanf(params,"d",vid)) return SendClientMessage(playerid,-1,"/carinfo [CARID]");
    if(vid == INVALID_VEHICLE_ID) return SendClientMessage(playerid,-1,"Ungültige Fahrzeug ID");
    GetVehiclePos(vid,x,y,z);
    if(!IsPlayerInRangeOfPoint(playerid,8,x,y,z)) return SendClientMessage(playerid,-1,"Du bist nicht in der Nähe des Fahrzeugs das du abrufen möchtest!");
    pID = GetVehicleBesitzer(vid);
    for(new id = 0; id < sizeof(cInfo); id++)



    {
    if(cInfo[id][id_x]==vid)
    {
    if(cInfo[id][fraktion]==1)
    {
    format(string,sizeof(string),"Fahrzeug Besitzer: LSPD & Letzter Fahrer: %s. [Fahrzeug ID %i]",LastDriver[vid],vid);
    SendClientMessage(playerid,COLOR_BUSBLUE,string);
    }
    }
    if(cInfo[id][id_x]==vid)
    {
    if(cInfo[id][besitzer])
    {
    new string2[128];
    format(string2,sizeof(string2),"Fahrzeug Besitzer: %s & Letzter Fahrer: %s. [Fahrzeug ID %i]",GetVehicleBesitzer(vid),LastDriver[vid],vid);
    SendClientMessage(playerid,COLOR_BUSBLUE,string2);
    }
    }
    }
    return 1;
    }

  • Versuche es mal so:
    ocmd:carinfo(playerid,params[])
    {
    if(isACop(playerid))return SendClientMessage(playerid,COLOR_RED,"Nein");
    new string[145],vid,Float:x,Float:y,Float:z,pID;
    if(sscanf(params,"d",vid)) return SendClientMessage(playerid,-1,"/carinfo [CARID]");
    if(vid == INVALID_VEHICLE_ID) return SendClientMessage(playerid,-1,"Ungültige Fahrzeug ID");
    GetVehiclePos(vid,x,y,z);
    if(!IsPlayerInRangeOfPoint(playerid,8,x,y,z)) return SendClientMessage(playerid,-1,"Du bist nicht in der Nähe des Fahrzeugs das du abrufen möchtest!");
    pID = GetVehicleBesitzer(vid);
    for(new id = 0; id < sizeof(cInfo); i++)
    {
    if(cInfo[id][id_x]==vid)
    {
    if(cInfo[id][fraktion]==1)
    {
    format(string,sizeof(string),"Fahrzeug Besitzer: LSPD & Letzter Fahrer: %s. [Fahrzeug ID %i]",LastDriver[vid],vid);
    SendClientMessage(playerid,COLOR_BUSBLUE,string);
    }
    else if(cInfo[id][besitzer] == pID)
    {
    GetPlayerName(pID, string, MAX_PLAYER_NAME);
    format(string,sizeof(string),"Fahrzeug Besitzer: %s & Letzter Fahrer: %s. [Fahrzeug ID %i]",string,LastDriver[vid],vid);
    SendClientMessage(playerid,COLOR_BUSBLUE,string);
    }
    else
    {
    SendClientMessage(playerid,-1,"Dieses Fahrzeug gehört nicht der Fraktion 1 oder einem Spieler.");
    }
    return 1;
    }
    }
    return 1;
    }

  • Ich habe deine Vorlage nun eins zu eins übernommen. Allerdings wird mir nun folgendes angezeigt




    else
    {
    SendClientMessage(playerid,-1,"Dieses Fahrzeug gehört nicht der Fraktion 1 oder einem Spieler.");
    }


    ich weiß ganz erlich nicht was da falsch angegeben wurden sein kann

  • Das ganze mache ich folgendermaßen




    loadPlayerCars(playerid)
    {
    new query[128];
    format(query,sizeof(query),"SELECT * FROM autos WHERE besitzer='%i'",PlayerInfo[playerid][p_id]);
    mysql_pquery(handle,query,"OnPlayerCarsLoad","i",playerid);
    return 1;
    }



    forward OnPlayerCarsLoad(playerid);
    public OnPlayerCarsLoad(playerid)
    {
    for(new i=0; i<cache_num_rows(); i++)
    {
    new id = getFreeCarID();
    cache_get_value_name_int(i, "id", cInfo[id][db_id] );//Integer
    cache_get_value_name_int(i, "model", cInfo[id][model]);//Integer
    cache_get_value_name_int(i, "besitzer", cInfo[id][besitzer]);//Integer
    cache_get_value_name_float(i, "x", cInfo[id][c_x]); //Float
    cache_get_value_name_float(i, "y", cInfo[id][c_y]);//Float
    cache_get_value_name_float(i, "z", cInfo[id][c_z]);//Float
    cache_get_value_name_float(i, "r", cInfo[id][c_r]);//Float
    cache_get_value_name_int(i, "c1", cInfo[id][color1]);//Integer
    cache_get_value_name_int(i, "c2", cInfo[id][color2]);//Integer
    cache_get_value_name_int(i, "c3", cInfo[id][color3]);//Integer
    cache_get_value_name_int(i, "key", cInfo[id][key]);//Integer
    cache_get_value_name_int(i, "c_gesperrt", cInfo[id][c_gespeert] );//Integer
    if(cInfo[id][c_gespeert] == 0)
    {
    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][color1],cInfo[id][color2],cInfo[id][color3]);
    }
    }
    return 1;
    }

  • Scheint für mich denke ich in Ordnung zusein aber ich lass mal lieber dich nochmal drauf schauen :D. Du kennst dich damit um einiges besser als ich aus




    GetVehicleBesitzer(vehicelid)
    {
    for(new i = 0; i < sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x] == vehicelid)
    {
    for(new playerid = 0; playerid<MAX_PLAYERS; playerid++)
    {
    if(cInfo[i][besitzer] == playerid) return playerid;
    }
    }
    }
    return 1;
    }

  • Ändere dort mal das
    return 1;
    zu:
    return INVALID_PLAYER_ID;


    Da dies ja immer nur die ID eines Spielers ausgibt, der online ist, liese sich hier der Name nur für Spieler anzeigen, die online sind.
    Falls der Besitzer nicht online ist, wird nichts angezeigt.


    Ist das so gewollt?

  • Es ist so gewollt das wenn ein Spieler nicht Online ist, auch nicht abgefragt werden kann ob das Fahrzeug diesem Spieler gehört.


    Grundhierfür ist, das Fahrzeuge erst erstellt werden wenn das Passwort Richtig eingegeben wurde.
    Sobald der Spieler Disconnected ist das Fahrzeug auch wieder weg


    Aber der Fehler bestand scheinbar im GetVehicleBesitzer :D.


    Denn jetzt klappt es

  • Ok, dann ändere auf jeden Fall das return und schreibe den Befehl so:
    ocmd:carinfo(playerid,params[])
    {
    if(isACop(playerid))return SendClientMessage(playerid,COLOR_RED,"Nein");
    new string[145],vid,Float:x,Float:y,Float:z,pID;
    if(sscanf(params,"d",vid)) return SendClientMessage(playerid,-1,"/carinfo [CARID]");
    if(vid == INVALID_VEHICLE_ID) return SendClientMessage(playerid,-1,"Ungültige Fahrzeug ID");
    GetVehiclePos(vid,x,y,z);
    if(!IsPlayerInRangeOfPoint(playerid,8,x,y,z)) return SendClientMessage(playerid,-1,"Du bist nicht in der Nähe des Fahrzeugs das du abrufen möchtest!");
    pID = GetVehicleBesitzer(vid);
    for(new id = 0; id < sizeof(cInfo); i++)
    {
    if(cInfo[id][id_x]==vid)
    {
    if(cInfo[id][fraktion]==1)
    {
    format(string,sizeof(string),"Fahrzeug Besitzer: LSPD & Letzter Fahrer: %s. [Fahrzeug ID %i]",LastDriver[vid],vid);
    SendClientMessage(playerid,COLOR_BUSBLUE,string);
    }
    else if(IsPlayerConnected(pID) && cInfo[id][besitzer] == PlayerInfo[pID][p_id])
    {
    GetPlayerName(pID, string, MAX_PLAYER_NAME);
    format(string,sizeof(string),"Fahrzeug Besitzer: %s & Letzter Fahrer: %s. [Fahrzeug ID %i]",string,LastDriver[vid],vid);
    SendClientMessage(playerid,COLOR_BUSBLUE,string);
    }
    else
    {
    SendClientMessage(playerid,-1,"Dieses Fahrzeug gehört nicht der Fraktion 1 oder einem Spieler.");
    }
    return 1;
    }
    }
    return 1;
    }

  • Schaut supi aus :D



    Mal eine Frage an dich, mir ist aufgefallen bzw der pawn Compiler,


    das du immer wieder die erste schleife verändert hattest,



    also


    for(new id = 0; id < sizeof(cInfo); i++)


    ich habe diese immer wieder auf


    [pwn]for(new id = 0; id < sizeof(cInfo); id++)[/pwn]


    geändert. Hat das einen bestimmten Grund oder nur gewohnheit ?

  • Oh ja, stimmt, das war mein Fehler, sorry. Durchs Kopieren meines vorherigen Codes habe ich den natürlich immer wieder mitgezogen.
    Das war die Gewohnheit, da ich die Schleifen zu 99% immer mit "i" schreibe. "id" liegt da einfach zu Nahe, da ist die Verführung groß, in die Gewohnheit zu verfallen. :)


    Gut, dass du nachgefragt hast.
    "id++" ist natürlich richtig.