Dynamic Rent a Car

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
  • Schönen guten Abend liebe Community


    ich habe eben aus purer langeweile einfach mal ein Dynamisches Rent a Car System geschrieben. Habe es einfach mal meinen Vorstellungen nach
    geschrieben. Es basiert auf MySQL das heißt ihr müsst eure Datenbank Daten oben im Script eintragen. Es basiert auf dem Comandsystem 'zcmd'.


    Es wurden folgende Includes verwendet:


    - a_mysql (R5)
    - zcmd


    ___________________________________________________________________________________________________


    Befehle:


    - createrentcar


    ___________________________________________________________________________________________________


    Folgendes kann das Script:


    - Es erstellt die MySQL Tabelle von alleine
    - Ein Mietbares Fahrzeug kann Ingame beliebig erstellt werden
    - Die Position des Mietbaren Fahrzeuges ist die wo der Spieler den Befehl eingibt.
    - Spieler kann Model ID festlegen
    - Spieler kann Mietpreis festlegen
    - Spieler kann Primär/Sekundär Farbe festlegen
    - Spieler kann die Position festlegen wo das Mietfahrzeug spawnen soll wenn es gemietet wurde


    - Die Fahrzeuge werden in einer MySQL Datenbank gespeichert und werden auch geladen und erstellt.
    Ich weiß ich hätte beim Laden mit sscanf arbeiten können war aber zu faul das Plugin rauszusuchen.
    ___________________________________________________________________________________________________



    Screens:






    Download:


    pastebin:
    http://pastebin.com/A8pqZPVQ


    Script+Includes:


    http://www.file-upload.net/dow…entaCar-by-K3VIN.rar.html
    http://www.mediafire.com/?hzn1nyfbw9jx2vs



    Ich bitte um Feedback 8) Viel spaß damit.



    Edit: Bilder hinzugefügt.
    Edit: Script überarbeitet
    Edit: Mediafire Link mit reingepackt.
    Edit: Datei angehangen

  • ShowPlayerDialog(playerid,DIALOG_CREATECAR,DIALOG_STYLE_INPUT,"Rent a Car Fahrzeug erstellen","Bitte gib die ID ein, die in die Datenbank eingeragen wird.\nNicht die Model ID!","absenden","abbrechen");


    Wollte dich mal eben auf den Kleinen Rechtsschreib Fehler hinweisen ^^ "eingeragen" ;D


    Danke ^^ Jetzt weiß ich was ich vergessen habe zu sagen: Wer Rechtschreibfehler findet darf sie behalten :D

  • public OnGameModeInit()
    {
    Connect_To_Database();
    LoadRC();
    mysql_query("CREATE TABLE IF NOT EXISTS `RentCars` (`id` int(11),`Modelid` int(11),`Mietpreis` int(11),`Color1` int(11),`Color2` int(11),`x` varchar(40),`y` varchar(40),`z` varchar(40),`sx` varchar(40),`sy` varchar(40),`sz` varchar(40), PRIMARY KEY(`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;");
    return 1;
    }


    Schlau erst die Sachen zu laden und dann erst die Tabellen zu erstellen


    Auch sehe ich nicht das die MySQL Verbindung beendet wird sobald der Server beendet wird..


    Desweiteren ist es ein GAMEMODE und kein FILTERSCRIPT da du schön main, OnGamemodeInit nimmst etc
    Die leeren Callbacks kann man auch entfernen da du die eh nicht brauchst


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    new string[128],vehicleid = GetPlayerVehicleID(playerid),carid = GetRCIndex(vehicleid),model = RentCar[carid][Modelid];
    SetPVarInt(playerid,"CARID",carid);
    format(string,sizeof(string),"Fahrzeugname: {FFAA00}%s{FEFEFE}\nFahrzeug ID: {FFAA00}%d{FEFEFE}\nMietpreis: {FFAA00}%d$\n\nMöchtest du dieses Fahrzeug mieten ?",FahrzeugNamen[model-400],carid,RentCar[carid][Mietpreis]);
    ShowPlayerDialog(playerid,DIALOG_RENTCAR,DIALOG_STYLE_MSGBOX,"Rent a Car",string,"mieten","verlassen"); return 1;
    }
    return 1;
    }
    Auch cool
    Steig ich jetzt z.B. in ein Fraktionsauto wird mir angezeigt ob ich das Auto mieten will...


    Du solltest die ganzen fehler erst mal beheben denn Bewerten kann ich das "Filterscript" nicht

    All in all it's just another brick in the wall

  • Sollte nun alles behoben sein ;)

  • sieht schonmal nicht so schlecht aus.


    Wenn du in nem filterscript dialoge im enum hast, sölltest du beim ersten dialog ne höhere zahl nehmen, sonst ist das die dialogid 1, diese kann sich überschneiden.

    DIALOG_BAUM=100,


    Wenn du nur 1 befehl benutzt kannst du auch strcmp nehmen - learnd von blackace ^^
    Bei den Dialogen könntest du mit switch/case arbeiten.


    und das lezte was mir auffält ist das du unnötig klammern verwendest, wenn du nach ner abfrage nur eine sache verwendest, brauchst du nur ein return also keine klammern

    stock IstRC(vehicleid)
    {
    for(new a; a<(sizeof(RentVeh)); a++)
    {
    if(RentVeh[a] != vehicleid)continue; return 1;
    }
    return 0;
    }

  • So Schaut das ja schon besser aus
    Jedoch würde ich dir raten eine MySQL Handle anzulegen da es sonst mit nen anderen Gamemode zu überschneidungen kommt (sofern da auch das plugin genutzt wird)


    Und

    Sämtliche Dateien müssen mit der foreneigenen Dateianhang-Funktion hochgeladen werden. Wir empfehlen, auch Screenshots anzuhängen. Der Grund hierfür ist, dass die meisten Links der älteren Themen bereits offline sind und somit das komplette Thema sinnfrei ist.

    All in all it's just another brick in the wall

  • enum
    {
    DIALOG_CREATECAR,
    DIALOG_MODELID,
    DIALOG_RENTPREIS,
    DIALOG_COLOR1,
    DIALOG_COLOR2,
    DIALOG_SPAWNPOS,
    DIALOG_CREATERC,
    DIALOG_RENTCAR
    }
    Erwähnte ich in dem Tutorial nicht, das man bei Filterscripten und Includes, höhere Zahlen nutzen sollte?
    Sonst kommt es zu bösen Überschneidungen ;)


    In deinen OnPlayerKeyStateChange finde ich folgende Zeile
    format(string,sizeof(string),"Fahrzeugname: %s\nFahrzeug ID: %d\nModel ID: %d\nMietpreis: %d$\nPrimärfarbe: %d\nSekundfärbe: %d\nPos X: %f\nPos Y: %f\nPos Z: %f\nSpawnpos X: %f\nSpawnpos Y: %f\nSpawnpos Z: %f\n\n\nMöchtest du dieses Fahrzeug erstellen?", FahrzeugNamen[model-400],GetPVarInt(playerid,"CARID"),GetPVarInt(playerid,"MODELID"),GetPVarInt(playerid,"MIETPREIS"),GetPVarInt(playerid,"COLOR1"),GetPVarInt(playerid,"COLOR2"),GetPVarFloat(playerid,"PX"),GetPVarFloat(playerid,"PY"),GetPVarFloat(playerid,"PZ"),GetPVarFloat(playerid,"SPX"),GetPVarFloat(playerid,"SPY"),GetPVarFloat(playerid,"SPZ"));


    Da frag ich mich ernsthaft was das soll.
    Du speicherst die Variablen erst per SetPlayerPVar ab, welche du bereits als lokale variablen hast und liest sie dann erneut aus,
    das ist inperformant und dämlich.


    for(new i; i<mysql_num_rows(); i++)
    Über diese Zeile muss ich dir glaub ich nichts erzählen, du hörst ja eh nicht auf mich :pinch:


    mysql_fetch_field_row(query,"id"); RentCar[i][cID] = strval(query);
    mysql_fetch_field_row(query,"Modelid"); RentCar[i][Modelid] = strval(query);
    mysql_fetch_field_row(query,"Mietpreis"); RentCar[i][Mietpreis] = strval(query);
    mysql_fetch_field_row(query,"Color1"); RentCar[i][Color1] = strval(query);
    mysql_fetch_field_row(query,"Color2"); RentCar[i][Color2] = strval(query);
    mysql_fetch_field_row(query,"x"); RentCar[i][x] = floatstr(query);
    mysql_fetch_field_row(query,"y"); RentCar[i][y] = floatstr(query);
    mysql_fetch_field_row(query,"z"); RentCar[i][z] = floatstr(query);
    mysql_fetch_field_row(query,"sx"); RentCar[i][sx] = floatstr(query);
    mysql_fetch_field_row(query,"sy"); RentCar[i][sy] = floatstr(query);
    mysql_fetch_field_row(query,"sz"); RentCar[i][sz] = floatstr(query);
    Gestern fragst du mich noch, und jetzt hast du meinen Rat erfolgreich nicht umgesetzt :)


    Warum versuch ich dir eigentlich noch zu helfen, es macht ja eh keinen Sinn :thumbdown:

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Für mich ist es einwenig unübersichtlich deswegen nicht so sauber.


    Mit freundlichen Grüßen
    Vito.Castello

    Ich habe es Zeilendsparend geschrieben ^^ Nicht umbedingt für alles eine Zeile ^^

    Du speicherst die Variablen erst per SetPlayerPVar ab, welche du bereits als lokale variablen hast und liest sie dann erneut aus,

    Wie hätte ich sie denn sonst übergeben sollen ? ..

    Gestern fragst du mich noch, und jetzt hast du meinen Rat erfolgreich nicht umgesetzt


    Warum versuch ich dir eigentlich noch zu helfen, es macht ja eh keinen Sinn

    Ich weiß ich hätte es mit sscanf regeln können, das habe ich auch in meinem eigenen Script schon umgeschrieben ^^
    Jedoch war ich hier zu faul das Plugin raus zu suchen :D


    So Schaut das ja schon besser aus

    Das ich sowas von dir noch einmal über meine Arbeit höre :)
    Hast du eventuell noch andere Verbesserungsvorschläge oder so bezüglich meines Codingstils ? Ich kann nur besser werden :thumbup:

    Einmal editiert, zuletzt von [IRP]K3VIN ()