[jTuT] Fraktions-Fahrzeug-System mit MySQL R41-4

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
  • dann können alle anderen die Fahrzeuge von allen anderen Auf/Zuschließen.


    Ah, sorry, stimmt. Hab falsch herum gedacht, weil wir die ganze Zeit beim Einstieg waren. Das ist ja ein Befehl zum Abschließen.
    Dennoch muss das && zu einem || dann gewechselt werden, wie @[IRP]Rob_Clare schon richtig sagte, sonst klappt es nur, wenn er Leader und Member ist, was er wahrscheinlich nicht gleichzeitig sein kann.
    Allerdings mit "playerid" anstatt "forplayerid".
    Habe den Code oben angepasst.


    Außerdem noch:
    iPlayerVehicle
    zu:
    vehicleid





    EDIT:

    ok jetzt kann man immer einsteigen also egal was man ist


    Ich habe das grade mal ausprobiert, bei mir funktioniert es problemlos.


    Code:
    public OnVehicleStreamIn(vehicleid, forplayerid)
    {
    //Eine Schleife durch alle Fraktions-Fahrzeuge
    for(new i=0; i<MAX_FRAC_VEHICLES; i++)
    {
    //Wenn die vehicleid die gleiche ist, wie die des Fraktions-Fahrzeugs
    if(fracVehicle[i][e_vID] == vehicleid)
    {
    //Jetzt brauchen wir die Variable, mit der Dein vorher bereits existierendes Fraktions-System arbeitet.
    //Ich nehme jetzt einfach eine Beispiel-Variable, diese musst Du selbst mit der ersetzen,
    //die Dein System verwendet.
    //Es geht um diese Variable: PlayerInfo[playerid][pFraction]
    if(PlayerInfo[forplayerid][pFraction] != fracVehicle[i][e_fracID])
    {
    //Wenn der Spieler nicht in der Fraktion ist, die das Fahrzeug verwenden darf,
    //dann darf er es nicht betreten.
    SetVehicleParamsForPlayer(vehicleid, forplayerid, 0, 1);
    }
    break; //Es gibt ja keine zwei gleichen Fahrzeuge
    }
    }
    return 1;
    }


    Die Animation macht er allerdings nur, wenn man als Beifahrer (Taste G) einsteigen will.


    Bei dir wäre das dann:
    public OnVehicleStreamIn(vehicleid, forplayerid)
    {
    //Eine Schleife durch alle Fraktions-Fahrzeuge
    for(new i=0; i<MAX_FRAC_VEHICLES; i++)
    {
    //Wenn die vehicleid die gleiche ist, wie die des Fraktions-Fahrzeugs
    if(fracVehicle[i][e_vID] == vehicleid)
    {
    //Jetzt brauchen wir die Variable, mit der Dein vorher bereits existierendes Fraktions-System arbeitet.
    //Ich nehme jetzt einfach eine Beispiel-Variable, diese musst Du selbst mit der ersetzen,
    //die Dein System verwendet.
    //Es geht um diese Variable: PlayerInfo[playerid][pFraction]
    if(SpielerInfo[forplayerid][pMember] != fracVehicle[i][e_fracID] && SpielerInfo[forplayerid][pLeader] != fracVehicle[i][e_fracID])
    {
    //Wenn der Spieler nicht in der Fraktion ist, die das Fahrzeug verwenden darf,
    //dann darf er es nicht betreten.
    SetVehicleParamsForPlayer(vehicleid, forplayerid, 0, 1);
    }
    break; //Es gibt ja keine zwei gleichen Fahrzeuge
    }
    }
    return 1;
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Dennoch muss das && zu einem || dann gewechselt werden

    Sorry, hab es gerade erst mitbekommen.


    Ich hatte ja gesagt, dass ich vll ein Befehl erstelle und nun ist er fertig, jedoch Ungetestet(Da gerade kein SA:MP)


    @Jeffry wenn du möchtest, kannst du den Code im Startpost einfügen, aber wie gesagt Ungetestet.

    Mit Freundlichen Grüßen
    Whitetiiger aka. Kaito-sensei
    P.s. Alle mit #IRONIE bestätigten Sätze von mir, sind als Ironie anzusehen.

  • Hey,
    bei mir kommt in der Konsole der ERROR ModelID 1 nicht gefunden (ID: 1) 6-7 mal.
    Code:
    forward LoadFracVehicles_Data();
    public LoadFracVehicles_Data()
    {
    new rows, id, createdVehs;
    rows = cache_num_rows();
    for(new i=0; i<rows; i++)
    {
    id = cache_get_value_name_int(i, "ID", fracVehicle[i][e_vID]);
    if(id < 0 || id >= MAX_FRAC_VEHICLES) continue;
    fracVehicle[id][e_modelID] = cache_get_value_name_int(i, "ModelID", fracVehicle[i][e_modelID]);
    fracVehicle[id][e_x] = cache_get_value_name_float(i, "PosX", fracVehicle[i][e_x]);
    fracVehicle[id][e_y] = cache_get_value_name_float(i, "PosY", fracVehicle[i][e_y]);
    fracVehicle[id][e_z] = cache_get_value_name_float(i, "PosZ", fracVehicle[i][e_z]);
    fracVehicle[id][e_a] = cache_get_value_name_float(i, "PosA", fracVehicle[i][e_a]);
    fracVehicle[id][e_color1] = cache_get_value_name_int(i, "Color1", fracVehicle[i][e_color1]);
    fracVehicle[id][e_color2] = cache_get_value_name_int(i, "Color2", fracVehicle[i][e_color2]);
    fracVehicle[id][e_fracID] = cache_get_value_name_int(i, "FracID", fracVehicle[i][e_fracID]);
    if(fracVehicle[id][e_modelID] >= 400 && fracVehicle[id][e_modelID] <= 611)
    {
    fracVehicle[id][e_vID] = CreateVehicle(fracVehicle[id][e_modelID], fracVehicle[id][e_x], fracVehicle[id][e_y], fracVehicle[id][e_z], fracVehicle[id][e_a], fracVehicle[id][e_color1], fracVehicle[id][e_color2], -1);
    }
    else
    {
    printf("[Error] Model-ID %d existiert nicht (ID: %d).", fracVehicle[id][e_modelID], id);
    }
    if(GetVehicleModel(MAX_VEHICLES-1) != 0) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_VEHICLES) erreicht.");
    createdVehs++;
    if(createdVehs == MAX_FRAC_VEHICLES) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_FRAC_VEHICLES) erreicht.");
    }
    return 1;
    }


    LoadFracVehicles()
    {
    CreateFVTable();
    mysql_tquery(handle, "SELECT * FROM FracVehicles ORDER BY ID ASC", "LoadFracVehicles_Data");
    return 1;
    }
    @Jeffry

    Einmal editiert, zuletzt von The Sensei ()

  • bei mir kommt in der Konsole der ERROR ModelID 1 nicht gefunden (ID: 1) 6-7 mal.

    Dann scheinst du beim Speichern in das Feld "ModelID" nicht die tatsächliche modelid des Fahrzeugs (400-611) zu schreiben, sondern etwas anderes. Prüfe das (Query per print ausgeben), bzw. poste den Code + Log bitte.


    EDIT:
    Jetzt am PC fällt mir der Fehler gleich auf:
    fracVehicle[id][e_modelID] = cache_get_value_name_int(i, "ModelID", fracVehicle[i][e_modelID]);
    zu:
    cache_get_value_name_int(i, "ModelID", fracVehicle[i][e_modelID]);


    Gleiches für alle anderen.
    Das hast du ja auch selbst schon herausgefunden, ich wollte es nur nochmal klarstellen, falls jemand einen ähnlichen Fehler hat.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Habe es hinbekommen.
    forward LoadFracVehicles_Data();
    public LoadFracVehicles_Data()
    {
    new rows, createdVehs;
    rows = cache_num_rows();
    printf("Gefundene Rows: %d", rows);
    for(new i=0; i<rows; i++)
    {
    cache_get_value_name_int(i, "ID", fracVehicle[i][e_vID]);
    cache_get_value_name_int(i, "ModelID", fracVehicle[i][e_modelID]);
    cache_get_value_name_float(i, "PosX", fracVehicle[i][e_x]);
    cache_get_value_name_float(i, "PosY", fracVehicle[i][e_y]);
    cache_get_value_name_float(i, "PosZ", fracVehicle[i][e_z]);
    cache_get_value_name_float(i, "PosA", fracVehicle[i][e_a]);
    cache_get_value_name_int(i, "Color1", fracVehicle[i][e_color1]);
    cache_get_value_name_int(i, "Color2", fracVehicle[i][e_color2]);
    cache_get_value_name_int(i, "FracID", fracVehicle[i][e_fracID]);
    //printf("i: %d | vID = %d | modelID: %d", i, fracVehicle[i][e_vID], fracVehicle[i][e_modelID]);
    if(fracVehicle[i][e_modelID] >= 400 && fracVehicle[i][e_modelID] <= 611)
    {
    fracVehicle[i][e_vID] = CreateVehicle(fracVehicle[i][e_modelID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][e_color1], fracVehicle[i][e_color2], -1);
    }
    else
    {
    printf("[Error] Model-ID %d existiert nicht (ID: %d).", fracVehicle[i][e_modelID], fracVehicle[i][e_vID]);
    }
    if(GetVehicleModel(MAX_VEHICLES-1) != 0) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_VEHICLES) erreicht.");
    createdVehs++;
    if(createdVehs == MAX_FRAC_VEHICLES) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_FRAC_VEHICLES) erreicht.");
    }
    printf("[FRAK-CARS] %d/%d geladen.", rows, MAX_FRAC_VEHICLES);
    return 1;
    }

  • was muss man anpassen damit man es mit der m ysql version
    MySQL R41-4 benutzen kann

    Ich glaube als aller erstes machst du aus jedem



    Code
    mysql_tquery 
    //ein
    mysql_pquery


    Code
    cache_get_field_content_int 
    //zu 
    cache_get_value_name_int  //oder eben cache_get_value_name_float und bei Strings cache_get_value_name


    Code
    rows = cache_num_rows();
    // zu
    new rows;
    cache_get_row_count(rows);

    Wenn du das geschafft hast sollten die meisten Dinge funktionieren. Bestehen dann noch Fehler kannste dich ja nochmal melden oder die restlichen Fehler ergooglen, da die Namen der neuen Funktionen sicher irgendwo im Inet präsent sind.
    Eigentlich sind es hauptsächlich nur Funktionsnamen die sich geändert haben, soweit ich weiß. (zumindest für die hier relevante Nutzung)

    MfG. Adrian

  • Ich werde das Tutorial im Dezember wenn ich Urlaub habe auf R41-4 aktualisieren, vorher schaffe ich es leider nicht.


    EDIT:

    MySQL R41-4 benutzen kann

    Ich habe die Aktualisierung auf R41-4 vorgenommen. Das Tutorial ist jetzt wieder aktuell.


    Änderungen in bestehenden Codes betreffen folgende Stellen:

    Code
    new handle;

    zu:

    Code
    new MySQL:handle;


    Sowie gegebenenfalls die mysql_log Funktion anpassen zu:

    Code
    mysql_log();

    Außerdem muss beim Laden der Fahrzeuge der Code wie folgt angepasst werden:


    Hauptsächlich ist das nur die Umstellung auf die neue Schreibweise von cache_get_value_name_int und cache_get_value_name_float, mehr nicht.


    Bei Fragen gerne melden!

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Jeffry

    Hat den Titel des Themas von „[jTuT] Fraktions-Fahrzeug-System mit MySQL R39-5“ zu „[jTuT] Fraktions-Fahrzeug-System mit MySQL R41-4“ geändert.