Beiträge von Jeffry

    Also nochmal:


    Die Daten (Age / Wohnort / Geschlecht) können in deinem Fall erst nach dem Tutorial in die Datenbank gespeichert werden.



    In deinem Log fehlt der Teil des Tutorials. Du registrierst dich, danach ist der Log vorbei. Da steht nichts von UPDATE, entsprechend fehlt der Teil als du das Tutorial gemacht hast. Die ersten paar Zeilen vor dem mysql_connect sind nicht von Bedeutung, da es vor der Registration war.



    => Lösche den mysql_log.txt. Dann gehe in deinen Server, registriere dich und gehe dann durch das Tutorial. Dann poste den gesamten Log dazu und dein SpielerSpeichern.

    Sollte er aber das Streamerplugin nutzen, könnte er sich den ganzen Kram auch sparen :D
    Schließlich besitzt das Plugin neben 2 wunderschönen Callbacks auch die IsPlayerIn(Dynamic)Area. @leader_king:


    Was soll ihm das sparen, wenn er anstatt IsPlayerInArea eben IsPlayerInDynamicArea verwendet? Den Timer braucht er trotzdem und abfragen ob der Spieler jemanden attackiert muss er ebenfalls.
    Mit den zwei Callbacks wird nur getriggert ob der Spieler die Zone betritt oder verlässt, das bringt hier aber relativ wenig.


    Sparen kann er sich da gar nichts. :rolleyes:

    Ist ja auch klar, du gibst die Daten erst mit dem Tutorial ein, also nach der Registration. Du musst die Daten entweder vor dem Registrieren vom Spieler abfragen, oder danach gesondert in die Datenbank speichern, zum Beispiel mit SpielerSpeichern.


    Gehe in deinen Server, registriere dich und gehe dann durch das Tutorial. Stehen dann die Werte in der Datenbank? Sollten sie eigentlich, wenn du in deinem SpielerSpeichern das `alter` zu `age` geändert hast.
    Falls nicht, dann poste dein SpielerSpeichern und den Log der entstanden ist, als du das Tutorial gemacht hast.

    Die Platzhalter bei VALUES fehlen hier:
    format(query,300,"INSERT INTO spielerdaten (username,passwort,geschlecht,age,wohnort) VALUES ('%s',MD5('%s'))",
    SpielerName(playerid),passwort,pInfo[playerid][pGeschlecht],pInfo[playerid][pAlter],pInfo[playerid][pWohnort]);


    Der VALUES Teil muss so sein:
    VALUES ('%s',MD5('%s'),'%d','%d','%d')


    Oder eben %s falls eines ein String ist.


    Poste nächstes mal bitte den Log mit dazu, dann müssen wir nicht erst suchen.

    ja ich habe dem eine Virtuelle Welt zugewiesen weil ich die drawdistanz hoch gesetzt habe muss ich die jetze für die virtuelle Welt nochmal machen wo der Spieler das tutorial macht ?


    Nein, wenn du die Objekte nicht explizit einer virtuellen Welt zugewiesen hast, dann musst du gar nichts machen. Die Objekte werden standardmäßig in jeder virtuellen Welt gleich angezeigt.

    1 ich will den Spieler in eine virtuelle Welt setzten z.b 20 sieht er dann auch das gemappte ? ich habe das über ein Filterscript laufen da ich das nicht im Script haben will ( das gemappte wird mit CreateDynamicObject gemacht )
    2 sollte ich den Spieler am besten in einer andere Welt setzen fürs tutorial das die anderen ihn nicht sehen und denken er hackt ?


    1) Ja, außer du hast dem Dynamic-Object eine virtuelle Welt zugewiesen.
    2) Wäre zu empfehlen.

    Dann wohl nur mit IsPlayerRconAdmin ....


    Entweder so, oder du sagst, dass man für für die Benutzung folgendes in den eigenen GameMode einfügen muss:


    forward GetAdmin(playerid);
    public GetAdmin(playerid) return SpielerInfo[playerid][pAdmin]; //Name von der Variable muss an die eigene Admin-Level Variable angepasst werden

    Unter die Includes im FS:
    #define AdminLevel(%0) CallRemoteFunction("GetAdmin","i",%0)


    Im Befehl, im FS:
    if(AdminLevel(playerid) > 5)
    {
    //Admin Level ist größer als 5
    }


    oder so:
    if(AdminLevel(playerid) == 1337)
    {
    //Admin Level ist 1337
    }


    den forward/public (GetAdmin) lässt du so wie er ist.

    Also, du hast es jetzt alles zu i im Index geändert?
    Teste es mal so, was wird da geprintet?


    ocmd:fparken(playerid)
    {
    if(!DarfPlayerCommand(playerid))return ErrorMsg(playerid,"Du kannst keine Befehle nutzen.");
    if(SpielerInfo[playerid][Frakt]==0&&!isImporter(playerid))return ErrorMsg(playerid,"Du bist nicht in der jewaligen Fraktion.");
    if(SpielerInfo[playerid][leader]==0&&!isImporter(playerid))return ErrorMsg(playerid,"Du bist kein Leader.");
    if(GetPlayerVehicleSeat(playerid)!=0)return ErrorMsg(playerid,"Du bist nicht der Fahrer des Fahrzeuges.");
    for(new i=1;i<MAX_AUTOS;i++)
    {
    if(FraktAuto[i][id_x]!=GetPlayerVehicleID(playerid))continue;
    if(FraktAuto[i][besitzer]==SpielerInfo[playerid][Frakt]||FraktAuto[i][besitzer]==32&&SpielerInfo[playerid][Frakt]==4||isImporter(playerid)&&FraktAuto[i][besitzer]==31)
    {
    printf("Distanz(%d): %0.2f", i, distanz[i]);
    new Float:tmp = distanz[i];
    SendClientMessage(playerid,COLOR_GRUEN,"Du hast das Fahrzeug erfolgreich umgeparkt.");
    GetVehiclePos(FraktAuto[i][id_x],FraktAuto[i][v_xc],FraktAuto[i][v_yc],FraktAuto[i][v_zc]);
    GetVehicleZAngle(FraktAuto[i][id_x],FraktAuto[i][v_ac]);
    OneFCarSave(i);
    FCarSpawner(i);
    PutPlayerInVehicle(playerid,FraktAuto[i][id_x],0);
    distanz[i] = tmp;
    printf("Distanz(%d): %0.2f", i, distanz[i]);
    return 1;
    }
    }
    return 1;
    }

    Bei der Registration speicherst du das Alter ja auch gar nicht (bei INSERT INTO):

    Zitat

    INSERT INTO spielerdaten (username,passwort) VALUES ...


    Das solltest du noch hinzufügen, wenn du es beim registrieren speichern lassen willst.
    Ansonsten musst du eben direkt nach dem registrieren SpielerSpeichern aufrufen.


    Aber wie du siehst, steht in dem Log nichts von UPDATE zusammen mit dem Alter.

    Hast du die Spalte on der Datenbank auch umbenannt?


    Eigentlich musst du das gar nicht machen, du kannst auch einfach alter zu `alter` ändern, dann sollte es auch klappen.



    Wenn es mit keiner der beiden Varianten geht, dann ändere das Log Format mal zu Log All.

    Wenn du im Spiel bist, gebe mal /dl ein. Dann merke dir die vehicle id die da steht und parke das Fahrzeug. Ist die ID danach eine andere?


    Wenn ja, dann liegt der Fehler am Tacho hier:
    distanz[FraktAuto[i][id_x]]


    Du greifst mit der vehicle id auf die Distanz zu, wenn sich diese aber ändert, hast du die Distanz eines anderen Fahrzeugs, welche dann eben 0 ist, falls noch niemand damit gefahren ist.
    Besser ist, wenn du mit dem Index des Fahrzeugs zugreifst, dann passiert dir das nicht.
    distanz[i]


    Das selbe Problem müsste bei Pizza und den ganzen Drogen im Fahrzeug auch da sein.



    Falls die ID gleich bleibt, müssen wir das ganze mal debuggen.

    Den return in Zeile 252 (zuvor 260) musst du trotzdem weg machen, sonst geht nur ein Fahrzeug.


    Lädst du die Fahrzeuge beim Serverstart? Wenn ja, hast du die Dateien gelöscht, von den vielen Fahrzeugen die zuvor erstellt worden sind?

    Gibt Sinn, daran habe ich gar nicht gedacht. Du hast das return also nicht zu viel gehabt, sondern nur an der falschen Stelle (war am Handy leider etwas schwer zu sehen, da die Einrückung etwas wirr angezeigt wird).


    Ändere alle
    PutPlayerInVehicle...
    Zu
    return PutPlayerInVehicle...