Verwahrstelle

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 Scripter,


    nun möchte ich derzeit ein Verwahrstellen System erstellen. Ich habe derzeit das dass Fahrzeug gesperrt wird und nicht nutzbar ist. Es wird ebenfalls vom Server gelöscht.
    Wie ist es nun möglich mehrere Fahrzeuge in einem Dialog anzuzeigen die in der Verwahrstelle sind ?


    Ich danke für jede Hilfe

  • Hey,
    wie wäre es mit einer for schleife?
    also

    for(new i=0;i<MAX_VEHICLES;i++)//MAX_VEHICLES evt anpassen
    {
    new string[250];//länge je nach wie viele cars wer sieht
    if(abgeschleppt==true)//anpassen
    {
    format(string,sizeof(string)," Alle angaben die ausgegebenw erden sollen(wichtig nur das \n zum schluss) \n", die angaben zu dem string);
    }
    ShowPlayerDialog(playerid,Dialog,DIALOG_STYLE_LIST,"Verwahrstelle",string,"Weiter","Abbrechen");
    }



    das wäre mein ansatz

  • Okay schuldige habe ich wohl schlecht erklärt...



    for(new i=0;i<sizeof(cInfo);i++)
    {
    new string[500];
    if(cInfo[i][OWer]==playerid)//anpasssen aufbesitzer also ob der wagen dem gehört
    {
    if(cInfo[i][c_gesperrt] == 1)
    {
    format(string,sizeof(string)," %s %d \n", string, cInfo[i][Hier]);
    }
    }
    }
    ShowPlayerDialog(playerid,Dialog,DIALOG_STYLE_LIST,"Verwahrstelle",string,"Weiter","Abbrechen");


    so Pass auf er geht in der for schleife alles deine wagens die abgeschleppt sind druch und setzt den string
    durch das \n wird nach jedem string gleich ne neue Zeile genommen.
    heisst bei zwei wagen kommt dann beim string beim nächsten durch gang das neue dazu.

  • Ich hab das ganze vorerst nun mit der Modelid strukturiert.



    ocmd:freikaufen(playerid)
    {
    if(PlayerInfo[playerid][pLoggedIn]==false)return 1;
    new string[128];
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][besitzer] == PlayerInfo[playerid][p_id])
    {
    if(cInfo[i][c_gespeert] == 1)
    {
    format(string,sizeof(string),"%s %d \n",string,cInfo[i][model]);
    }
    else
    {
    return SendClientMessage(playerid,COLOR_RED,"Keine gefunden");
    }
    }
    else
    {
    return SendClientMessage(playerid,COLOR_RED,"Kein Besitzer");
    }
    }
    ShowPlayerDialog(playerid,DIALOG_CARFREIKAUFEN_AUSWAHL,DIALOG_STYLE_LIST,"Verwahrstelle",string,"Auswählen","Abbruch");
    return 1;
    }

    allerdings zeigt er mir immer an Keine gefunden obwohl welche in der Verwahrstelle sind

    Einmal editiert, zuletzt von robbi2304 ()

  • Ja da du hier ein return hast
    return SendClientMessage(playerid,COLOR_RED,"Keine gefunden");
    das return beendet somit die ganzeschleife und was darutner kommt
    somit versuchs mal damit

    ocmd:freikaufen(playerid)
    {
    if(PlayerInfo[playerid][pLoggedIn]==false)return 1;
    new string[128],fahrzeugevorhanden=0;
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][besitzer] == PlayerInfo[playerid][p_id])
    {
    if(cInfo[i][c_gespeert] == 1)
    {
    format(string,sizeof(string),"%s %d \n",string,cInfo[i][model]);
    fahrzeugevorhanden=1;
    }
    }
    }
    if( fahrzeugevorhanden==1)
    {
    return ShowPlayerDialog(playerid,DIALOG_CARFREIKAUFEN_AUSWAHL,DIALOG_STYLE_LIST,"Verwahrstelle",string,"Auswählen","Abbruch");
    }
    else
    {
    return SendClientMessage(playerid,COLOR_RED,"Keine Fahrzeuge in der Verwahrstelle");
    }
    return 1;
    }


    und das



    else
    {
    return SendClientMessage(playerid,COLOR_RED,"Kein Besitzer");
    }

    lassen wir auch aus der Schleife weil das genau das gleiche wie mit dem c_gesperrt ist
    Warum?
    also es ist relativ egal ob wir nicht der besitzer vom fahrzeug sind, denn es passiert auch nichts mit dem wagen


    Hoffe du verstehst es mfg. Mogly1

    Einmal editiert, zuletzt von Mogly1 ()

  • dann lass mal printen:

    ocmd:freikaufen(playerid)
    {
    if(PlayerInfo[playerid][pLoggedIn]==false)return 1;
    new string[128],fahrzeugevorhanden=0;
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][besitzer] == PlayerInfo[playerid][p_id])
    {
    printf("ID:%d | Besitzer:%d | Model:%d | Gesperrt:%d",i,cInfo[i][besitzer],cInfo[i][model],cInfo[i][c_gespeert]);
    if(cInfo[i][c_gespeert] == 1)
    {
    format(string,sizeof(string),"%s %d \n",string,cInfo[i][model]);
    fahrzeugevorhanden=1;
    }
    }
    }
    if( fahrzeugevorhanden==1)
    {
    return ShowPlayerDialog(playerid,DIALOG_CARFREIKAUFEN_AUSWAHL,DIALOG_STYLE_LIST,"Verwahrstelle",string,"Auswählen","Abbruch");
    }
    else
    {
    return SendClientMessage(playerid,COLOR_RED,"Keine Fahrzeuge in der Verwahrstelle");
    }
    return 1;
    }

  • Er printet mir 3 von 4 Fahrzeuge.


    Bei der Abfrage scheint aber etwas schief zulaufen


    [19:12:46]
    [19:12:46] ID:0 | Besitzer:3 | Model:496 | Gesperrt:0
    [19:12:46] ID:1 | Besitzer:3 | Model:496 | Gesperrt:0
    [19:12:46] ID:2 | Besitzer:3 | Model:496 | Gesperrt:1


    was mich wundert, ID soll ja eig die Datenbank id sein. Allerdings verwende ich Auto Increment wodurch es id 0 nicht gibt

  • Also alles klar funkt eig alles richtig pass auf...


    printf("ID:%d | Besitzer:%d | Model:%d | Gesperrt:%d",i,cInfo[i][besitzer],cInfo[i][model],cInfo[i][c_gespeert]);


    un die ergebnisse von dir



    [19:12:46]
    [19:12:46] ID:0 | Besitzer:3 | Model:496 | Gesperrt:0
    [19:12:46] ID:1 | Besitzer:3 | Model:496 | Gesperrt:0
    [19:12:46] ID:2 | Besitzer:3 | Model:496 | Gesperrt:1


    stimmen so apss auf die ID ist nullw eil der print das i vond er schleife wieder gibt...
    und dir wird nur ein fahrzeug im dialog gezeigt weil nur 1 Gesperrt ist...
    somit Funktioniert doch alles oder wolltest du es anders haben?

  • na dann zeig mal dein load/save von cars evt. ist da was nicht ganz richtig
    und print mal beim Code
    cInfo[i][db_id], bzw je nach dem wei du es hast aus

    printf("ID:%d | Besitzer:%d | Model:%d | Gesperrt:%d",cInfo[i][db_id],cInfo[i][besitzer],cInfo[i][model],cInfo[i][c_gespeert]);


  • 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, "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]);
    }
    printf("ID:%d | Besitzer:%d | Model:%d | Gesperrt:%d",cInfo[i][db_id],cInfo[i][besitzer],cInfo[i][model],cInfo[i][c_gespeert]);
    }
    return 1;
    }


    print

    [20:00:42] ID:1 | Besitzer:3 | Model:496 | Gesperrt:1
    [20:00:42] ID:0 | Besitzer:0 | Model:0 | Gesperrt:0
    [20:00:42] ID:0 | Besitzer:0 | Model:0 | Gesperrt:0
    [20:00:42] ID:0 | Besitzer:0 | Model:0 | Gesperrt:0

  • printet er soweit richtig. Bis auf das zweite id 1



    [02:41:15] ID:1 | Besitzer:3 | Model:496 | Gesperrt:1
    [02:41:15] ID:2 | Besitzer:3 | Model:496 | Gesperrt:1
    [02:41:15] ID:3 | Besitzer:3 | Model:496 | Gesperrt:0
    [02:41:15] ID:4 | Besitzer:3 | Model:496 | Gesperrt:1
    [02:41:17] ID:0 | Besitzer:3 | Model:496 | Gesperrt:0
    [02:41:17] ID:1 | Besitzer:3 | Model:496 | Gesperrt:1



    getFreeCarID()
    {
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][id_x]==0)return i;
    }
    return 0;
    }

  • du müsstest evt. das anpassen bei
    getFreeCarID()
    da du ja nur die
    cInfo[i][id_x]
    setzt wenn es nicht gesperrt ist, somit überschreibt sich das glaube anch meiner theorie erstell mal noch nen
    "geladen"
    cInfo[i][geladen]
    das setzt du dann auf 1 bei


    OnPlayerCarsLoad
    also so dann

    forward OnPlayerCarsLoad(playerid);
    public OnPlayerCarsLoad(playerid)
    {
    for(new i=0; i<cache_num_rows(); i++)
    {
    new id = getFreeCarID();
    cInfo[id][geladen]=1;



    und bei getfreecarID


    getFreeCarID()
    {
    for(new i=0; i<sizeof(cInfo); i++)
    {
    if(cInfo[i][geladen]==0)return i;
    }
    return 0;
    }


    und wenn das Fahrzeug sich ausloggt alsow eiss ja net wie du es hast musst du geladen wieder 0 setzen dann sollte eigentlich das erstmal wieder richtig gehen ^^

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen