Beiträge von Kaliber

    Das kann so nicht direkt zugewiesen werden.Mache es so:
    strcat(PlayerInfo[pID][pReason], reason, 40);

    Das stimmt nicht, hier könnte es jetzt zu einem Fehler kommen.


    Wie hast du denn im enum pReason definiert?


    Es müsste eigentlich mit pReason[40] im enum stehen, dann kannst du es auch direkt zuweisen.


    Wenn aber nur Beispielsweise pReason da steht, kommt genau der Fehler, den du jetzt auch hast. Da hilft dir auch kein strcat, dann ist zwar der Fehler weg, aber es wird halt nur der erste Buchstabe vom Wort in die Variable gepackt...


    und das bringt dir halt auch wenig ^^

    kommt eine Fehlermeldung, dass der Befehl nicht existiert.

    Lade sowas am Besten auf ein leeres Skript.


    Ansonsten könnten da die CMD-Prozessoren sich gegenseitig in den Weg kommen ^^


    Wenn es notwendig ist, dass es auf dem main Skript lädt, dann kommste nicht drum herum, als dir anzuschauen, wer was wo blockiert :)

    Wäre es bei meiner anderen Methode zwar auch nicht, aber dann schreib es so:


    PS: Jetzt solltest du es außerhalb von einer Funktion schreiben, ansonsten würde es immer und immer wieder aufgerufen werden:


    JavaScript
    setInterval(function() {
        mp.players.forEach(function(player){
            mp.trigger('playerAutoSave', player);
        });
    }, 8000);

    Aber dein Code funktioniert nicht

    Doch er funktioniert aber player ist nicht definiert.


    setInterval((player) => mp.trigger('playerAutoSave', player), 8000, HIERMUSS_PLAYERID_REIN);


    Da muss halt eine Spielerid rein.


    Das heißt du kannst Beispielsweise setInterval unter OnPlayerConnect (bzw dem GTA V äquivalent) packen und dann für den Spieler laufen lassen und unter OnPlayerDisconnect clearInterval nutzen um den Timer wieder zu löschen.


    Oder du loopst durch alle Spieler.


    Weiß ja nicht genau, was du vor hast ^^


    Natürlich kannst du aber das nicht irgendwo random hinpacken, da dann player nicht definiert ist.

    Nein...


    Also schau mal, du lässt das so:


    JavaScript
    mp.events.add("playerAutoSave", (player) => {
        player.loggedInAs = "";
        gm.mysql.handle.query("UPDATE `account` SET money = ?, posX = ?, posY = ?, posZ = ? WHERE `username` = ?", [player.money, player.position.x, player.position.y, player.position.z, player.name], function(err,res){
            if(!err){
                console.log(`Account saved: ${player.name}`)
            } else (
                console.log("ERROR: " + err)
            )
        });
    });

    Und dann machst du sowas:


    setInterval((player) => mp.trigger('playerAutoSave', player), 8000, player);


    Du musst das ja dann für den Spieler aufrufen.


    Hab aber noch nie was für GTA V programmiert, ist jetzt reine Code-Logik.

    Jetzt addest du alle 8 Sekunden das Event "playerQuit".


    Das willst du ja nicht, du willst ja den Spieler speichern oder?


    Die Lambda Notation bringt dich glaube ich etwas durcheinander.


    Aber (player) => ist eigentlich nichts anderes als:


    function (player) {


    Und nur die, willst du im Interval glaube ich aufrufen.

    Hmm das was ich im Admin Befehl geschrieben hatte, schreibs mal so:



    C
    for(new i=GetPlayerPoolSize(); i!=-1; i--)
    {
        if(IsPlayerConnected(i) && PlayerInfo[i][pLoggedIn])
        {
            SaveUserStats(i);
            PlayerInfo[i][pLoggedIn] = 0;
        }
    }

    Und dann probiere es nochmal.


    Wenn es dann immer noch nicht geht, lass mal den mysql_log mitlaufen und schau dann da mal rein.

    Der /restart Befehl:

    Du Restartest den Server, bevor du SaveUserStats verwendest.


    Und du speicherst auch nur für den, der den restart Befehl eingibt, du Egoist :P


    Ich empfehle dir sowas:


    Und schau mal hier rein: Schneller & strukturierter skripten Eventuell hilft das ein wenig :)