Auto (Car) Abftrage

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
  • Hall Brotfische,


    Ich möchte abfragen wie viel Autos ein Spieler hat, dazu möchte ich gerne einen Stock machen der mir dann die Anzahl der Fahrzeuge liefert. Nun weiß ich nicht genau wie ich das machen soll...


    Ich hoffe ihr könnt mir helfen :)


    MfG :thumbup:


    Mit freundlichen Grüßen
    German_ScripterHD

  • Du könntest mit Hilfe einer Schleife durch alle Autos gehen, und von jedem Fahrzeug den Besitzer ermitteln. Sollte der Besitzer des Fahrzeuges mit "playerid" übereinstimmen, so lässt du eine Variable hochzählen (++). Wenn die Schleife zu Ende ist, lässt du die variable einfach returnen, und schon hast du die Anzahl der Fahrzeuge von "playerid". ;)
    Falls du nicht weißt was ich meine, dann schicke bitte den Code womit du den Besitzer vom Fahrzeug speicherst.

  • Also wenn ein Spieler am Autohaus ein Auto kauft, wird meine createcarforplayer Funktion ausgeführt.


    createcarforplayer(playerid,modelid,Float:x,Float:y,Float:z,Float:r)
    {
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]!=0)continue;
    cInfo[i][besitzer]=sInfo[playerid][db_id];
    cInfo[i][c_x]=x;
    cInfo[i][c_y]=y;
    cInfo[i][c_z]=z;
    cInfo[i][c_r]=r;
    cInfo[i][model]=modelid;
    cInfo[i][id_x] = CreateVehicle(modelid,x,y,z,r,-1,-1,-1);
    tank[cInfo[i][id_x]] = 100;
    saveCarToDB(playerid,i);
    return 1;
    }
    return 1;
    }


    saveCarToDB(playerid,carid)
    {
    new query[1000];
    format(query,sizeof(query),"INSERT INTO autos (besitzer,model,x,y,z,r) VALUES ('%i','%i','%f','%f','%f','%f')",sInfo[playerid][db_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);
    mysql_function_query(dbhandle,query,true,"carSavedToDB","i",carid);
    return 1;
    }


    Mit freundlichen Grüßen
    German_ScripterHD

  • GetPlayerCars(playerid)
    {
    new count_cars;
    for(new i;i<sizeof cInfo;i++)
    {
    if(cInfo[i][besitzer] == sInfo[playerid][db_id])
    {
    count_cars ++;
    }
    }
    return count_cars;
    }


    //Verwendung:
    printf("playerid %i hat %i Fahrzeuge",playerid,GetPlayerCars(playerid));
    So ;)

  • Vielen Dank, klappt^^


    Ich habe noch eine Frage, undzwar hat diese jetzt nichts mit diesem Theama zutun. Ich möchte wenn man /nearestatm eintippt, das der Näheset ATM angezeigt wird...


    Kann man das irgewendie in diese richtung machen?:


    for(new i=0; i<MAX_ATMS; i++)
    {
    GetPlayerDistanceFromPoint(playerid, atmInfo[i][atm_x] , atmInfo[i][atm_y], atmInfo[i][atm_z])
    //...... Und dann irgenwie mit > & < oder so :)
    }


    Mit freundlichen Grüßen
    German_ScripterHD

  • new closestID = -1,closestMeter = 10000;
    for(new i=0; i<MAX_ATMS; i++)
    {
    new dist = GetPlayerDistanceFromPoint(playerid, atmInfo[i][atm_x] , atmInfo[i][atm_y], atmInfo[i][atm_z]);
    if(dist < closestMeter)
    {
    closestID = i;
    closestMeter = dist;
    }
    }


    atmInfo[closestID] ist dann der nächste ATM

  • SetPlayerCheckpoint(playerid,atmInfo[closestID][atm_x],atmInfo[closestID][atm_y],atmInfo[closestID][atm_Z],4.0);
    Einfach das nach der Schleife einfügen. :D

  • Beitrag von H4rd_B4se ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Okay habe es jetzt so: (Bekomme diesen Fehlercode : [warning 213: tag mismatch])

    ocmd:nearestatm(playerid)
    {
    new closestID = -1,closestMeter = 10000;
    for(new i=0; i<MAX_ATMS; i++)
    {
    new Float:dist = GetPlayerDistanceFromPoint(playerid,atmInfo[i][atm_x],atmInfo[i][atm_y],atmInfo[i][atm_z]); //Fehler
    if(dist < closestMeter)
    {
    closestID = i;
    closestMeter = dist;
    }
    }
    SetPlayerCheckpoint(playerid,atmInfo[closestID][atm_x],atmInfo[closestID][atm_y],atmInfo[closestID][atm_z],3.0);
    return 1;
    }


    Mit freundlichen Grüßen
    German_ScripterHD

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Schreibe die Deklaration mal so, clostestMeter muss auch ein Float: sein.
    new closestID = -1,Float:closestMeter = 10000.0;

  • Beitrag von German_ScripterHD ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Danke, das mit dem ATM geht schonmal aber nochmal zu der Abfrage GetPlayerCars:


    Wenn ich jetzt einegebe /mycars dann kommt du hast 8 Fahrzeuge, das stimmt auch.
    Ich möchte aber das ganze noch in eine Variable formatieren. Leider kommt dann beim print in der Konsole "0" herraus...


    Code:


    format(PlayerCars[playerid],sizeof(PlayerCars[]),"%i",GetPlayerCars(playerid));
    printf("%i",PlayerCars[playerid]);


    Mit freundlichen Grüßen
    German_ScripterHD

  • Mach das einfach so:
    PlayerCars[playerid] = GetPlayerCars(playerid);
    printf("%i",PlayerCars[playerid]);


    PlayerCars darf bei dieser Methode kein String sein.



    => EDIT:
    Das Problem bei deiner Methode ist, das du die Zahl der Fahrzeuge in einem String speicherst, aber dann bei printf %i stehen hast. Falls du deine Methode verwenden möchtest, musst du nur das %i zu %s ändern, dann sollte das passen. (PlayerCars muss dann aber ein String bleiben)

    Einmal editiert, zuletzt von AirM4X ()