[jTuT] Fraktions-Fahrzeug-System mit MySQL R39-5

  • 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;
    }

    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
    Kaito-sensei
    P.s. Alle mit #IRONIE bestätigten Sätze von mir, sind als Ironie anzusehen.



    An die Wand mit allen Abwerbern

  • 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.

    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
    1. mysql_tquery
    2. //ein
    3. mysql_pquery


    Code
    1. cache_get_field_content_int
    2. //zu
    3. cache_get_value_name_int //oder eben cache_get_value_name_float und bei Strings cache_get_value_name


    PAWN
    1. rows = cache_num_rows();
    2. // zu
    3. new rows;
    4. 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