Beiträge von Kaliber

    Habe es eben getestet, also mit den Daten stimmt alles.


    (Bekommst du da nicht mega viele compile Fehler?)


    Wie Maho schon gesagt hat, es reicht quasi:


    C++
    Postwagen[0]=CreateVehicleEx(609,989.9643,-1525.2175,13.7328,180.3481,1,1,120,false);
    
    new postobj = CreateObject(19477, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
    SetObjectMaterialText(postobj, "-", 0, OBJECT_MATERIAL_SIZE_128x64,"Wingdings", 75, 1, 0xFFFFFFFF, 0, OBJECT_MATERIAL_TEXT_ALIGN_CENTER);
    AttachObjectToVehicle(postobj, Postwagen[0],1.24, -1.0, 1.2, 0.0, 0.0, 0.0);

    So, das sieht doch schon einmal ganz anders aus.


    Laut Log handelt es sich hier um einen OutOfMemory Fehler der GPU.


    Da gibt es jetzt 3 Möglichkeiten:

    1. Der Mod ist absolut kacke programmiert. Am Besten testest du das, wenn jemand mit besserer Hardware das testet und wenn es dort auch fehlschlägt, dann kannst du dir sehr sicher sein, dass da Memory-Leaks oder unnötige riesen Speicher-Reservierungen. im Code vorhanden sind.
    2. Deine GPU hat einen Hardwarefehler, zu wenig Speicherplatz, ist zu alt oder hat veraltete Treiber o.ä.
    3. Im Log wird versucht D3D11 zu verwenden. D3D11 steht für Direct3D11 oder auch DirectX11 genannt. Da stellt sich mir jetzt die Frage, wieso da auf die 11er Version zugegriffen wird. Liegt das an deinem PC, welches Betriebssystem nutzt du? Seit Windows10 ist der Standard eigentlich DirectX12. Eventuell hier mal aktualisieren.

    Viel Erfolg :)

    Ich liebe es ja Log Einträge als Screenshots zu erhalten...vor Allem, wenn es nur n kleiner Teil der Logs ist.

    Auch gut, dass die Screens in unterschiedlicher Zeitlicher Abfolge gepostet wurden...


    Am Besten wäre ja ein Video, wie du die Logs ganz schnell durchscrollst, kappa xD


    Wieso nicht einfach den gesamten Log mal hier posten? Ist das so schwer? Oder hänge ihn an...



    Was hat das in der Sektion Fehler / Vorschläge / Kritik / Lob zum Forum zu suchen? Also die Zeit hätte man sich nehmen können...

    tag mismatch ist immer die hp = 15.0;

    Ah, sry, schreib es so:


    Oder versuchs mal so:


    In Pawn, kannst du nicht einfach unterschiedliche Typen in ein Array quetschen :)


    Da die Sprache C-Ähnlich ist, unterliegt sie einer strengen Typisierung.

    Mehr Infos dazu: https://de.wikipedia.org/wiki/Typisierung_(Informatik)


    Im Gegensatz zu z.B. Javascript/Python, wo das Problemlos möglich wäre, muss hier angegeben werden, um was für einen Typ es sich handelt. Also String (Array) oder int, bool, float o.ä.


    Sonst kann der Compiler das nicht verarbeiten.


    Also das "enum" sorgt in diesem Fall dafür, dass der Compiler weiß, welche Typen im Array sind und es hat den netten Nebeneffekt, dass du die Variablen im Array gleich benennen kannst und es so übersichtlicher auch für dich wird :)


    Alternativ könntest du auch mehrere Arrays erstellen:


    C
    new VPNames[][] =
    {
        "Ronald",
        "Donald",
        "Gonald"
    };
    
    new VPBools[sizeof(VPNames)] = {true, true, false};

    Das sizeof(VPNames) gibt in diesem Fall vor, dass das Array, genauso groß sein muss, wie VPNames.

    Aber es ist denke ich schöner alles in einem zu haben und auch direkt mit einem Namen ansprechen zu können.

    Hier hätte man mehrere Stellen, die immer zu berücksichtigen sind, das kann schnell unübersichtlich werden.


    Falls es sich hier übrigens um Konstanten handelt, also ein Array, wo der Wert zur Laufzeit nicht mehr geändert wird, dann kannst du anstatt

    new

    stock const verwenden.


    stock sagt aus (egal ob vor globalen Variablen oder Funktionen), dass wenn die Variable (oder die Funktion) nicht im Code benutzt wird, der Compiler es ignorieren kann und so wird kein Speicher reserviert in der .amx Datei.


    Das const sorgt dafür, dass die Nutzung optimiert wird und du nicht (evtl. ausversehen) irgendwelche Werte mehr darin nachträglich ändern kannst.

    Oder kann ich einfach irgendwie

    Ja, fast, kannst es so machen:


    Finde es gut, dass du pogressbar, statt progressbar geschrieben hast ^^


    Laut ChatGPT könnte dir das helfen.


    Da so wenig Infos zur Verfügung stehen, ist das doch schon einmal ein guter guess.


    Nächstes mal doch einfach selbst ChatGPT nutzen.

    Kann ich Informationen für Filterscript wie zB ein #define oder Variable aus dem Gamemode abrufen?!

    Tatsächlich kann man das auch direkt.

    PVars sind ja eher Spieler bezogen, wenn es um globale Variablen geht, könntest du folgendes tun:


    C++
    //Im GameMode:
    #define GLOBAL_VAR 5
    
    forward GetGlobalVar(); //Kannst du nennen wie du magst
    public GetGlobalVar()
    {
        return GLOBAL_VAR;
    }
    C++
    //Im Filterscript:
    new GLOBAL_VAR;
    
    public OnFilterScriptInit()
    {
        GLOBAL_VAR = CallRemoteFunction("GetGlobalVar", "");
        return 1;
    }


    Aber am Einfachsten wäre es ein Include zu schreiben, statt einem Filterscript :)


    Ich habe noch ein anderes Problem, vielleicht kannst du mir da auch helfen :D
    Wenn ich sccanf2 einbinde (aktuelle version) zerschießt das so halb meinen script. Die Spieler Auswahl ist nicht mehr sichtbar bzw code in OnPlayerRequestClass ist tot (spawnen funktioniert aber noch) und

    manche commands (OnPlayerCOmmandText -> /gmx) gehen nicht mehr.
    (Der Compiler sagt es ist alles tutti. (sscanf plugin im Ordner und .cfg, ocmd.inc (2013 neuste?) und sscanf2.inc in pawno)

    Lade mal das crashdetect Plugin und prüf den Server.log) :)

    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 :)