Autohaus, Auto soll erstellt werden

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
  • Hast du im Enum P_X, P_Y, P_Z, P_R auch mit Float: definiert?


    und da du id nicht verwendest, kannst du sie auch löschen oder auskommentieren ^^

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Danke, hab es vergessen muss erst mal wieder reinkommen auch wenn ich nicht alles weiß aber das wusste ich


    Habe versucht es umzusetzen irgendwie verstehe ich das nicht ganz mit der Schleife was macht sie?
    Und muss ich die Schleife immer benutzten wenn ich mit den Enum arbeite so wie hier z.B


    Dazu habe ich es so gemacht das die Daten erst mal abgespeichert werden und dann erst das Auto gespawnt wird damit es nicht zu Fehlern kommt das dieses Fahrzeug dann doch an
    einer anderen Stelle spawnt und andere Farben hat als nach dem Kauf (random).


    Woher weiß ich jetzt das dieses Fahrzeug "X" dem Spieler "Y" gehört und es auf seinem Namen abliest
    Ist es diese "ID" in Zeile 2628, weil die ist ja Zuviel ModelID ist ja = MID.


    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Woher weiß ich jetzt das dieses Fahrzeug "X" dem Spieler "Y" gehört und es auf seinem Namen abliest

    Brauchst du nicht. Da das Array auf "playerid" läuft, ist es eindeutig, dass es dem Spieler mit der playerid gehört.



    Ist es diese "ID" in Zeile 2628

    3628 nehme ich an. Die P_ID ist die "id" aus der Datenbank, meiner Annahme nach die id mit AUTO_INCREMENT in der Tabelle.



    Zeile 3624 bis 3637 musst du zu dem hier anpassen:
    for(new d = 0; d < sizeof(PCar[]); d++)
    {
    //Prüfe, ob Fahrzeug existiert. Wenn nicht, nutze den Slot und lege das Fahrzeug an.
    if(PCar[playerid][d][P_MID] == 0)
    {
    PCar[playerid][d][P_X] = SAHSpawn[SP][0];
    PCar[playerid][d][P_Y] = SAHSpawn[SP][1];
    PCar[playerid][d][P_Z] = SAHSpawn[SP][2];
    PCar[playerid][d][P_R] = SAHSpawn[SP][3];
    PCar[playerid][d][P_C1] = FB;
    PCar[playerid][d][P_C2] = FB;
    PCar[playerid][d][P_MID] = GetVehicleModel(Autohausauto1[i]);
    //VID = vehicleid, die solltest du mit speichern, falls du auf das Auto zugreifen willst
    PCar[playerid][d][P_VID] = CreateVehicle(PCar[playerid][d][P_MID],PCar[playerid][d][P_X] , PCar[playerid][d][P_Y], PCar[playerid][d][P_Z], PCar[playerid][d][P_R], PCar[playerid][d][P_C1], PCar[playerid][d][P_C2], -1);
    //Hier dann noch ein INSERT Query für die Datenbank, damit das Auto angelegt wird.
    //...
    //hier einbauen!
    //...
    break;
    }
    }


    Das INSERT Query schickst du dann mit mysql_pquery ab, und im zugehörigen Callback schreibst du PCar[playerid][d][P_ID] = cache_insert_id(); rein.
    Über mysql_pquery gibst du mit "dd" das "d" und "playerid" mit.

  • Super, danke!

    Zitat

    //VID = vehicleid, die solltest du mit speichern, falls du auf das Auto zugreifen willst

    MID ist die VID (ModelID) falls du das meinst also da speicher ich das Vehicle also 500 z.B



    Code
    ?//VID = vehicleid, die solltest du mit speichern, falls du auf das Auto zugreifen willst?
    								PCar[playerid][d][P_VID] = CreateVehicle(PCar[playerid][d][P_MID],PCar[playerid][d][P_X] ,

    Ist damit die VehicleID gemeint? Wenn nein was denn?
    Und wie werde ich dann P_VID nutzen?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • MID ist die VID (ModelID) falls du das meinst also da speicher ich das Vehicle also 500 z.B

    Nein, ich meine die vehicleid.



    Ist damit die VehicleID gemeint? Wenn nein was denn?

    Ja.



    Und wie werde ich dann P_VID nutzen?

    Die brauchst du, um herauszufinden, ob ein Spieler in einem seiner Fahrzeuge sitzt.


    OnPlayerEnterVehicle z.B.:
    new bool:allowed;
    for(new d = 0; d < sizeof(PCar[]); d++)
    {
    if(PCar[playerid][d][P_VID] == vehicleid)
    {
    allowed = true;
    break;
    }
    }
    if(!allowed)
    {
    TogglePlayerControllable(false);
    TogglePlayerControllable(true);
    SendClientMessage(playerid, 0xFF0000FF, "Error: Dieses Fahrzeug gehört dir nicht.");
    return 1;
    }

  • Ich meine das reicht so nicht, kenne das so mit dem INSERT.

    Code
    (3624) : warning 217: loose indentation

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Die Warnung kommt von der falschen Einrückung des Codes.


    Nach dem mysql_format musst du das Query auch absenden, mit mysql_pquery. Gleich wie überall sonst auch.


    Im mysql_format darfst du für die floats nicht %e nutzen, das geht nur für Strings. Nutze %f.

  • Code
    mysql_format(db, query, sizeof(query), "INSERT INTO personalcars (P_X, P_Y) VALUES ('%f','%f')",PCar[playerid][d][P_X],PCar[playerid][d][P_Y]);
    	                                mysql_pquery(db,query);
    									break;

    So kann ich das doch machen, für die nicht "Float:" Werte nehme ich dann weiterhin '%d'
    Und um nach dem Disconnect alles wieder zu speichern benutzte ich anstatt 'INSERT' - 'UPDATE' richtig?


    Sorry das mir solche peinlichen Fehler unterlaufen.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Bevor ich mich an LoadPlayerCars ran mache habe ich wieder eine Frage


    So sieht es ja bei der user-Tabelle aus, wie mach ich das, dass er die Sachen von der Tabelle; Personalcars rausnimmt,
    nach dem Login kann ich ganz normal dann LoadPlayerCars anwenden aber das hier verstehe ich nicht weil LoadPlayerCars reicht ja nicht oder?

    Code
    new query[256];
    	mysql_format(db, query, sizeof(query),"SELECT * FROM user WHERE Username='%e'",Spielername(playerid));
    	mysql_tquery(db,query,"UserCheck","i",playerid);

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • mysql_pquery(db,query);

    Du musst hier noch ein Callback aufrufen und im Callback cache_insert_id() aufrufen.
    Sonst weißt du ja nicht, welche ID vergeben wurde, für das Fahrzeug. Diese benötigst du beim Speichern.
    PCar[playerid][d][P_ID] = cache_insert_id();



    So sieht es ja bei der user-Tabelle aus, wie mach ich das, dass er die Sachen von der Tabelle; Personalcars rausnimmt,

    Kommt drauf an wie deine Tabelle aussieht, in der die Fahrzeuge gespeichert sind.

  • Alles klar, verstanden, zumindest den ersten Teil.
    Richtig das die cache_insert_id(); die ID speichert damit der richtige Spieler auch die richtigen Autos bekommt?


    Die Tabelle sieht so aus dazu muss ich sagen das P_ID Auto Increment an hat und Primär ist. Wenn was falsch ist korrigiert mich bitte, ich weiß das ich normale inticher genommen habe und keine tiny oder ähnliche. Dazu habe ich auch nicht an die Länge gedacht, hab sie sehr sehr grob eingestellt.


    So die Sache die ich ja nicht verstehe wie ich das jetzt so Lade also 'SELECT' Dies habe ich nicht so verstanden, sorry meine Kenntnisse sind schwach was das jetzt angeht mach ich ja nicht oft :P

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Richtig das die cache_insert_id(); die ID speichert damit der richtige Spieler auch die richtigen Autos bekommt?

    Das ist, damit du die P_ID aus der Tabelle, die der neue Datensatz hat, zurück bekommst, damit du das Fahrzeug später sauber speichern kannst.
    Sonst weißt du ja nicht, wo du es hin speichern sollst.



    ich weiß das ich normale inticher genommen habe und keine tiny oder ähnliche. Dazu habe ich auch nicht an die Länge gedacht, hab sie sehr sehr grob eingestellt.

    Spielt kaum eine Rolle bei der Datenmenge.



    Die Tabelle sieht so aus

    Dort fehlt noch die Zuordnung zu dem das Fahrzeug gehört.
    Wenn du eine "user" Tabelle hast, dann bietet es sich an, dass du die ID des Spielers in dieser Fahrzeug-Tabelle als "Besitzer-ID" einträgst.
    Dann kannst du im Code beim Erstellen sagen:
    PCar[playerid][d][P_BID] = PlayerInfo[playerid][db_id; //db_id eben so, wie die ID im PlayerInfo-enum heißt

  • Welcher Variable muss jetzt Auto Increatment an haben und primär sein in der Tabelle?


    http://prntscr.com/kxj2fk


    http://prntscr.com/kxj2ka




    Was mache ich hiermit habe mitbekommen ich kriege die "r" nicht raus warum das ?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Welcher Variable muss jetzt Auto Increatment an haben und primär sein in der Tabelle?

    Die Variable p_dbID.



    Was mache ich hiermit habe mitbekommen ich kriege die "r" nicht raus warum das ?

    Weil GetPlayerPos nur die X, Y und Z Position speichert, nicht die Richtung, in die der Spieler guckt.


    Um die Richtung herauszufinden musst du GetPlayerFacingAngle benutzen.

  • Muss ich nach dem mysql_pquery(db,q)  break; benutzen?


    Dazu eine schwierigere Frage:
    Ich will jetzt noch das man 4 Fahrzeuge haben kann, aber ich frage ja immer ab ob er im ersten drin ist, wie kann ich das machen ob er im primären Fahrzeug drin ist also dieses Fahrzeug soll man auch über das Menü
    auswählen können um es abzuschließen usw.



    Code
    (2097) : error 010: invalid function or declaration
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    1 Error.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Der Befehl bewirkt das man das Fahrzeug wo anders spawnen lässt also parken halt.
    Und das Fahrzeug wird dann auch in der Datenbank gespeichert mit dem Tuning (Farbe etc.) würde ein anderer Spieler das Fahrzeug tunen sagen wir aus Provokation
    z.B Pink oder so müsste ein Spieler der den Schlüssel hat oder der Besitzer das Fahrzeug erst einmal parken,


    Also sozusagen benutzte ich /parken wird das Tuning(Farbe etc:) gespeichert und das Fahrzeug spawnt an der Stelle wieder wo ich es geparkt habe, man parkt das Fahrzeug
    nur wenn man es woanders wieder stehen haben will nach dem Relog oder nachdem das Fahrzeug zerstört wird.


    Eigentlich klappt das so oder nicht?
    Nur was ist ja jetzt wenn ich Autohausauto1 und Autohausauto1_2 habe
    also will es irgendwie abfragen nach dem ausgewählten Fahrzeug.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.