Beiträge von NoLimit

    Also, du musst folgendes tun:
    -Order names "Accounts" bei den Scriptfiles.
    -Server starten & drauf gehen.
    -Ganz wichtig -> Disconnecten nicht den Server stoppen. Bei einem Serverstop wird der Account nicht gespeichert.
    -Dann kannst du dir im Ordner Accounts die .ini Datei mit einem normalen Editor öffnen & dein Adminlevel auf 5 setzen.
    Mit Freundlichen Grüßen,
    NoLimit

    Ich werde den Fehler so schnell wie möglich beheben, nur war ich im Urlaub und hatte schon lange keine Lust mehr zu scripten. Spätestens übermorgen sollte der Fehler behoben sein.

    Du solltest es eigentlich einfach nur übersetzen:
    !str(ing)c(o)mp(are)(key,dini_Get(Spielerdatei,"Passwort"),false))


    Heißt soviel wie: Er vergleicht das eingegebene mit dem richtigen Passwort. Wenn es falsch ist passiert das, was danach folgt (In deinem Fall: er lädt den Account)

    SavePlayer Code
    stock SavePlayer(playerid)
    {
    if(GetPVarInt(playerid,"loggedin")==1)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Skin",GetPlayerSkin(playerid));
    dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
    dini_IntSet(Spielerdatei,"Banned",GetPVarInt(playerid,"Banned"));
    }
    return 1;
    }


    OnPlayerDisconnect
    public OnPlayerDisconnect(playerid, reason)
    {
    if(GetPVarInt(playerid,"loggedin")==1)
    {
    SavePlayer(playerid);
    }
    return 1;
    }

    Du musst bei Geld anstatt %s -> %i einbauen, sprich:
    if(strcmp(cmdtext, "/stats", true)==0)
    {
    new string[128];
    new fraktname[64];
    new money=GetPlayerMoney(playerid);
    switch(GetPVarInt(playerid,"Fraktion"))
    {
    case 0:{fraktname="Keine";}
    case 1:{fraktname="SAPD";}
    case 2:{fraktname="Army";}
    }
    SendClientMessage(playerid, Blau,string);
    //1 Reihe
    format(string,sizeof(string),"[Name: %s] [Level: %i] [Adminlevel: %i] [Fraktion: %s] [Geld: %i]",SpielerName(playerid),GetPlayerScore(playerid),GetPVarInt(playerid,"Adminlevel"),fraktname,money);
    SendClientMessage(playerid, Blau, string);
    return 1;
    }


    Geld ist ja genauso wie Adminlevel & Level eine Zahl. Die musst du mit %i (Integer) wiedergeben

    Also ich hätte hier ein Beispiel mit ocmd:
    ocmd:afk(playerid,params)
    {
    if(GetPVarInt(playerid,"Afk")==1)
    {
    SendClientMessage(playerid,FARBE,"Du bist bereits Afk gemeldet. Benutze /back um alles wieder nutzen zu können.");
    }
    SetPVarInt(playerid,"Afk",1);
    SendClientMessage(playerid,FARBE,"Du hast dich soeben Afk gemeldet. Benutze /back um alles wieder nutzen zu können.");
    TogglePlayerControllable(playerid,1);
    return 1;
    }


    ocmd:back(playerid,params)
    {
    if(GetPVarInt(playerid,"Afk")==0)
    {
    SendClientMessage(playerid,FARBE,"Du bist nicht Afk gemeldet.");
    }
    SetPVarInt(playerid,"Afk",0);
    SendClientMessage(playerid,FARBE,"Du bist soeben aus dem Afk-Zustand zurückgekehrt.");
    TogglePlayerControllable(playerid,0);
    return 1;
    }


    Das wäre jetzt ein ziemlich einfaches Beispiel mit Dini & Ocmd.. umschreiben sollte nicht so schwer sein ^^


    Mit Freundlichen Grüßen,
    NoLimit

    Nimm dir am besten erstmal den Sccanf Code (Irgendwo ins Script(nicht unter einen Callback))

    Spoiler anzeigen
    stock sscanf(string[], format[], {Float,_}:...)
    {
    #if defined isnull
    if (isnull(string))
    #else
    if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
    #endif
    {
    return format[0];
    }
    #pragma tabsize 4
    new
    formatPos = 0,
    stringPos = 0,
    paramPos = 2,
    paramCount = numargs(),
    delim = ' ';
    while (string[stringPos] && string[stringPos] <= ' ')
    {
    stringPos++;
    }
    while (paramPos < paramCount && string[stringPos])
    {
    switch (format[formatPos++])
    {
    case '\0':
    {
    return 0;
    }
    case 'i', 'd':
    {
    new
    neg = 1,
    num = 0,
    ch = string[stringPos];
    if (ch == '-')
    {
    neg = -1;
    ch = string[++stringPos];
    }
    do
    {
    stringPos++;
    if ('0' <= ch <= '9')
    {
    num = (num * 10) + (ch - '0');
    }
    else
    {
    return -1;
    }
    }
    while ((ch = string[stringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num * neg);
    }
    case 'h', 'x':
    {
    new
    num = 0,
    ch = string[stringPos];
    do
    {
    stringPos++;
    switch (ch)
    {
    case 'x', 'X':
    {
    num = 0;
    continue;
    }
    case '0' .. '9':
    {
    num = (num << 4) | (ch - '0');
    }
    case 'a' .. 'f':
    {
    num = (num << 4) | (ch - ('a' - 10));
    }
    case 'A' .. 'F':
    {
    num = (num << 4) | (ch - ('A' - 10));
    }
    default:
    {
    return -1;
    }
    }
    }
    while ((ch = string[stringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num);
    }
    case 'c':
    {
    setarg(paramPos, 0, string[stringPos++]);
    }
    case 'f':
    {

    Spoiler anzeigen
    new changestr[16], changepos = 0, strpos = stringPos;
    while(changepos < 16 && string[strpos] && string[strpos] != delim)
    {
    changestr[changepos++] = string[strpos++];
    }
    changestr[changepos] = '\0';
    setarg(paramPos,0,_:floatstr(changestr));
    }
    case 'p':
    {
    delim = format[formatPos++];
    continue;
    }
    case '\'':
    {
    new
    end = formatPos - 1,
    ch;
    while ((ch = format[++end]) && ch != '\'') {}
    if (!ch)
    {
    return -1;
    }
    format[end] = '\0';
    if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
    {
    if (format[end + 1])
    {
    return -1;
    }
    return 0;
    }
    format[end] = '\'';
    stringPos = ch + (end - formatPos);
    formatPos = end + 1;
    }
    case 'u':
    {
    new
    end = stringPos - 1,
    id = 0,
    bool:num = true,
    ch;
    while ((ch = string[++end]) && ch != delim)
    {
    if (num)
    {
    if ('0' <= ch <= '9')
    {
    id = (id * 10) + (ch - '0');
    }
    else
    {
    num = false;
    }
    }
    }
    if (num && IsPlayerConnected(id))
    {
    setarg(paramPos, 0, id);
    }
    else
    {
    #if !defined foreach
    #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
    #define __SSCANF_FOREACH__
    #endif
    string[end] = '\0';
    num = false;
    new
    name[MAX_PLAYER_NAME];
    id = end - stringPos;
    foreach (Player, playerid)
    {
    GetPlayerName(playerid, name, sizeof (name));
    if (!strcmp(name, string[stringPos], true, id))
    {
    setarg(paramPos, 0, playerid);
    num = true;
    break;
    }
    }
    if (!num)
    {
    setarg(paramPos, 0, INVALID_PLAYER_ID);
    }
    string[end] = ch;
    #if defined __SSCANF_FOREACH__
    #undef foreach
    #undef __SSCANF_FOREACH__
    #endif
    }
    stringPos = end;
    }
    case 's', 'z':
    {
    new
    i = 0,
    ch;
    if (format[formatPos])
    {
    while ((ch = string[stringPos++]) && ch != delim)
    {
    setarg(paramPos, i++, ch);
    }
    if (!i)
    {
    return -1;
    }
    }
    else
    {
    while ((ch = string[stringPos++]))
    {
    setarg(paramPos, i++, ch);
    }
    }
    stringPos--;
    setarg(paramPos, i, '\0');
    }
    default:
    {
    continue;
    }
    }
    while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
    {
    stringPos++;
    }
    while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
    {
    stringPos++;
    }
    paramPos++;
    }
    do
    {
    if ((delim = format[formatPos++]) > ' ')
    {
    if (delim == '\'')
    {
    while ((delim = format[formatPos++]) && delim != '\'') {}
    }
    else if (delim != 'z')
    {
    return delim;
    }
    }
    }
    while (delim > ' ');
    return 0;
    }

    Enum:
    enum PlayerInfo
    {
    pVerheiratet
    }
    new PlayerInfo[MAX_PLAYERS][pInfo]


    Zum Command dann:
    ocmd:setverheiratet(playerid,params[])
    {
    new pID; // Eine Variable die den Spieler definiert
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,FARBE,"Benutzung: /setverheiratet [Spielername]"); // Fangen wir vorne an. "u" steht dafür, dass man dann entweder eine ID oder aber den Spielernamen eines Spielers verwenden kann um ihn dann verheiratet zu setten. Danach wird die Variable "pID" mit "u" definiert. Heißt: Mit pID kann man nun Dinge an anderen Spielern verändern.
    SpielerInfo[pID][pVerheiratet]==1;
    return 1;
    }


    Mit Freundlichen Grüßen,
    NoLimit