Beiträge von Jeffry

    Dann debugge es so und poste dann was im Server Log steht, wenn du stirbst:
    public leben()
    {
    new Float:health;
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && !IsPlayerNPC(i))
    {
    GetPlayerHealth(i,health);
    printf("i: %d / health: %f / new: %f", i, health, health-1.0);
    SetPlayerHealth(i,health-1.0);
    }
    }
    return 1;
    }


    Den Timer machst du natürlich wieder an.

    Bin ja schon still :p


    War keine Kritik gegen dich, nur eine generelle Anmerkung warum ich es gemacht habe. Ich begründe meine Aktionen immer um Fragen zu vermeiden. ;)


    Ändere:
    format(query, sizeof(query), "SELECT * FROM user WHERE username='%e'", Spielername(playerid));
    zu:
    mysql_format(Handle, query, sizeof(query), "SELECT * FROM user WHERE username='%e'", Spielername(playerid));

    Meine Schuld wenn ich nur C & P mache und du solltest eventuell 'passwort' mit 'd' (password) schreiben sonst kommen da noch mehr fragen auf. ^^


    Kein Problem. Im Gegenteil, das ist gut, so finden wir alle restlichen Fehler. Sollte jetzt aber passen.
    Er hat nur einmal "password" verwendet, sonst immer "passwort", in den Queries zumindest, daher habe ich es zu "passwort" geändert.

    Bessere bitte diese Dinge hier aus, ich habe es schon einige Male gesehen, dass Leute sich an dem Tutorial orientiert haben und immer wieder die gleichen Fehler machen. Die Fehler kommen aus dem Tutorial, und das ist nicht gut.
    Wenn man das Tutorial Schritt für Schritt befolgt, dann funktioniert das System auf Grund von Syntax-Fehlern im Query, sowie fehlerhaften Funktionsanwendungen nicht.


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    new query[256], key[50];
    if(dialogid == DIALOG_REGISTER)
    {
    if(!response)
    {
    return Kick(playerid);
    }
    if(!strlen(inputtext) < 4)return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Anmeldung", "Es wurde kein Account unter diesem namen gefunden!", "Anmelden", "Abbrechen");
    format(key, 50, "%s", inputtext);
    mysql_escape_string(Spielername(playerid), Spielername(playerid)), mysql_escape_string(key, key);
    format(query, sizeof(query), "INSERT INTO (username, passwort) VALUES ('%s',MD5('%s')", Spielername(playerid), key);
    mysql_tquery(Handle, query);
    SendClientMessage(playerid, -1, "Dein Account wurde erstellt.");
    GivePlayerMoney(playerid, 50000), SetPlayerScore(playerid, 10);
    }
    return 1;
    }


    zu:
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGISTER)
    {
    if(!response)
    {
    return Kick(playerid);
    }
    if(!strlen(inputtext) < 4)return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Anmeldung", "Es wurde kein Account unter diesem namen gefunden!", "Anmelden", "Abbrechen");
    new query[256];
    mysql_format(Handle, query, sizeof(query), "INSERT INTO user (username, passwort) VALUES ('%e',MD5('%e'))", Spielername(playerid), inputtext);
    mysql_tquery(Handle, query);
    SendClientMessage(playerid, 0xFFFFFFFF, "Dein Account wurde erstellt.");
    GivePlayerMoney(playerid, 50000);
    SetPlayerScore(playerid, 10);
    }
    return 1;
    }




    Und:
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_LOGIN)
    {
    if(!response)
    {
    return Kick(playerid);
    }
    format(key, 50, "%s", inputtext);
    mysql_escape_string(Spielername(playerid), Spielername(playerid)), mysql_escape_string(key, key);
    format(query, sizeof(query), "SELECT * FROM user WHERE username='%s' AND password='%s'", Spielername(playerid), key);
    mysql_tquery(Handle, query, "OnPasswordResponse", "i", playerid);
    }
    return 1;
    }


    zu:
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_LOGIN)
    {
    if(!response)
    {
    return Kick(playerid);
    }
    new query[256];
    mysql_format(Handle, query, sizeof(query), "SELECT * FROM user WHERE username='%e' AND passwort=MD5('%e')", Spielername(playerid), inputtext);
    mysql_tquery(Handle, query, "OnPasswordResponse", "i", playerid);
    }
    return 1;
    }


    Falls du wieder mal ein Tutorial machst, dann solltest du wenigstens die Grundfunktionen testen, bevor du es veröffentlichst.

    Ah, siehste, noch ein Fehler.
    Ich ändere das gleich in meinem Post in dem Tutorial. EDIT: Geändert.


    format(query, sizeof(query), "INSERT INTO (username, passwort) VALUES ('%s',MD5('%s'))", name, key);
    zu:
    format(query, sizeof(query), "INSERT INTO user (username, passwort) VALUES ('%s',MD5('%s'))", name, key);

    So sollte es klappen:
    dcmd_report(playerid, params[])
    {
    new string[145], name[MAX_PLAYER_NAME];
    if(sscanf(params, "s", string)) return SendClientMessage(playerid,COLOR_ORANGE,"'/report [Narchicht]'");
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    format(string, sizeof(string), "[Report]Neuer report von %s. Report: %s", name, report);
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && !IsPlayerNPC(i))
    {
    if(PlayerInfo[i][pAdminLevel] > 0)
    {
    SendClientMessage(i, COLOR_ORANGERED, string);
    }
    }
    }
    return 1;
    }

    Joa, da steht es leicht an der falschen Position. :fun:


    Zitat

    [18:38:21] [ERROR] CMySQLQuery::Execute[UserCheck] - (error #1054) Unknown column 'username' in 'where clause'


    Es gibt in deiner Tabelle user keine Spalte "username".

    Du baust nach dem mysql_tquery die Verbindung erst auf? Das scheint nicht richtig.
    Hast du vielleicht in einem anderen geladenen Code noch ein mysql_connect das ausgeführt wird?


    Alternativ kannst du in diesem Code auch das mysql_connect komplett entfernen und einfach die Connection ID 1 verwenden, die scheint ja zu existieren.
    Also:
    new MySQL = 1;
    mysql_tquery(MySQL, //etc...);

    Zitat

    [18:12:08] [WARNING] CMySQLHandle::Create - connection already exists


    Du hast bereits eine Verbindung zur Datenbank, du musst nicht nochmal eine machen. Daher wird wohl auch das Query nicht, oder nicht korrekt abgesendet. Prüfe das mal, die Warnung sollte auf jeden Fall nicht kommen.

    Das kannst du so nicht machen, da musst du zwei Variablen verwenden, oder besser so:
    CMD:uclight(playerid)
    {
    if(!IsLoggedIn(playerid))return SendClientMessage(playerid,COLOR_GRAU,"Du bist nicht eingeloggt.");
    if(Spieler[playerid][pFraktion] !=5)return SendClientMessage(playerid,COLOR_GRAU,"Du bist kein Beamter.");
    new vehicleid = GetPlayerVehicleID(playerid);
    if(UCLight[vehicleid] == -1)
    {
    UCLight[vehicleid] = CreateObject(18646,0,0,-1000,0,0,0,100);
    AttachObjectToVehicle(UCLight[vehicleid], GetPlayerVehicleID(playerid), -0.449999,0.225000,0.824999,0.000000,0.000000,0.000000);
    GameTextForPlayer(playerid, "~w~Blaulicht~n~~g~eingeschaltet", 3000, 6);
    }
    else
    {
    DestroyObject(UCLight[vehicleid]);
    UCLight[vehicleid] = -1;
    GameTextForPlayer(playerid, "~w~Blaulicht~n~~r~ausgeschaltet", 3000, 6);
    }
    return 1;
    }


    Und
    new bool:UCLight[MAX_VEHICLES];
    Zu
    new UCLight[MAX_VEHICLES]={-1,...};

    Hier ist der Fehler:
    SendClientMessage(playerid, COLOR_RED, "Du hast dich mit Admin Level %s eingeloggt.");
    zu:
    new str[145];
    format(str, sizeof(str), "Du hast dich mit Admin Level %d eingeloggt.", PlayerInfo[playerid][pAdminLevel]);
    SendClientMessage(playerid, COLOR_RED, str);



    Edit: Ach ja, ist im Dialog, kein Befehl. Aber das passt, hast du richtig verstanden :)

    Möglicherweise, ja.
    Das kann ich dir aber nicht genau sagen, da ich nicht weiß wie du dein System aufgebaut hast, und ob wirklich alle Unterordner und Dateien vorhanden sind, die vorhanden sein müssen.


    Generell ist es eben so, dass fwrite den Server abstürzen lässt, wenn die Datei nicht beschrieben werden kann.