Beiträge von Kaliber

    Hört sich zumindest sinnvoll an xD?

    Ja, das klingt gut ;)


    Kannst du eventuell eine MariaDB-Bibliothek empfehlen? :/

    Der MariaDB Connector soll - soweit ich das zumindest lesen konnte - ziemlich schlecht sein.

    Habe bisher mit C++ nur mit PostgreSQL gearbeitet und damit mit libpqxx


    Aber der MariaDB Connector, ist wohl auch eine Alternative: https://github.com/mariadb-corporation/mariadb-connector-cpp


    Viel Erfolg 👍🏼

    Heyho 👋🏼


    Hoffe es ist okay, wenn ich ein paar doofe Fragen stelle.


    Wozu wartest du auf die Threads? Gäbe es keine Möglichkeit, dass die Threads einfach direkt das irgendwo rein schreiben ihr Ergebnis? Direkt in eine Datenbank o.ä.?


    Wieso nutzt du jsons? 😅 Und nicht direkt z.B. eine (Postgre)SQL Datenbank?

    So könntest du aus den Threads heraus direkt das Ergebnis irgendwohin speichern und müsstest auf nichts warten im Mainthread.


    Die Überprüfung der Objekte dauert so lange, dass in dieser Zeit keine Status-Updates in der Konsole folgen können.

    Um nur das Problem konkret zu lösen, würde denke ich auch ein einfaches sleep reichen, was du in die Loop packst :)

    Einige dieser Zahlen sind VehicleID's von Flugzeugen diese sollen natürlich nicht erstellt werden

    Nur Flugzeuge oder auch Helikopter?

    Was ist mit Booten?

    Was ist mit Zügen?

    Was ist mit Anhängern? 😅


    Es gibt Utils-Funktionen, da hatte jemand Langeweile und hat das mal alles rausgeschrieben: https://github.com/WoutProvost/samp-util/tree/master


    samp-util/vehicle.inc at master · WoutProvost/samp-util
    A set of useful utility functions for SA-MP. Contribute to WoutProvost/samp-util development by creating an account on GitHub.
    github.com


    C
    new model, type;
    for(;;) { //Dirty
        model = randomEx(400, 609);
        type = GetVehicleModelType(model);
        if(type != VEHICLE_TYPE_PLANE) break;
    }
    //Hier kannst dann model nutzen

    Endlosschleifen sind immer bisschen dirty.

    Besser wäre es, einfach ein konstantes Array zu haben, wo du alle modelids, welche gültig sind speicherst und daraus dann eine zufällige ID wählst.


    Zum Beispiel:


    C
    stock const ValidVehicles[] = {400, 401, 402, 403}; //Oben im Skript
    
    //Dann im Befehl:
    new model = ValidVehicles[random(sizeof(ValidVehicles))];
    //Bekommst direkt ein zufälliges Modell aus dem Array

    random(609) + 400

    Das gibt dir eine Zahl zwischen:


    (0-608)+400...also wird dein Wert zwischen: 400-1008 sein.


    400-609

    Dann musst du:

    400+random(210) verwenden.


    Oder du definierst dir eine einfacherer Funktion (tust du ganz oben ins Skript):


    #define randomEx(%0,%1) (random((%1) - (%0) + 1) + (%0))



    Da kannst du einfach:

    randomEx(400, 609)


    verwenden :)

    Und das mehrere Male.

    giphy.gif?cid=ecf05e479lbasj7ntmchl9ytufcjvqjtffhfy6abc77ko3yd&ep=v1_gifs_search&rid=giphy.gif&ct=g


    Excuse me, what ^^



    Wie zur Hölle bekommt man das denn hin. Das bedeutet du hast Funktionen, die sehen wie folgt aus:


    stock test(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, a, b, c, d, e, f, g)


    oder


    public test(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, a, b, c, d, e, f, g)


    Also dass die mehr als 32 Parameter haben.


    Keine Ahnung, wie man das schafft xD Musst du das Design etwas anpassen.

    Kannst ja mal eine Posten, dann können wir mal draufschauen :)

    Ein Lock reicht ungünstigerweise nicht aus, da das Sichern eines kritischen Abschnittes selbst kritisch ist.

    Yes mb, es war nicht atomar. Sry, es ist 10 Jahre her, dass ich manuell so sections sichern musste...

    Genau aus dem Grund macht das auch keiner manuell xD


    nicht die Korrektheit ändert

    Hat ja nichts mit Clean Code zu tun. Was eine Troll Ergänzung.

    Also der Code von dir funktioniert nicht, dort fahren mehrere Autos über die Brücke, da der kritische Abschnitt nicht richtig ist gesichert ist

    Naja, ich sag mal, eigentlich sollte der genauso funktionieren wie dein Code.

    Wieso meinst du, dass er nicht funktioniert?


    Das heißt in beiden Fällen kann es zu einer Race-Condition kommen, da die Variablen nicht richtig synchronisiert werden zwischen den Threads.

    Dafür sollte man z.B. stdatomic.h oder Mutexes nutzen.


    Beides wird hier nicht getan, somit ist das so oder so kritisch...

    Mogly1 dann versuch ich mal etwas Licht ins Dunkel zu bringen.


    Wieso ist das bad code?


    Okay, nun zum Rest.

    Ich verstehe nicht, wofür du die status Variable benötigst. Ich verstehe weiterhin nicht, wofür du die enter Variable brauchst.

    Weiterhin verstehe ich nicht, wofür du die "Kollision Variable" brauchst. Der Plan ist doch, dass sowas nicht stattfinden kann, oder etwa nicht?


    Wieso dann nicht z.B. einfach so lösen?


    //Edit: Funktioniert nicht, außer als wenn ticket eine atomare Variable ist.

    So könntest z.B. auch ganz einfach zählen, wie oft welches Auto gerade drübergefahren ist.

    Und es kann so zu keinen Kollisionen kommen.


    Der Grund btw, wieso das ohne das printf bei dir nicht funktioniert ist der, dass der Compiler die Variablen und Abfragen wegoptimiert 😄 Auf -O2 denkt der sich, ach, das brauch der nicht, weg damit xD

    Damit das nicht passiert, musst du sie volatile setzen, dann lässt der Compiler die Finger davon :)


    Hoffe es hilft etwas.

    Mogly1 Noch schlechter hätte man die Frage glaube wirklich nicht formulieren können.


    Was genau möchtest du erreichen.


    Erkläre doch mal mehr zu deinem Code. Was genau geht denn nicht? Die printf sind ja ausgeklammert, da wird also nichts ausgegeben. Wieso geht denn das nicht?


    Was soll das random Semikolon da? Soll das eine Endlosschleife sein? Dieser Code ist maximal dirty.


    Eventuell mehr auf Clean-Code achten...

    Achso.

    Ja, das sind nur Warnings, die kannst du eig ignorieren.


    Beheben tust du sie entweder, indem du deine MySQL Version updatest (empfohlen).


    Oder du bearbeitest das a_mysql.inc, denn da kommen die Warnings her, das hat nichts mit deinem Code zu tun.


    Dort werden Strings in den Funktionen übergeben, als Beispiel:


    C++
    native MySQL:mysql_connect(host[], user[], password[], database[], MySQLOpt:option_id = MySQLOpt:0);//So steht es da
    
    native MySQL:mysql_connect(const host[], const user[], const password[], const database[], MySQLOpt:option_id = MySQLOpt:0); //So müsste es aussehen

    Also immer wenn Strings (bzw Arrays) übergeben werden, also wenn diese eckigen Klammern bei den Parametern verwendet werden, sollte man ein const verwenden, wenn diese in der Funktion nicht verändert werden :)

    weiß jemand woran das liegt und kann mir evtl helfen?

    Wieso in aller Wellt sollte das query const sein?


    const bedeutet, der Wert ist konstant und ändert sich nicht. Aber da du das hier bei der Deklaration verwendest und der "Variable" keinen Wert zuweist, wäre das immer leer...


    Also mach aus dem const ein new :)

    Sie kann in ihrem aktuellen Stand keine komplexeren Programmieraufgaben lösen.

    Achso, das klang so, als ob du generell von KI sprichst. Dass das ChatGPT aktuell noch nicht vermag - ok.

    Hast du das aus diesem Tutorial entnommen?


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Hast du da am Anfang die Änderungen an der Client-Config auch vorgenommen? :)


    Wenn nicht, check das mal aus und teste evtl das auch mit dem Chat. Vermutlich stimmt da etwas bei der Einrichtung nicht.

    Sagen wir du hast 3 Felder in der Datenbank.


    id, level, geld


    Und weiterhin sagen wir in der Datenbank gibt es 2 Spieler, die du abfragst.


    Dann ist der row_count = 2 und der field_count = 3


    Also wenn Rows = 0 ist, dann wissen wir, dass kein Spieler gefunden wurde. Das ist die wichtige Information.

    Wie viele Felder zurückkommen, wenn Rows zurückkommen, wissen wir eig eh schon immer, da wir sie im Query spezifizieren.

    Aus diesem Grund ist diese Info eig unnötig und wurde dann später ausgelagert in eine andere Funktion.


    Falls du aus irgendwelchen Gründen das auch wissen magst, gibt es die: cache_get_field_count Funktion, welche genauso funktioniert wie die row_count Funktion :)

    wie müsste es denn nun sein das er nicht mehr mekkert?

    Also eigentlich ist es richtig so.

    Keine Ahnung, was qawno hat, wenn ich den Code bei mir verwende, bekomme ich keine Warnings.


    Allerdings ein paar Hinweise:

    1. Du kannst die Schleife mit break abbrechen, wenn du jmd gefunden hast, wozu soll er weiter suchen.
    2. Du brauchst die Variable nicht mehr auf 0 setzen am Ende, da sie eh zerstört wird.
    3. Den Code könntest du womöglich öfter gebrauchen und ist eine Funktionalität, welche du auslagern solltest.

    Ich empfehle dir sowas: