Fraktionsautos

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
  • Du erstellst 'ne Tabelle in deiner MySQL Datanbank, z.B. so:


    Name der Tabelle: lspd_cars
    [table='9']
    [*]vID[*]ModelID[*]Color1[*]Color2[*]x[*]y[*]z[*]a[*]health[*]
    [/table]


    Dann erstellst du z.B. ein "normales" Autohaus, wo aber nur Leader einkaufen können und speicherst die Daten des gekauften Autos in Variablen:



    enum frakcarData
    {
    vID,
    ModelID,
    //und so weiter..
    };


    new frakcarInfo[MAX_VEHS][fakcarData];


    new vid = CreateVehicle(/*Daten des gekauften Fahrzeugs*/);
    frakcarInfo[vid][vID] = vid;
    frakcarInfo[vid][ModelID] = GetVehicleModel(vid);
    //und so weiter..


    Dann überträgst du die Daten noch in die Datenbank.


    SQL
    INSERT TO 'lspd_cars' (`vID`,..) VALUES (%d..),vid);


    Bei OnGameModeExit oder wo auch immer du magst, speicherst du die aktuellen Daten dann



    stock saveFrakcars()
    {
    new query[256];
    for(new vid = 0; vid<MAX_VEHS;vid++)
    {
    format(query,sizeof(query), "UPDATE `lspd_cars` SET `vID` = %d /*...*/ WHERE `vID` = %d",i,i);
    mysql_query(query);
    }
    }


    Und als letztes das Ganze noch laden bei OnGameModeInit



    stock loadFrakcars()
    {
    format(new vid = 0; vid < MAX_VEHS; vid++)
    {
    new query[256];
    format(query, sizeof(query), "SELECT * FROM `lspd_cars` WHERE `vID`=%d LIMIT 1", i);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(query);
    sscanf(query, "ddddfffff>", frakcarInfo[i]);
    mysql_free_result();
    }
    }


    Fang mal an etwas zu scripten und wenn du Fragen hast, helf ich dir gerne weiter.

    20€ geschenkt - bei Fragen gerne PN an mich


    Mehr über reCyclix
    reCyclix - more than recycling
    reyCyclix ist ein polnisches Recyclingunternehmen, welches jedem die Möglichkeit bietet, sich an ihrem Geschäftsmodell gewinnbringend zu beteiligen. Normalerweise passiert das, in dem man eine beliebige Summe in Kunststoffmüll investiert, allerdings schenkt reCyclix zur Zeit noch jedem neuem Nutzer 20€, die zur Investition genutzt werden können.

    Einmal editiert, zuletzt von Key ()

  • Wenn du nur eine Tabelle verwenden möchtest, dann brauchst du noch eine Spalte, wo der Besitzer gespeichert wird. Das ganze kann man ebenfalls mit Zahlen regeln. Sollte in der Besitzerspalte die Zahl 1 stehen, gehört das Auto der Polizei, bei einer 2 die Bundeswehr usw.


    Verstehst du wie ich das meine? 8)

  • Also fragst du einfach beim Kauf ab, in welcher Fraktion der Spieler ist und speicherst den Wert in "FID".
    //e: Schau dir mal das Tutorial an: [ SCRIPTING ] [jTuT] Fraktions-Fahrzeug-System mit MySQL R39-2

    20€ geschenkt - bei Fragen gerne PN an mich


    Mehr über reCyclix
    reCyclix - more than recycling
    reyCyclix ist ein polnisches Recyclingunternehmen, welches jedem die Möglichkeit bietet, sich an ihrem Geschäftsmodell gewinnbringend zu beteiligen. Normalerweise passiert das, in dem man eine beliebige Summe in Kunststoffmüll investiert, allerdings schenkt reCyclix zur Zeit noch jedem neuem Nutzer 20€, die zur Investition genutzt werden können.


  • COMMAND:addfraktionscar(playerid,params[])
    {
    new fid,vid,mid,color1,color2, Float:x,Float:y,Float:z,Float:a;
    fid = SpielerInfo[playerid][pMember]; //Das musst du ggf. anpassen
    GetPlayerPos(playerid,x,y,z);
    GetPlayerFacingAngle(playerid,a);
    if(sscanf(params,"ddd",mid,color1,color2)) return SendClientMessage(playerid,-1,"Benutze: /addfraktionscar [Model] [Farbe1] [Farbe2]");
    vid = CreateVehicle(mid,x,y,z,a,color1,color2,-1);
    new query[256];
    format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, PosX, PosY, PosZ, PosA, Color1, Color2, FracID) VALUES ('%d', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
    vid, mid, x, y, z, a, color1, color2, fid);
    mysql_tquery(handle, query);
    DestroyVehicle(vid);
    LoadFracVehicles();
    SendClientMessage(playerid,-1,"Du hast ein Fraktionsauto erstellt!");
    return 1;
    }


    Hab das jetzt nicht getestet, kann gut sein, dass du irgendwelche Fehler drin sind.

    20€ geschenkt - bei Fragen gerne PN an mich


    Mehr über reCyclix
    reCyclix - more than recycling
    reyCyclix ist ein polnisches Recyclingunternehmen, welches jedem die Möglichkeit bietet, sich an ihrem Geschäftsmodell gewinnbringend zu beteiligen. Normalerweise passiert das, in dem man eine beliebige Summe in Kunststoffmüll investiert, allerdings schenkt reCyclix zur Zeit noch jedem neuem Nutzer 20€, die zur Investition genutzt werden können.


  • COMMAND:addfraktionscar(playerid,params[])
    {
    new fid,vid,mid,color1,color2, Float:x,Float:y,Float:z,Float:a;
    GetPlayerPos(playerid,x,y,z);
    GetPlayerFacingAngle(playerid,a);
    if(sscanf(params,"dddd",fid,mid,color1,color2)) return SendClientMessage(playerid,-1,"Benutze: /addfraktionscar [Fraktionsid] [Model] [Farbe1] [Farbe2]");
    vid = CreateVehicle(mid,x,y,z,a,color1,color2,-1);
    new query[256];
    format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, PosX, PosY, PosZ, PosA, Color1, Color2, FracID) VALUES ('%d', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
    vid, mid, x, y, z, a, color1, color2, fid);
    mysql_tquery(handle, query);
    DestroyVehicle(vid);
    LoadFracVehicles();
    SendClientMessage(playerid,-1,"Du hast ein Fraktionsauto erstellt!");
    return 1;
    }

    20€ geschenkt - bei Fragen gerne PN an mich


    Mehr über reCyclix
    reCyclix - more than recycling
    reyCyclix ist ein polnisches Recyclingunternehmen, welches jedem die Möglichkeit bietet, sich an ihrem Geschäftsmodell gewinnbringend zu beteiligen. Normalerweise passiert das, in dem man eine beliebige Summe in Kunststoffmüll investiert, allerdings schenkt reCyclix zur Zeit noch jedem neuem Nutzer 20€, die zur Investition genutzt werden können.

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

  • COMMAND:delfraktionscar(playerid,params[])
    {
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,-1,"Du bist in keinem Fahrzeug!");
    new vid = GetPlayerVehicleID(playerid);
    if(fracVehicle[vid][e_modelID] == 0) return SendClientMessage(playerid,-1,"Das Fahrzeug ist kein Fraktionsfahrzeug!");
    new query[256];
    format(query, sizeof(query), "DELETE FROM FracVehicles WHERE ID = %d", vid);
    mysql_tquery(handle, query);
    DestroyVehicle(vid);
    LoadFracVehicles();
    SendClientMessage(playerid,-1,"Fraktionsfahrzeug entfernt!");
    return 1;
    }


    Auch hier, keine Ahnung ob das so funktioniert, dürfte aber.

    20€ geschenkt - bei Fragen gerne PN an mich


    Mehr über reCyclix
    reCyclix - more than recycling
    reyCyclix ist ein polnisches Recyclingunternehmen, welches jedem die Möglichkeit bietet, sich an ihrem Geschäftsmodell gewinnbringend zu beteiligen. Normalerweise passiert das, in dem man eine beliebige Summe in Kunststoffmüll investiert, allerdings schenkt reCyclix zur Zeit noch jedem neuem Nutzer 20€, die zur Investition genutzt werden können.

  • COMMAND:delfraktionscar(playerid,params[])
    {
    new vid;
    if(!strlen(params))
    {
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,-1,"Du bist in keinem Fahrzeug!");
    vid = GetPlayerVehicleID(playerid);
    }
    else
    {
    vid = strval(params);
    if(!GetVehicleModel(vid)) return SendClientMessage(playerid,-1,"Dieses Fahrzeug existiert nicht!");
    }
    if(fracVehicle[vid][e_modelID] == 0) return SendClientMessage(playerid,-1,"Das Fahrzeug ist kein Fraktionsfahrzeug!");
    new query[256];
    format(query, sizeof(query), "DELETE FROM FracVehicles WHERE ID = %d", vid);
    mysql_tquery(handle, query);
    DestroyVehicle(vid);
    LoadFracVehicles();
    SendClientMessage(playerid,-1,"Fraktionsfahrzeug entfernt!");
    return 1;
    }


    Dann geht es sowohl im Fahrzeug als auch mit Angabe der ID.

  • Wie kann ich das Car direkt Spawnen lassen?


    ocmd:addfraktionscar(playerid,params[])
    {
    new fid,vid,mid,color1,color2, Float:x,Float:y,Float:z,Float:a;
    GetPlayerPos(playerid,x,y,z);
    GetPlayerFacingAngle(playerid,a);
    if(sscanf(params,"dddd",fid,mid,color1,color2)) return SendClientMessage(playerid,-1,"Benutze: /addfraktionscar [Fraktionsid] [Model] [Farbe1] [Farbe2]");
    vid = CreateVehicle(mid,x,y,z,a,color1,color2,-1);
    new query[256];
    format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, PosX, PosY, PosZ, PosA, Color1, Color2, FracID) VALUES ('%d', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
    vid, mid, x, y, z, a, color1, color2, fid);
    mysql_tquery(Handle, query);
    DestroyVehicle(vid);
    LoadFracVehicles();
    SendClientMessage(playerid,-1,"Du hast ein Fraktionsauto erstellt!");
    return 1;
    }

  • Das Problem ist wenn ich es auf 20 mache. Wird in der Batenbank 20 mal ein auto erstellt mit überall 0 drinne.


    Und was ist da falsch
    LoadFracVehicles()
    {
    CreateFVTable();
    mysql_tquery(Handle, "SELECT * FROM fracvehicles");
    return 1;
    }


    //edit Problem 2 eingefügt

  • Hier fehlt das Callback das danach aufgerufen wird:
    mysql_tquery(Handle, "SELECT * FROM fracvehicles");
    zu:
    mysql_tquery(Handle, "SELECT * FROM fracvehicles", "LoadFracVehicles_Data");


    Und dort kannst du dann, wenn du es nach dem Tutorial gemacht hast das hier in die Schleife einfügen, damit die leeren Fahrzeuge nicht erstellt werden:
    Nach:
    //Fahrzeug existiert noch nicht, es wird jetzt in die Datenbank geschrieben.
    das:
    if(fracVehicle[i][e_modelID] == 0) continue;