Erstele Spieler autos in die DB speicher

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Erstele Spieler autos in die DB speicher

    Guten Morgen

    Ich habe es geschafft das Spielerfahrzeuge erstellt werden aber wie ich die in die Datenbank rein bekommen für die Spieler ist mir noch ein sehr großes rätzel:

    Wie ich nun anfangen soll das die Fahrzeuge gespeichert werden in die db noch aus der db geladen werden hoffe ich auf eure hilfe

    Mein Code für Spielerfahrzeuge erstellen sieht wie folgt aus:


    Fahrzeugenum:
    [spoiler

    Quellcode

    1. enum fahrzeugEnum
    2. {
    3. faid,
    4. besitzer[MAX_PLAYER_NAME],
    5. model,
    6. Float:c_x,
    7. Float:c_y,
    8. Float:c_z,
    9. Float:c_r
    10. }
    11. new cInfo[50][fahrzeugEnum];
    Alles anzeigen
    [/spoiler]

    PlayerCar:
    [spoiler

    Quellcode

    1. PlayerCar(playerid,modelid,Float:x,Float:y,Float:z,Float:r)
    2. {
    3. for(new i=0; i<sizeof(cInfo); i++)
    4. {
    5. if(cInfo[i][faid]!=0)continue;
    6. GetPlayerName(playerid,cInfo[i][besitzer],MAX_PLAYER_NAME);
    7. cInfo[i][c_x] =x;
    8. cInfo[i][c_y] =y;
    9. cInfo[i][c_z] =z;
    10. cInfo[i][c_r] =r;
    11. cInfo[i][model]=modelid;
    12. cInfo[i][faid] = CreateVehicle(modelid,x,y,z,r,-1,-1,-1);
    13. new string[128];
    14. format(string,sizeof(string),"Das Fahrzeug cInfo[%i] wurde erstellt",i);
    15. SendClientMessageToAll(rot,string);
    16. return 1;
    17. }
    18. return 1;
    19. }
    Alles anzeigen
    [/spoiler]

    createcar:
    Spoiler anzeigen

    Quellcode

    1. ocmd:createcar(playerid,params[])
    2. {
    3. if(!isAdmin(playerid,6))return SendClientMessage(playerid,rot,"Dein Admingrang ist zu niedrig.");
    4. new mID,pID;
    5. if(sscanf(params,"ui",pID,mID))return SendClientMessage(playerid,rot,"INFO: /createcar[playerid][model]");
    6. if(mID<400||mID>611)return SendClientMessage(playerid,rot,"Ungültiges Model");
    7. new Float:xc,Float:yc,Float:zc,Float:rc;
    8. GetPlayerPos(pID,xc,yc,zc);
    9. GetPlayerFacingAngle(pID,rc);
    10. PlayerCar(pID,mID,xc,yc,zc,rc);
    11. return 1;
    12. }
    Alles anzeigen
  • Bergustelo schrieb:

    @Slider
    was ist denn der unterschied zwischen dem Flot und double?

    Ich habe besitzer auf int gestellt mehr auch nicht
    Der Unterschied ist, dass doubles mehr komma zahlen anzeigen/speichern
    In diesem Fall ist es klüger float zu nehmen, da im Script die Koordinaten in Floats abgespeichert werden und double somit relativ überflüssig ist




    Mein Name ist TheOneBehindYou1 (Meinen richtigen Namen kann man nicht aus meinem Nicknamen herauslesen) und ich bin 17 Jahre alt.
    Ich komme aus Österreich (genauer: Niederösterreich) und Ich bin ein großer T.S.-Fan aber ich glaube das bekommt man nicht so mit


    Ich scripte sehr gerne jedoch nicht gerne für Server sondern einfach nur so zu Spaß und um nicht aus der Übung zu kommen


    [Umfrage]
    Ist das Sinnvoll?
    Ja
    Nein
    Banane

    Ergebnis zeigen

  • Bergustelo schrieb:

    @Slider
    was ist denn der unterschied zwischen dem Flot und double?

    Ich habe besitzer auf int gestellt mehr auch nicht


    MySQL uses four bytes for single-precision values and eight bytes for double-precision value
    dev.mysql.com/doc/refman/5.5/en/floating-point-types.html
    „Nicht das, was du nicht weißt, bringt dich in Schwierigkeiten, sondern dass, was du sicher zu wissen glaubst, obwohl es gar nicht wahr ist.“
    Mark Twain

  • Slider schrieb:

    Wieso ist 'besitzer' auf float und nicht unsigned int?

    Bergustelo schrieb:

    Ich habe besitzer auf int gestellt mehr auch nicht
    Es ist weiters auch sehr unnötig den Besitzer auf int zu setzen da du im Script den Namen und nicht die ID abfragst. Eher auf VARCHAR setzen




    Mein Name ist TheOneBehindYou1 (Meinen richtigen Namen kann man nicht aus meinem Nicknamen herauslesen) und ich bin 17 Jahre alt.
    Ich komme aus Österreich (genauer: Niederösterreich) und Ich bin ein großer T.S.-Fan aber ich glaube das bekommt man nicht so mit


    Ich scripte sehr gerne jedoch nicht gerne für Server sondern einfach nur so zu Spaß und um nicht aus der Übung zu kommen


    [Umfrage]
    Ist das Sinnvoll?
    Ja
    Nein
    Banane

    Ergebnis zeigen

  • Bergustelo schrieb:

    Toll jetzt habt ihr mich alle so verwirt das ich erst recht nicht weiß wie ich das anfangen soll.
    Hör auf das, was Slider sagt. Er trifft nämlich den Punkt.

    Das hat mehrere Gründe: Ein wichtiger ist: Wenn der Spielername geändert wird, musst du jede Tabelle, in der der Name dann zugeordnet wird (also bspw. in deiner Fahrzeugtabelle), auch anpassen. Aus diesem Grund ist das, was TheOneIrgendwas geschrieben hat, auch scheiße. Das ist unschöner Stil und ohnehin nur komplizierter. Wenn du von vorneherein mit Spieler ID's arbeitest, hast du den ganzen Firlefanz nicht.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von D_K ()

  • @Slider @Jeffry

    Ich habe jetzt mal versucht es irgendwie hin zu bekommen mit den Spielerfahrzeugen in die Datenbank zu setzen

    Spielerfahrzeuge werden auch nicht durch den befehl einfach so in das spiel rein gesetzt:

    Der Code sieht so aus:

    Ich verwende die Version R41.2 von Mysql

    Spielerfahrzeuge erstellen:

    Enum
    Spoiler anzeigen

    Quellcode

    1. enum fahrzeugEnum
    2. {
    3. faid,
    4. besitzer[MAX_PLAYER_NAME],
    5. model,
    6. Float:c_x,
    7. Float:c_y,
    8. Float:c_z,
    9. Float:c_r
    10. }
    11. new cInfo[50][fahrzeugEnum];
    Alles anzeigen



    PlayerCar
    Spoiler anzeigen


    Quellcode

    1. PlayerCar(playerid,modelid,Float:x,Float:y,Float:z,Float:r)
    2. {
    3. for(new i=0; i<sizeof(cInfo); i++)
    4. {
    5. if(cInfo[i][faid]!=0)continue;
    6. GetPlayerName(playerid,cInfo[i][besitzer],MAX_PLAYER_NAME);
    7. cInfo[i][c_x] =x;
    8. cInfo[i][c_y] =y;
    9. cInfo[i][c_z] =z;
    10. cInfo[i][c_r] =r;
    11. cInfo[i][model]=modelid;
    12. cInfo[i][faid] = CreateVehicle(modelid,x,y,z,r,-1,-1,-1);
    13. new string[128];
    14. format(string,sizeof(string),"Das Fahrzeug cInfo[%i] wurde erstellt",i);
    15. SendClientMessageToAll(rot,string);
    16. saveCarToDB(playerid,i);
    17. return 1;
    18. }
    19. return 1;
    20. }
    Alles anzeigen




    Fahrzeuge erstellen und löschen
    Spoiler anzeigen


    Quellcode

    1. ocmd:deletcar(playerid,params[])
    2. {
    3. if(!isAdmin(playerid,6))return SendClientMessage(playerid,rot,"Dein Admingrang ist zu niedrig.");
    4. if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid,türkis,"Du bist in kein Fahrzeug");
    5. DestroyVehicle(GetPlayerVehicleID(playerid));
    6. return 1;
    7. }
    8. ocmd:createcar(playerid,params[])
    9. {
    10. if(!isAdmin(playerid,6))return SendClientMessage(playerid,rot,"Dein Admingrang ist zu niedrig.");
    11. new mID,pID;
    12. if(sscanf(params,"ui",pID,mID))return SendClientMessage(playerid,rot,"INFO: /createcar[playerid][model]");
    13. if(mID<400||mID>611)return SendClientMessage(playerid,rot,"Ungültiges Model");
    14. new Float:xc,Float:yc,Float:zc,Float:rc;
    15. GetPlayerPos(pID,xc,yc,zc);
    16. GetPlayerFacingAngle(pID,rc);
    17. PlayerCar(pID,mID,xc,yc,zc,rc);
    18. return 1;
    19. }
    Alles anzeigen



    Fahrzeuge Speicher und laden:

    forward:
    Spoiler anzeigen

    Quellcode

    1. forward spielerfahrzeug(carid);



    spielerfahrzeug

    Spoiler anzeigen

    Quellcode

    1. public spielerfahrzeug(carid)
    2. {
    3. cInfo[carid][faid]=cache_insert_id(handle);
    4. return 1;
    5. }


    carinDB

    Spoiler anzeigen

    Quellcode

    1. carinDB(playerid,carid)
    2. {
    3. new query[128];
    4. format(query,sizeof(query),"INSERT INTO spielerfahrzeuge(besitzer,model,x,y,z,r) VALUES('%i','%i','%f','%f','%f','%f')",PlayerInfo[playerid][p_id],cInfo[carid][model],cInfo[carid][c_x],cInfo[carid][c_y],cInfo[carid][c_z],cInfo[carid][c_r]);
    5. return 1;
    6. }
  • Slider schrieb:

    Die einzig richtige Loesung: x, y, z, r auf Double setzen fuer die Praezision und den Besitzer auf unsigned int. Und arbeite bitte in Zukunft immer mit User ID's und NICHT mit Namen!
    Dein Double für die "Praezision" kannst du dir schenken. Sämtliche SAMP Funktionen schlucken nur Float und daher sind deine extra Nachkommastellen der Doubles komplett nutzlos.
    SetVehiclePos und CreateVehicle nehmen nur Float für die Koordinaten und GetVehiclePos gibt nur Float zurück.

    Und ob du nun nen unsigned int oder ein einfaches int nutzt ist ebenfalls komplett egal.
    Ich bezeifle, dass ein samp server die 2.147.483.647 SpielerIDs knackt. Und wenn doch dann entweder Respekt für so viele unique players oder pfui bäh für schlechte Datenbankverwaltung (Denn das würde bedeuten, dass immer wieder Spieler gelöscht und durch Auto-Increment neue IDs benutzt werden.) (Selbes gilt natürlich auch für die Fahrzeug IDs. 2.147.483.647 sind dann doch etwas zu viel für SAMP.)


    @TE: Bekommst du denn die Ausgabe "Das Fahrzeug cInfo[xy] wurde erstellt" angezeigt ?
    HTC One X - CyanogenMod 11 Nightly - Android 4.4.2 R.I.P
    Sony Xperia Z1 - CyanogenMod 12.1 Nightly - Android 5.1.1
    Blackberry Priv - MM Beta - Android 6.0.1
  • @datWeazel wenn ich folgenden Befehl ausführe ingame: Sagt er mir Ungültiges Model

    Quellcode

    1. ocmd:createcar(playerid,params[])
    2. {
    3. if(!isAdmin(playerid,6))return SendClientMessage(playerid,rot,"Dein Admingrang ist zu niedrig.");
    4. new mID,pID;
    5. if(sscanf(params,"ui",pID,mID))return SendClientMessage(playerid,rot,"INFO: /createcar[playerid][model]");
    6. if(mID<400||mID>611)return SendClientMessage(playerid,rot,"Ungültiges Model");
    7. new Float:xc,Float:yc,Float:zc,Float:rc;
    8. GetPlayerPos(pID,xc,yc,zc);
    9. GetPlayerFacingAngle(pID,rc);
    10. PlayerCar(pID,mID,xc,yc,zc,rc);
    11. return 1;
    12. }
    Alles anzeigen
    aber leider bekomm ich bei : spielerfahrzeug folgenden Fehler:
    spielerfahrzeug

    Der Code zu Spielerfahrzeug sieht so aus: weiter kam ich damit nicht

    Quellcode

    1. public spielerfahrzeug(carid)
    2. {
    3. cInfo[carid][faid]=cache_insert_id(handle);
    4. return 1;
    5. }