Beiträge von Kaliber

    Nicht in dem Fall. Probiere es aus bevor du etwas behauptest.

    Ja ich weiß ja nicht mal genau, was er machen will, das hat er ja nicht gesagt, aber prinzipiell kann man das direkt zuweisen.



    C
    enum pInfo
    {
    	pFunktionName[MAX_PLAYER_NAME]
    };
    new Spieler[pInfo], b[MAX_PLAYER_NAME] = "Hallo";
    
    
    Spieler[pFunktionName]=b;

    Ist ja kein Problem.

    auf einen bestimmten string setzen (den ich noch nicht habe)

    Du bekommst doch einen Fehler, zeig uns doch einfach mal die Zeile, wie du es bis jetzt machst.
    und das new PlayerInfo würde ich gern noch sehen



    zu:

    Das mit dem strcat ist ein richtig schlechter Ratschlag, denn sobald das 2x aufgerufen werden sollte...hat der das 2x da drinnen stehen.


    und format ist ultra lahm, wieso nicht einfach durch eine direkte Zuweisung lösen.


    Nur in den seltensten Fällen ist format nötig.

    (16929) : error 047: array sizes do not match, or destination array is too smal
    enum pInfo
    { // so sieht der anfang vom enum aus
    pFunktionName[MAX_PLAYER_NAME] ( IM ENUM)


    Habs schon mit n paar größen probiert (512 z.B)

    Bitte unterlasse Vollzitate, das ist unnötig.


    Desweiteren, zeig doch mal ganz genau wie du die Variable von dem enum deklariert hast und dann wie du den string deklariert hast, den du zuweisen willst und dann wie du es zuweist ^^


    Gib doch einfach ein wenig von deinem Code preis...oder sollen wir das alles erraten?! :D

    Wie setzte ich einen string auf ein Enum?


    So bspw:


    PlayerInfo[playerid][pFunktionName] = "fname";

    Das kannst du genau so machen...
    Falls es nicht geht...zeige uns Code und erkläre was du vor hast ^^



    Kann mir jemand erklären weshalb, wieso oder warum ?

    Das liegt daran, dass pPlayer immer 0 ist, sobald GetPlayerName aufgerufen wird, da du das vor dem sscanf aufrufst und erst ab dem sscanf aber pPlayer einen Wert zugewiesen bekommt ;)


    Die Lösung, einfach GetPlayerName unter das sscanf packen :)

    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.