Versicherungssystem

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
  • Guten Tag leute, ich bräuchte etwas Hilfe da ich schon seit paar Monaten nicht mehr gescriptet habe(Private Probleme)


    Ich wollte jetzt mein Script weiter ausbauen und hatte damals ein Versicherungssystem für Autos angefangen.
    Ich habe bis jetzt den Dialog schon fertig wo man sich die Art(Teilkasko, Vollkasko, Unlimited Respawn) aussuchen kann.
    Jedoch möchte ich, dass wenn man eins auswählt dann die Datenbank durchsucht wird und die Autos auflistet die man hat und dann halt das jeweilige damit versichern kann.
    bsp:
    Welches Auto möchtest du Versichern?
    - Infernus(ID: %d)
    - Sultan(ID: %d)
    - Infernus(ID:%d)


    das halt nur so viele Listitems kommen, so viele wie man halt auch autos besitzt.


    Da ich jetzt nicht weiss was ihr alles braucht gebe ich euch einfach mal paar sachen:


    Spoiler anzeigen
    enum AutoDaten
    {
    Besitzer[34],
    modelID,
    Float:c_x,
    Float:c_y,
    Float:c_z,
    Float:c_a,
    c_color1,
    c_color2,
    c_vID,
    c_Preis,
    c_Gekauft,
    c_Versicherung,
    Text3D:Carlable
    };
    new CarInfo[MAX_AUTOS][AutoDaten];


    Hier mal als beispiel der Deletecar befehl


    Spoiler anzeigen
    ocmd:deletecar(playerid, params[])
    {
    new vid = GetPlayerVehicleID(playerid);
    //if(sscanf(params,"d",vid)) return SendClientMessage(playerid, error, "Nutze: /ffloeschen [Vehicle ID]");
    for(new i=0; i<MAX_AUTOS; i++)
    {
    if(CarInfo[i][c_vID] == vid)
    {
    format(CarInfo[i][Besitzer], 34, "");
    CarInfo[i][modelID] = 0;
    CarInfo[i][c_x] = 0.0;
    CarInfo[i][c_y] = 0.0;
    CarInfo[i][c_z] = 0.0;
    CarInfo[i][c_a] = 0.0;
    CarInfo[i][c_color1] = 0;
    CarInfo[i][c_color2] = 0;
    CarInfo[i][c_Preis] = -1;
    CarInfo[i][c_Gekauft] = -1;
    new query[128];
    format(query, sizeof(query), "DELETE FROM Cars WHERE ID = '%d'", i);
    mysql_tquery(handle, query);
    DestroyVehicle(CarInfo[i][c_vID]);
    CarInfo[i][c_vID] = 0;
    return SendClientMessage(playerid, info, "Fahrzeug gelöscht.");
    }
    }
    return SendClientMessage(playerid, error, "Vehicle-ID ist kein Fraktions-Fahrzeug.");
    }


    Das ganze System ist mit Hilfe von Jeffry seinem Tutorial entstanden, noch dazu hat er mir bei kleinigkeiten geholfen.



    Mit freundlichen Grüßen


    Pit



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Hi ;)


    Der Befehl kann so aussehen:
    ocmd:versicherung(playerid)
    {
    new pname[MAX_PLAYER_NAME], string[512], id;
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
    for(new i=0; i<MAX_AUTOS; i++)
    {
    if(!strcmp(CarInfo[i][Besitzer], pname) && strlen(CarInfo[i][Besitzer]) > 2 && CarInfo[i][modelID] > 0)
    {
    format(string, sizeof(string), "%s%s (ID: %d)\n", string, vNames[CarInfo[i][modelID]-400], id);
    id++;
    }
    }
    if(id == 0) SendClientMessage(playerid, 0xFF0000FF, "Error: Du hast kein Fahrzeug.");
    else ShowPlayerDialog(playerid, DIALOG_VERSICHERUNG, DIALOG_STYLE_LIST, "Welches Fahrzeug?", string, "Ok", "Abbrechen");
    return 1;
    }


    Und der Teil des Dialogs so:
    if(dialogid == DIALOG_VERSICHERUNG)
    {
    if(!response) return 1;
    new pname[MAX_PLAYER_NAME], id;
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
    for(new i=0; i<MAX_AUTOS; i++)
    {
    if(!strcmp(CarInfo[i][Besitzer], pname) && strlen(CarInfo[i][Besitzer]) > 2 && CarInfo[i][modelID] > 0)
    {
    if(listitem == id)
    {
    new string[145];
    format(string, sizeof(string), "Du hast dein %s versichert.", vNames[CarInfo[i][modelID]-400]);
    SendClientMessage(playerid, 0xFF0000FF, string);
    CarInfo[i][c_Versicherung] = 1;
    return 1;
    }
    id++;
    }
    }
    return 1;
    }



    Im Array vNames (gegebenenfalls umbenennen) stehen die Fahrzeugnamen.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Hi Jeffry, erstmal danke für die schnelle Antwort :)


    Leider wird nur das erste Auto angezeigt in meinem fall ein Infernus, trotz das ich noch einen Sultan besitze :)
    In der DB wird der Sultan aber angezeigt und auch ich bin der Besitzer davon.
    Ich habe das aber so gemacht:


    Spoiler anzeigen
    //_______________________________________ Versicherungen _________________________
    if(dialogid == DIALOG_VERSICHERN)
    {
    new string[512];
    if(response == 1)
    {
    for(new i=0; i<MAX_AUTOS; i++)
    {
    if(listitem == 0)
    {
    new pname[MAX_PLAYER_NAME], id;
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);

    if(!strcmp(CarInfo[i][Besitzer], pname) && strlen(CarInfo[i][Besitzer]) > 2 && CarInfo[i][modelID] > 0)
    {
    format(string, sizeof(string), "%s%s (ID: %d)", PlayerVehicle[CarInfo[i][modelID]-400], id);
    id++;
    }
    if(id == 0) SendClientMessage(playerid, 0xFF0000FF, "Error: Du hast kein Fahrzeug.");
    else ShowPlayerDialog(playerid, DIALOG_VERSICHERUNG1, DIALOG_STYLE_LIST, "Welches Fahrzeug?", string, "Ok", "Abbrechen");
    return 1;
    }
    if(listitem == 1)
    {
    new pname[MAX_PLAYER_NAME], id;
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);

    Spoiler anzeigen
    if(!strcmp(CarInfo[i][Besitzer], pname) && strlen(CarInfo[i][Besitzer]) > 2 && CarInfo[i][modelID] > 0)
    {
    format(string, sizeof(string), "%s%s (ID: %d)", PlayerVehicle[CarInfo[i][modelID]-400], id);
    id++;
    }
    if(id == 0) SendClientMessage(playerid, 0xFF0000FF, "Error: Du hast kein Fahrzeug.");
    else ShowPlayerDialog(playerid, DIALOG_VERSICHERUNG2, DIALOG_STYLE_LIST, "Welches Fahrzeug?", string, "Ok", "Abbrechen");
    return 1;
    }
    if(listitem == 2)
    {
    new pname[MAX_PLAYER_NAME], id;
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);

    Spoiler anzeigen
    if(!strcmp(CarInfo[i][Besitzer], pname) && strlen(CarInfo[i][Besitzer]) > 2 && CarInfo[i][modelID] > 0)
    {
    format(string, sizeof(string), "%s%s (ID: %d)", PlayerVehicle[CarInfo[i][modelID]-400], id);
    id++;
    }
    if(id == 0) SendClientMessage(playerid, 0xFF0000FF, "Error: Du hast kein Fahrzeug.");
    else ShowPlayerDialog(playerid, DIALOG_VERSICHERUNG3, DIALOG_STYLE_LIST, "Welches Fahrzeug?", string, "Ok", "Abbrechen");
    return 1;
    }
    return 1;
    }
    if(response == 0)
    {
    SendClientMessage(playerid, error, "Du hast den Vorgang abgebrochen.");
    }
    }
    }
    if(dialogid == DIALOG_VERSICHERUNG1)
    {
    if(!response) return 1;
    new pname[MAX_PLAYER_NAME], id;
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
    for(new i=0; i<MAX_AUTOS; i++)
    {
    if(!strcmp(CarInfo[i][Besitzer], pname) && strlen(CarInfo[i][Besitzer]) > 2 && CarInfo[i][modelID] > 0)
    {
    if(listitem == id)
    {
    new string[145];
    format(string, sizeof(string), "Du hast dein %s versichert1.", PlayerVehicle[CarInfo[i][modelID]-400]);
    SendClientMessage(playerid, 0xFF0000FF, string);
    CarInfo[i][c_Versicherung] = 1;
    return 1;
    }
    id++;
    }
    }
    return 1;
    }
    if(dialogid == DIALOG_VERSICHERUNG2)
    {
    if(!response) return 1;
    new pname[MAX_PLAYER_NAME], id;
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
    for(new i=0; i<MAX_AUTOS; i++)
    {
    if(!strcmp(CarInfo[i][Besitzer], pname) && strlen(CarInfo[i][Besitzer]) > 2 && CarInfo[i][modelID] > 0)
    {
    if(listitem == id)
    {
    new string[145];
    format(string, sizeof(string), "Du hast dein %s versichert2.", PlayerVehicle[CarInfo[i][modelID]-400]);
    SendClientMessage(playerid, 0xFF0000FF, string);
    CarInfo[i][c_Versicherung] = 2;
    return 1;
    }
    id++;
    }
    }
    return 1;
    }
    if(dialogid == DIALOG_VERSICHERUNG3)
    {
    if(!response) return 1;
    new pname[MAX_PLAYER_NAME], id;
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
    for(new i=0; i<MAX_AUTOS; i++)
    {
    if(!strcmp(CarInfo[i][Besitzer], pname) && strlen(CarInfo[i][Besitzer]) > 2 && CarInfo[i][modelID] > 0)
    {
    if(listitem == id)
    {
    new string[145];
    format(string, sizeof(string), "Du hast dein %s versichert3.", PlayerVehicle[CarInfo[i][modelID]-400]);
    SendClientMessage(playerid, 0xFF0000FF, string);
    CarInfo[i][c_Versicherung] = 3;
    return 1;
    }
    id++;
    }
    }
    return 1;
    }


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Oh sorry, mein Fehler.
    Die Zeile in der der Name hinzugefügt wird zu:
    format(string, sizeof(string), "%s%s (ID: %d)\n", string, vNames[CarInfo[i][modelID]-400], id);


    Habe den string nicht übergeben und den Umbruch vergessen. Kommt davon wenn man sich denkt: "Mach ich gleich."

  • Okey ich hab mal alle Autos verkauft und 2 neu gekauft, jetzt bekomm ich die Nachricht das ich kein Auto besitze :o
    Hab schon versucht mit nur 1 Auto, oder mit 2 bei beiden kommt diese Fehlermeldung :/



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Hi Jeffry: sorry das ich dir erst jetzt antworte.
    Der Code vom kauf sieht so aus:


    Spoiler anzeigen
    if(dialogid == DIALOG_BUYCAR)
    {
    if(response == 1)
    {
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, error, "Du bist in keinem Fahrzeug");
    new vehicleid = GetPlayerVehicleID(playerid);
    new lable[64];
    for(new i=0; i<MAX_AUTOS; i++)
    {
    if(CarInfo[i][c_vID] != vehicleid) continue;
    if(CarInfo[i][c_Gekauft] == 0)
    {
    if(SpielerInfo[playerid][pGeld] < CarInfo[i][c_Preis]) return SendClientMessage(playerid, error, "Du hast nicht genug Geld!");
    format(CarInfo[i][Besitzer], 34, "%s",SpielerName(playerid));
    CarInfo[i][c_Gekauft] = 1;
    GivePlayerMoney(playerid, -CarInfo[i][c_Preis]);
    SendClientMessage(playerid, erfolg, "Herzlichen Glückwunsch, du hast dieses Auto gekauft!");
    TogglePlayerControllable(playerid,1);
    format(lable, sizeof(lable), "Besitzer: %s\nKaufpreis: %d\nReparier Kosten: %d",SpielerName(playerid),CarInfo[i][c_Preis], CarInfo[i][c_Preis] / 100);
    Update3DTextLabelText(CarInfo[i][Carlable], 0x0FFF00FF, lable);
    buytcar[playerid] = false;
    SaveAllCars();
    return 1;
    }
    else
    {
    RemovePlayerFromVehicle(playerid);
    TogglePlayerControllable(playerid,1);
    buytcar[playerid] = false;
    SendClientMessage(playerid, error, "Dieses Auto steht nicht zum Verkauf!");
    return 1;
    }
    }
    return SendClientMessage(playerid, error, "Du bist in keinem Fahrzeug.");
    }
    else if(response ==0)
    {
    buytcar[playerid] = false;
    RemovePlayerFromVehicle(playerid);
    TogglePlayerControllable(playerid,1);
    SendClientMessage(playerid, error, "Du hast den Vorgang abgebrochen!");
    }
    }
    return 1;
    }


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • new pname[MAX_PLAYER_NAME], id;
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
    if(!strcmp(CarInfo[i][Besitzer], pname) && strlen(CarInfo[i][Besitzer]) > 2 && CarInfo[i][modelID] > 0)
    {
    format(string, sizeof(string), "%s%s (ID: %d)\n", string, PlayerVehicle[CarInfo[i][modelID]-400], id);
    id++;
    }
    zu:
    new pname[MAX_PLAYER_NAME], id;
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
    printf("i: %d | Besitzer: %s | pname: %s | len: %d | model: %d", i, CarInfo[i][Besitzer], pname, strlen(CarInfo[i][Besitzer]), CarInfo[i][modelID]);
    if(!strcmp(CarInfo[i][Besitzer], pname) && strlen(CarInfo[i][Besitzer]) > 2 && CarInfo[i][modelID] > 0)
    {
    printf("Füge Fahrzeug hinzu.");
    printf("%s (ID: %d)", PlayerVehicle[CarInfo[i][modelID]-400], id);
    format(string, sizeof(string), "%s%s (ID: %d)\n", string, PlayerVehicle[CarInfo[i][modelID]-400], id);
    id++;
    }
    printf("Fertig. id: %d", id);


    Was steht dann im Server Log, wenn du die Liste anzeigen lassen willst?

  • Hi Jeffry,


    tut mir echt leid für die mega späte Antwort doch mein Script war aufgrund des Win 10 Update gelöscht :/
    Hab es jetzt erst wiederhergestellt :)


    Hier:

    SQL
    [13:14:43] Number of vehicle models: 1[13:15:22] i: 0 | Besitzer: Niemand | pname: iCarus | len: 7 | model: 411[13:15:22] Fertig. id: 0


    Mit freundlichen Grüßen


    Jeffry:


    Könntest du mir vielleicht bitte helfen :)?



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Versuche es so:
    if(dialogid == DIALOG_VERSICHERN)
    {
    new string[512];
    if(response == 1)
    {
    for(new i=0; i<MAX_AUTOS; i++)
    {
    new pname[MAX_PLAYER_NAME], id;
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);

    if(!strcmp(CarInfo[i][Besitzer], pname) && strlen(CarInfo[i][Besitzer]) > 2 && CarInfo[i][modelID] > 0)
    {
    format(string, sizeof(string), "%s%s (ID: %d)\n", string, PlayerVehicle[CarInfo[i][modelID]-400], id);
    id++;
    }
    }
    if(id == 0) SendClientMessage(playerid, 0xFF0000FF, "Error: Du hast kein Fahrzeug.");
    else if(listitem == 0) ShowPlayerDialog(playerid, DIALOG_VERSICHERUNG1, DIALOG_STYLE_LIST, "Welches Fahrzeug?", string, "Ok", "Abbrechen");
    else if(listitem == 1) ShowPlayerDialog(playerid, DIALOG_VERSICHERUNG2, DIALOG_STYLE_LIST, "Welches Fahrzeug?", string, "Ok", "Abbrechen");
    else if(listitem == 2) ShowPlayerDialog(playerid, DIALOG_VERSICHERUNG3, DIALOG_STYLE_LIST, "Welches Fahrzeug?", string, "Ok", "Abbrechen");
    return 1;
    }
    else
    {
    SendClientMessage(playerid, error, "Du hast den Vorgang abgebrochen.");
    }
    }


    Du hattest das return an der falschen Stelle drin. Ich habe den Code auch gleich etwas übersichtlicher gemacht.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Hi Jeffry:


    Also momentan funktioniert es nur teilweise, das erste Auto wird mir im Dialog dann angezeigt und ich kann es versichern.
    Habe ich jedoch 2 Autos wird mir trotzdem nur das erste angezeigt und verkaufe ich das erste, wird mir angezeigt das ich kein Fahrzeug habe.


    Mit freundlichen Grüßen



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Ah, sorry. Jetzt habe ich mich selbst mit den Klammern durcheinander gebracht. :wacko:
    Habe es oben editiert, hier auch nochmal:
    if(dialogid == DIALOG_VERSICHERN)
    {
    new string[512];
    if(response == 1)
    {
    for(new i=0; i<MAX_AUTOS; i++)
    {
    new pname[MAX_PLAYER_NAME], id;
    GetPlayerName(playerid, pname, MAX_PLAYER_NAME);

    if(!strcmp(CarInfo[i][Besitzer], pname) && strlen(CarInfo[i][Besitzer]) > 2 && CarInfo[i][modelID] > 0)
    {
    format(string, sizeof(string), "%s%s (ID: %d)\n", string, PlayerVehicle[CarInfo[i][modelID]-400], id);
    id++;
    }
    }
    if(id == 0) SendClientMessage(playerid, 0xFF0000FF, "Error: Du hast kein Fahrzeug.");
    else if(listitem == 0) ShowPlayerDialog(playerid, DIALOG_VERSICHERUNG1, DIALOG_STYLE_LIST, "Welches Fahrzeug?", string, "Ok", "Abbrechen");
    else if(listitem == 1) ShowPlayerDialog(playerid, DIALOG_VERSICHERUNG2, DIALOG_STYLE_LIST, "Welches Fahrzeug?", string, "Ok", "Abbrechen");
    else if(listitem == 2) ShowPlayerDialog(playerid, DIALOG_VERSICHERUNG3, DIALOG_STYLE_LIST, "Welches Fahrzeug?", string, "Ok", "Abbrechen");
    return 1;
    }
    else
    {
    SendClientMessage(playerid, error, "Du hast den Vorgang abgebrochen.");
    }
    }


    Der Dialog war eine Ebene zu weit drinnen.