Beiträge von Goldkiller

    Ehm,
    enum ServerCars
    {
    sCarID,
    sModelID,
    Float:sX,
    Float:sY,
    Float:sZ,
    Float:sA,
    sColor1,
    sColor2
    }

    Wozu sind die Einträge gut ( bis aus sCarID ) ? Selbst sCarID finde ich schlecht gewählt,da es ja die Vehicleid repräsentieren soll. Die kann sich aber verschieben , falls du mal was an der Reihenfolge veränderst wie die Fahrzeug erstellt werden.Du kannst ja auch nicht statisch festlegen ,welches Fahrzeug welche Vehicleid bekommen soll.


    Zitat

    Beherrscht die MySQL sprache


    Ganz sicher ? Wenn ich mir den Befehl spark ansehen,glaube ich das nicht wirklich.
    format(query, 128, "UPDATE ServerCars SET X = '%f' WHERE carID = '%d'", vehx, ServerVeh[i][sCarID]);
    mysql_query(query);
    format(query, 128, "UPDATE ServerCars SET Y = '%f' WHERE carID = '%d'", vehy, ServerVeh[i][sCarID]);
    mysql_query(query);
    format(query, 128, "UPDATE ServerCars SET Z = '%f' WHERE carID = '%d'", vehz, ServerVeh[i][sCarID]);
    mysql_query(query);
    format(query, 128, "UPDATE ServerCars SET A = '%f' WHERE carID = '%d'", veha, ServerVeh[i][sCarID]);
    mysql_query(query);
    mysql_free_result();

    Das geht auch komplett mit nur einem Query.

    stock Float:GetVehicleVerbrauch(vehicleid){
    new model = GetVehicleModel(vehicleid);
    if(model >= 400 && model <= 611){
    return /*Float:*/Verbrauch[(model-400)];
    }
    return /*Float:*/10.0;
    }
    Du musst das Tag ( Float:) im Kopf bereits erwähnen.Falls du die Funktion im Script benutzt bevor sie deklariert wird,solltest du sie dem Kompiler vorher mit forward bekannt machen. Sonst kriegst eine Warnung.
    Edit:
    Hmpf,BlackLegend :(.

    Das Problem hat nichts mit MySQL zu tun,sondern mit den Arrays die du nutzt.
    Du versuchst auf einen Index zuzugreifen,der nicht gültig ist. Das habe ich aber auch bereits geschrieben. Du solltest dir den Post auch genauer durchlesen. Dann hättest du verstanden,wo der Fehler liegt.

    Zitat

    Demnach ist der Array um 1 größer als nötig (aufgrund der 0) und fängt bei 1 an, statt der 0.


    Auch wenn das Array um 1 größer ist als nötig,wird dir sizeof trotzdem nur die Gesamte größe wiedergeben,auch wenn es 1 größer ist als du tatsächlich brauchst. Du gehst trotzdem einen Index zu weit.
    Wie auch immer, vielleicht hilft dir es ja den folgenden Code mal ausführen zu lassen:

    #include <a_samp>


    new
    aiTest[5] = {0,1,2,3,4};


    main()
    {
    for(new i = 1 /* 0 ist egal */ ; i <= sizeof(aiTest) ; i++) {
    printf("aiTest[%d] = %d",i,aiTest[i]);
    }
    printf("Fertig!");
    }
    Genau so funktioniert deine Code.Ich wette aber mit dir,dass "printf("Fertig!");" nie ausgeführt wird,da das Script vorher abstürzt.
    Wenn du jetzt aus <= ein < machst,passiert es nicht mehr.
    Warum ? Weil <= kleiner/gleich ist. Du lässt es so lange laufen,bis der Index der größe des Array entspricht. Den Index,der den gleichen Zahlenwert hat wie die Arraygröße, gibt es nicht.

    Zitat

    array[n] = 0 bis n-1

    Debugge doch mal den Code.
    Ich tippe aber mal auf die Schleife:
    for (new i = 1; i <= sizeof(frakInfo); i ++) {
    format(query, sizeof(query), "UPDATE samp_fractions SET fractionMoney = '%i', rentGround = '%i', rentRank = '%i' WHERE fractionId = '%i' LIMIT 1", frakInfo[i][frakKasse], frakInfo[i][frakGehalt], frakInfo[i][frakBonus], i);
    mysql_query(query);
    }

    Wieso du bei i = 1 anfängst,keine Ahnung.Allerdings ist <= nicht gut gewählt bei solchen Schleifen. Denn irgendwann wird i = sizeof(frakInfo) sein. Angenommen sizeof(frakInfo) gibt 5 zurück.
    Dann wäre i irgendwann bei dieser Schleife 5.
    Allerdings ist bei frakInfo[5] als gültiger Index nur 0 bis 4 möglich. Der Index 5 ist nicht möglich. Du musst nur <= umändern . Denk mal drüber nach.

    Zitat

    Wenn du es nicht verstehst,beschreib genauer wo es bei dir Probleme gibt.


    Du bist schon lang genug im Forum angemeldet, um sowas selbstständig lösen zu können ODER zu beschreiben,wo es Probleme gibt.


    Es ist ganz einfach.
    Ich hab dir bereits beschrieben wie es aufgebaut werden kann. Du brauchst 2 Schleifen ( Für Alle Spieler & Fahrzeuge des Spielers ) und nur prüfen,ob sein aktuelles Fahrzeug denn das Fahrzeug eines Fremden Users ist oder sein eigenes. Ich hoffe auch dir postet keiner einer fertige Lösung,denn so soll das Forum nicht funktionieren.

    Dann gibt es halt in der Schleife 2 Abzweigungen für die Variable.
    a) Er sitzt in seinem eigenem Fahrzeug ( 0 )
    b) Er sitzt in einem Fremden Fahrzeug ( 1 )


    ( c) Ungültig -1 , bereits vor der Schleife )


    Am Ende der Schleife kann man dann prüfen.Falls Variable den Wert 0 hat,nichts tun.Falls Variable Wert 1 hat,aus dem Fahrzeug werden. Bei -1 tun wir nichts. Du musst dann aber auch die Spielercar's von ALLEN Spielern durchgehen.


    Man könnte es auch auf 2 Zustände beschränken.

    Die Schleife Anders aufbauen.


    Am leichtesten wäre es so:

    • temporäre Variable anlegen ob in einem Fahrzeug sitzt,welches Spieler gehört. Variable auf etwas ungültiges setzen,z.B. -1
    • Alle Spieler-Fahrzeuge durchgehen ( Schleife )
    • Nur prüfen,ob Spieler in einem Fahrzeug sitzt,welches ihm gehören kann ( temp. Variable nutzen )
    • Schleife nicht durch "return" beenden,break wäre möglich.
    • Nach der Schleife prüfen,ob temp. Variable noch ungültig ( z.B. -1 ) oder nicht. Je nachdem in eigenem Fahrzeuge oder nicht.


    Wenn du es nicht verstehst,beschreib genauer wo es bei dir Probleme gibt. Dein Problem zZt ist,dass du die Schleife beendest sobald er in einem Fahrzeug sitzt,welches nicht ihm gehört. Bei mehr als 1 Fahrzeuge würde es dann auch nicht mehr funktionieren.


    Zitat

    [...] allerdings fliegt man aus jedem Car und kann nur sein eigenes Fahren, also man kann auch nicht die Cars fahren z.B. für Fraktionen etc. man wird immer rauf geworfen :(


    Dann gehört da sicherlich noch mehr Code zu,richtig?!

    for(new i=0; i <= MAX_PLAYERS; i++)
    Angenommen MAX_PLAYERS ist 500.
    Dann läuft die Schleife solange,wie i kleiner oder gleich 500 ist.
    500 ist aber definitiv keine gültige ID. Auch wäre es kein gültiger Index bei einer Array Größe von MAX_PLAYERS ( Denn : 0 - ( MAX_PLAYERS - 1 ) ).
    Die Schleife macht nämlich so wie du sie zeigst,501 Durchgänge ... Nicht 500.
    for(new i = 0 ; i < 10 ; i ++) { } // 10 Durchgänge
    for(new i = 0 ; i <= 10 ; i++) {} // 11 Durchgänge
    Am Ende würdest du ein "index out of bounce" haben.


    jomotest9,
    Dann machst du es falsch.Du musst diese Schleife auch entfernen:
    for(new i=0; i<sizeof(Bus); i++)
    Falls du dir wirklich sicher bist,dass du es auch entfern hast, dann poste doch einfach mal deinen kompletten Befehl und die Deklaration von der Variable Bus.

    Mach es bloß nicht so wie D4rkCl3ric es geschrieben hat. Hat a) absolut nichts mit dem Problem zu tun und b) führt es nur zu Problemen. D4rkCl3ric,du solltest dir nochmal Arrays und Schleifen durchlesen.


    for(new i=0; i<sizeof(Bus); i++)
    {
    new vehicleid;
    vehicleid=GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vehicleid) != 431) return SendClientMessage(playerid, GRAU, "Du bist in keinem Bus.");
    SetPVarInt(playerid, "Jobfahrzeug", GetPlayerVehicleID(playerid));
    RunningCheckpoint[playerid]= 11;
    NaechsteHaltestelle(playerid, "AmmunationLS");
    SetPlayerCheckpoint(playerid, HS_BBH2, 3);
    }
    Liegt bestimmt an dieser Schleife. Wozu du sie überhaupt brauchst, kommt aus dem Code nicht mal hervor. Denn das i verwendest du dort sowieso nie.

    Also muss ich definitiv nur die Waffen von dem toten Spieler auslesen und in ein listitem packen.. oder wie. :o


    Kommt auf die Umsetzung an.Ich würde es aber nicht so machen. Zumal es doch nervig sein kann,wenn direkt ein Dialog-Menu aufpoppt sobald man einen Spieler tötet.
    Da würde ich eher eine Art Paket anlegen, in denen alle Items des Verstorbenen Spielers vorhanden sind. Erst beim durchlaufen des Pakets ( Irgendein Pickup oder Checkpoint ) wird dann ein Dialog mit den vorhanden Items angezeigt. Ist das Paket leer,verschwindet es.