Beiträge von Jeffry

    Ok.
    Dann lege in dem enum zu PlayerInfo folgendes an:
    lastLogin[11],


    Dann fügst du beim Login ein:
    new day, month, year;
    getdate(year, month, day);
    format(PlayerInfo[playerid][lastLogin], 11, "%02d.%02d.%d", day, month, year);


    Und beim Speichern schreibst du dann das PlayerInfo[playerid][lastLogin] in die Datei, analog zu den anderen Stats, nur aufpassen, dass du es auch als String speicherst, und nicht als Integer.

    Teste es mal so:
    public OnPasswordResponse(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    LoadPrivatCars(playerid);
    SpielerLaden(playerid);
    StopAudioStreamForPlayer(playerid);
    HideLoginMenu(playerid);
    UpdateReportTD();
    switch (sInfo[playerid][SpawnType])
    {
    case 0:
    {
    SetSpawnInfo(playerid, 0, sInfo[playerid][SkinID], 1093.9182,-1987.8860,69.0609,226.516, 0, 0, 0, 0, 0, 0 );
    SpawnPlayer(playerid);
    }
    case 1:
    {
    new query[128];
    format(query,sizeof(query),"SELECT * FROM fraktionen WHERE id = %d",sInfo[playerid][Fraktion]);
    mysql_function_query(dbhandle,query,true,"OnFrakSpawn","i",playerid);
    }
    case 2:
    {
    //HausSpawn
    }
    case 3:
    {
    //Letzter Standort
    }
    }
    //Hier gehts eig. weiter, hat aber nix mehr mit der Funktion zu tun.

    }


    forward OnFrakSpawn(playerid);
    public OnFrakSpawn(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    new Float:FPosX,Float:FPosY,Float:FPosZ,Float:FPosRT,int,vir;
    FPosX = cache_get_field_content_float(0,"SpawnX",dbhandle);
    FPosY = cache_get_field_content_float(0,"SpawnY",dbhandle);
    FPosZ = cache_get_field_content_float(0,"SpawnZ",dbhandle);
    FPosRT = cache_get_field_content_float(0,"SpawnRT",dbhandle);
    int = cache_get_field_content_int(0,"SpawnInt",dbhandle);
    vir = cache_get_field_content_int(0,"SpawnVir",dbhandle);
    SetSpawnInfo(playerid, 0, sInfo[playerid][SkinID], FPosX,FPosY,FPosZ,FPosRT, 0, 0, 0, 0, 0, 0 );
    SetPlayerInterior(playerid,int);
    SetPlayerVirtualWorld(playerid,vir);
    SpawnPlayer(playerid);
    }
    return 1;
    }

    Das Objekt ist ja riesig.
    Schreibe es so:
    forward TurnObject(objectid, objpos);
    public TurnObject(objectid, objpos)
    {
    if(objectid == dBoden)
    {
    switch(objpos)
    {
    case 0: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.01, testSpeed, 0.00000, 0.00000, 180.0), objpos = 1;
    case 1: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000-0.01, testSpeed, 0.00000, 0.00000, 270.0), objpos = 2;
    case 2: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.01, testSpeed, 0.00000, 0.00000, 0.0), objpos = 3;
    case 3: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000-0.01, testSpeed, 0.00000, 0.00000, 90.0), objpos = 0;
    }
    SetTimerEx("TurnObject", testTime, 0, "dd", dBoden, objpos);
    }
    return 1;
    }


    Und dann setze per Befehl den Timer auf ~8000, da sieht es ziemlich gut aus. 750ms war viel zu wenig. Die Zeit ist ja die Zeit, die das Objekt braucht um eine viertel Drehung zu machen. Das musst du eben genau messen, oder abschätzen.

    Aha, na siehste, dann steht es doch nicht in der Tabelle (Tabelle users). ;)
    Poste bitte dein SpielerLaden(playerid);, dann mache ich dir das kurz richtig.

    IntelCore.I7:
    Du sollte alle "Copyright" mit "Copyright[playerid]" ersetzen. Alleine in dem Code den du gepostet hast sehe ich noch mindestens 10 nicht umgeänderte.


    Corvus: Wie hast du buscars und respawnL deklariert?


    Saphire:

    Ich darf nochmal daran erinnern, dass dieser Thread für kleine Scripting Fragen ist, und nicht zum debuggen von MySQL Codes oder sonstigen langen Codes. Dafür kann man einen eigenen Thread machen, das wahrt die Übersichtlichkeit des Forums und vor allem des Threads.


    Außerdem solltest du zeigen, wie du "PlayerInfo[playerid][pGesperrt]" aus der Datei/Datenbank lädst. In einem eigenen Thread bitte.

    Dann selektierst du es nicht.
    Wie sieht das query aus, welches OnPasswordResponse aufruft?
    Suche nach
    "OnPasswordResponse "
    mit Anführungszeichen.

    Alle diese Felder existieren in der Tabelle in deiner Datenbank nicht. Logischerweise kann die Position dann auch nicht ausgelesen werden, wenn sie nicht existiert. ;)
    Lege die Felder an.

    Unter die Includes:
    new testTime = 750;
    new Float:testSpeed = 0.001;



    forward TurnObject(objectid, objpos);
    public TurnObject(objectid, objpos)
    {
    if(objectid == dBoden)
    {
    switch(objpos)
    {
    case 0: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.01, testSpeed, 0.00000, 0.00000, 180.0), objpos = 1;
    case 1: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.02, testSpeed, 0.00000, 0.00000, 270.0), objpos = 2;
    case 2: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.03, testSpeed, 0.00000, 0.00000, 0.0), objpos = 3;
    case 3: MoveObject(dBoden, 1478.07996, -1799.66003, 227.06000+0.04, testSpeed, 0.00000, 0.00000, 90.0), objpos = 0;
    }
    SetTimerEx("TurnObject", testTime, 0, "dd", dBoden, objpos);
    }
    return 1;
    }


    Die Befehle:
    ocmd:timer(playerid, params[])
    {
    if(!strlen(params)) return SendClientMessage(playerid, 0xFF0000FF, "/timer [Zeit in ms]");
    if(strval(params) < 100) return SendClientMessage(playerid, 0xFF0000FF, "Zu klein!");
    testTime = strval(params);
    new str[145];
    format(str, sizeof(str), "Zeit: %dms", testTime);
    SendClientMessage(playerid, 0xFFFF00FF, str);
    return 1;
    }
    ocmd:geschw(playerid, params[])
    {
    if(!strlen(params)) return SendClientMessage(playerid, 0xFF0000FF, "/geschw [Geschwindigkeit]");
    if(floatstr(params) <= 0.0) return SendClientMessage(playerid, 0xFF0000FF, "Zu klein!");
    testSpeed = floatstr(params);
    new str[145];
    format(str, sizeof(str), "Geschwindigkeit: %fms", testSpeed);
    SendClientMessage(playerid, 0xFFFF00FF, str);
    return 1;
    }


    In der Ausgabe steht dann jeweils der Wert, den musst du dann wieder an Stelle der Variablen im Code schreiben, wenn es passt.

    Du musst die Textdraw-Variable "Copyright" (warum auch immer die so heißt) als Array anlegen, da ja jeder sein eigenes TextDraw hat.
    Sprich so:
    new PlayerText:Copyright[MAX_PLAYERS];


    Und alle Zugriffe auf "Copyright" zu "Copyright[playerid] ändern.


    Ansonsten passt es eigentlich, da sollten keine Fehler auftreten.

    Nein, nur der Timer wird in Millisekunden angegeben, die Geschwindigkeit ist nur eine Zahl relativ zur Distanz die zurückgelegt wird.
    Wenn du einen Befehl machen willst für beides, dann mache für beide eine globale Variable (unter den Includes das new) und mache einen /timer Befehl, mit dessen "params" du dann die Zeit des Timers steuerst (die 750), und einen Befehl /geschwindigkeit, mit dessen "params" du dann als Float die Geschwindigkeit steuerst.
    (strval & floatstr)


    Dann beim Timer die 750 mit der Variable ersetzen und das OBJECT_SPEED mit der anderen Variable ersetzen (OBJECT_SPEED kannst du keinen variablen Wert zuweisen, das ist ja eine Konstante, daher eine Variable (new...) anlegen).

    Naja, du machst hier die 750 größer:
    SetTimerEx("TurnObject", 750, 0, "dd", dBoden, objpos);
    zu:
    SetTimerEx("TurnObject", 1500, 0, "dd", dBoden, objpos);


    Und OBJECT_SPEED machst du kleiner, zu 0.0005.


    => Somit wäre der Timer verdoppelt und die Geschwindigkeit halbiert.
    Musst es eben so anpassen wie es dir von der Geschwindigkeit her dann gefällt. Timer immer in Relation zur Geschwindigkeit anpassen. Genau kann ich es dir so nicht sagen, welche Zahlen du nehmen musst, ich habe damals auch dutzende Versuche gebraucht, bis es gepasst hat. Das ist eben eine Probiererei. ;)