Beiträge von Laaazzyy

    Nabend,
    Ich finde grade einfach den Fehler nicht...
    format(string,sizeof(string),"Fraktionrang: [%s]", GetFraktionName(PlayerInfo[playerid][pFraktionrang]));
    Fehler: error 029: invalid Expression, assumed Zero....



    Hab auch schon den Fehlerklärbär genutzt. Gibt aber keine Informationen aus ?(
    Wird denke ich mal nur ein Denkfehler sein, den ich grade einfach nicht Finde.

    @Kaliber
    Danke erstmal für den Tipp.
    Kann deinen Beitrag grade nicht als Zitat nutzen.


    Hätte grade noch eine andere Frage...
    Und zwar sitze ich grade an einem Befehl dran, der das Admin Level setzen soll.
    Funktioniert soweit auch.
    Das einzige was nicht Funktioniert ist, das es in der Datenbank gespeichert wird.


    Hier mal der Befehl:

    CMD:setadmin(playerid,params[])
    {
    if(PlayerInfo[playerid][pAdmin] < 1)return SendClientMessage(playerid, -1,"Du bist kein Admin. Du kannst den Befehl nicht nutzen!");
    new PID, str[128], rank[22];
    if(sscanf(params, "us", PID, str, rank))return SendClientMessage(playerid, -1 ,"[Benutze] /setadmin [playerid][rank]");
    if(!PlayerInfo[PID][pLoggedIn])return SendClientMessage(playerid, -1, "Spieler ist nicht eingeloggt!");
    {
    switch(PlayerInfo[PID][pAdmin])
    {
    case 1: rank = "Moderator";
    case 2: rank = "Anfänger Admin";
    case 3: rank = "Anwärter Admin";
    case 4: rank = "Administrator";
    }
    }
    format(str, sizeof(str), "'%s' wurde zu einem Admin ernannt mit dem Rank: %s",getName(PID),str, rank);
    SendClientMessageToAll(-1, str);
    PlayerInfo[PID][pAdmin] = rank;
    SaveUserStats(PID);
    return 1;
    }


    Jetzt möchte ich nur noch zusätzlich gerne, das anstatt die ID des Rang's der Name des Rangs dort steht.
    Sollte das nicht mit der Methode funktionieren die du mir oben gezeigt hast?

    Danke für deinen Tipp.
    Ja das mit den Makros muss ich noch besser Umsetzen bzw mir eintrichtern :D
    Aber sehr gut erklärt. Ich werde mir mal Tutorials anschauen wegen dem kürzen Code schreiben und alles.

    Die Variable PID wird nie zugewiesen, du musste jene aus den params entnehmen, dazu kann ich dir nur sscanf 2 empfehlen

    Könntest du eventuell kurz mit einem Beispiel erklären was du genau meinst? Stehe grade bisschen auf dem Schlauch :D
    Hab die Variable entfernt, aber sobald ich Ingame den Befehl /ban 0 eingebe passiert nix ^^

    Nabend,
    Könnte mir jemand sagen wo hier der Fehler liegt?
    Er bann den gewünschten Spieler nicht bzw es passiert einfach nix... ?(

    CMD:ban(playerid, params[])
    {
    if(PlayerInfo[playerid][pAdmin] >= 1)
    {
    new PID;
    new reason[64];
    new str[128];
    new Playername[MAX_PLAYER_NAME], Adminname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, Adminname, sizeof(Adminname));
    GetPlayerName(PID, Playername, sizeof(Playername));
    if(sscanf(params, "us[64]", PID, reason)) return SendClientMessage(playerid, -1, "[Benutze] /ban [playerid][Grund]");
    format(str, sizeof(str), "'%s' wurde Gebannt von [Admin] '%s'. [Grund:] %s", Playername, Adminname, reason);
    SendClientMessageToAll(-1, str);
    Ban(PID);
    Kick(PID);
    if(!IsPlayerConnected(PID))
    return SendClientMessage(playerid, -1, "Spieler ist nicht Online!");
    }
    else
    {
    SendClientMessage(playerid, -1,"Du bist kein Admin. Du kannst den Befehl nicht nutzen!");
    }
    return 1;
    }

    Zeigt bitte nochmal dein SaveUserStats
    So wie es oben steht sind ja noch die bereits angesprochenen Groß´und Kleinschreibfehler in der Query und in der Variable vorhanden


    stock SaveUserStats(playerid)
    {
    if(!PlayerInfo[playerid][pLoggedIn]) return 1;
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d', skin = '%d' WHERE id = '%d'",PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths],PlayerInfo[playerid][pskin], PlayerInfo[playerid][p_id]);
    mysql_pquery(handle, query);
    return 1;
    }

    Was passt denn da? Er lädt den Skin aus der DB und jeder wird nicht gesetzt. Das passt halt nicht.

    Der Grund dafür ist oben beschrieben, du lädst zwar die Variable, setzt jedoch nie deinen Skin. Ergo bleibst du bei Skin ID 0, da es der Standart Skin ist mit dem du spawnst.

    Wird leider immer noch nicht Gespeichert. Obwohl die Variablen gesetzt werden.

    Andere Variablen lädt er ja auch.
    Hab z.b in der DB angegeben das ich 1000 Money hab. Das wird Ingame auch Angezeigt.
    Er lädt auch anscheinend den Skin aus der Datenbank aber mir wird Ingame halt Skin '0' angezeigt.



    forward OnUserRegister(playerid);
    public OnUserRegister(playerid)
    {
    PlayerInfo[playerid][p_id] = cache_insert_id();
    PlayerInfo[playerid][pLoggedIn] = true;
    SendClientMessage(playerid, 0x00FF00FF,"[Konto] Registration erfolgreich");
    return 1;
    }

    Poste mal nur die Error.log
    mysql_log(ALL); & dann mir mal nur den Inhalt der Error.log zeigen.


    Zeig mal wie du das Passwort prüfen lässt & die genaue Datenbank Struktur. Also ein komplett Screen.
    Und auch mal bitte, wie du das Konto erstellen lässt.


    Kleiner Tipp am Rande. Nutze SHA1 oder SHA256, MD5 ist fürn Arsch.

    In er error.log steht nix drinnen...

    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGISTER)
    {
    if(!response) return Kick(playerid);
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration","Bitte registriere dich: \n{FF0000}Mindestens 3 Zeichen","ok","Abbrechen");
    new query[256];
    mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][pName], inputtext);
    mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
    return 1;
    }
    if(dialogid == DIALOG_LOGIN)
    {
    if(!response) return Kick(playerid);
    if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");
    new query[256];
    mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = MD5('%e')", PlayerInfo[playerid][pName], inputtext);
    mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
    return 1;
    }
    return 0;
    }

    Was hatten denn eigentlich das "GetPlayerSkin(playerid);" am Ende deiner Speicherfunktion für einen Sinn, meine.. du führst es ganz am Ende aus.
    Mit angepasstem Laden sowie Query von der Speicherfunktion, funktioniert es immer noch nicht?
    Lass dir mal deine Spielerstats nach dem Laden ausgeben und aktiviere mal die MySQL Log und sag uns bescheid was drinne steht an Errors usw.

    Hier mal die mysql_log:

    Code
    #

    Jedes mal wenn ich mich Einlogge erhalte ich den Skin '0'. Obwohl ich in der DB angegeben habe das ich den Skin '5' habe... ?(


    forward OnUserLogin(playerid);
    public OnUserLogin(playerid)
    {
    new rows;
    cache_get_row_count(rows);
    if(rows == 0)
    {
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
    }
    else
    {
    cache_get_value_name_int(0, "id", PlayerInfo[playerid][p_id]);
    cache_get_value_name_int(0, "level", PlayerInfo[playerid][pLevel]);
    cache_get_value_name_int(0, "money", PlayerInfo[playerid][pMoney]);
    cache_get_value_name_int(0, "kills", PlayerInfo[playerid][pKills]);
    cache_get_value_name_int(0, "skin", PlayerInfo[playerid][pskin]);
    PlayerInfo[playerid][pLoggedIn] = true;
    SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt");
    GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
    }
    return 1;
    }



    public OnPlayerConnect(playerid)
    {
    PlayerInfo[playerid][p_id] = 0;
    PlayerInfo[playerid][pLoggedIn] = false;
    PlayerInfo[playerid][pLevel] = 0;
    PlayerInfo[playerid][pMoney] = 0;
    PlayerInfo[playerid][pKills] = 0;
    PlayerInfo[playerid][pDeaths] = 0;
    PlayerInfo[playerid][pskin] = 0;
    GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);
    return 1;
    }

    Vielleicht postest du einfach deinen Code, dann können wir gemeinsam den Fehler finden.So profitierst du ggf. mehr daran.
    Weiterhin ist es recht schwierig dir sowas ohne deine Variablen/Strukturen zu kennen zu machen

    Sorry total Verpeilt :D


    Mein Enum:

    enum pDataEnum
    {
    p_id,
    bool:pLoggedIn,
    pName[MAX_PLAYER_NAME],
    pLevel,
    pMoney,
    pKills,
    pDeaths,
    pAdmin,
    IP[16],
    pSkin
    }


    OnUserLogin(playerid):

    forward OnUserLogin(playerid);
    public OnUserLogin(playerid)
    {
    new rows;
    cache_get_row_count(rows);
    if(rows == 0)
    {
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
    }
    else
    {
    cache_get_value_name_int(0, "id", PlayerInfo[playerid][p_id]);
    cache_get_value_name_int(0, "level", PlayerInfo[playerid][pLevel]);
    cache_get_value_name_int(0, "money", PlayerInfo[playerid][pMoney]);
    cache_get_value_name_int(0, "kills", PlayerInfo[playerid][pKills]);
    cache_get_value_name_int(0, "Skin", PlayerInfo[playerid][pSkin]);
    PlayerInfo[playerid][pLoggedIn] = true;
    SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt");
    GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
    }
    return 1;
    }


    stock SaveUserStats(playerid)

    stock SaveUserStats(playerid)
    {
    if(!PlayerInfo[playerid][pLoggedIn]) return 1;
    new query[256];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d', Skin = '%d', WHERE id = '%d'",PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths],PlayerInfo[playerid][pSkin], PlayerInfo[playerid][p_id]);
    mysql_pquery(handle, query);
    GetPlayerSkin(playerid);
    return 1;
    }