Adminsystem problem

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo,
    Ich wollte mir ein eigenes Adminsystem scripten doch ich hab ein Problem.


    #define FILTERSCRIPT
    #define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
    #define green 0x33AA33AA
    #define red 0xFF0000AA
    #define yellow 0xFFFF00AA
    #define blue 0x3A47DEFF
    #include <a_samp>
    #include <dini>
    #if defined FILTERSCRIPT
    new hadmin[MAX_PLAYERS];


    enum Info
    {
    admin,
    };




    #else


    main()
    {


    }


    #endif


    public OnPlayerSpawn(playerid)
    {
    new save[128];
    hadmin[playerid] = (dini_Int(save,"admin"));


    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    new save[128];
    dini_IntSet(save,"admin",hadmin[playerid]);
    return 1;
    }




    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(kick,4,cmdtext);
    dcmd(makeadmin,9,cmdtext);
    dcmd(ban,3,cmdtext);
    return 0;
    }


    dcmd_kick(playerid,params[])
    {
    if(hadmin[playerid] < 2 )return SendClientMessage(playerid,red,"Du bist kein Admin oder du hast nicht die nötigen Rechte.");
    new
    kGrund[128],
    PlayerID;
    if(sscanf(params, "ds",PlayerID,kGrund)) {
    return SendClientMessage(playerid,red,"/kick [playerid] [grund]");
    }
    if(!IsPlayerConnected(PlayerID)) {
    return SendClientMessage(playerid,red,"Die angegebene ID ist nicht vorhanden.");
    }
    new
    ThePlayer[MAX_PLAYER_NAME],
    string[128];
    GetPlayerName(PlayerID,ThePlayer,sizeof(ThePlayer));
    format(string,sizeof(string),"%s (ID %d) wurde vom Server gekickt,Grund: %s",ThePlayer,PlayerID,kGrund);
    SendClientMessageToAll(red,string);
    Kick(PlayerID);
    return 1;
    }




    dcmd_makeadmin(playerid,params[])
    {
    if(hadmin[playerid] < 4)return SendClientMessage(playerid,red,"Du bist kein Admin oder du hast nicht die nötigen Rechte.");
    new id,level;
    new string[256];
    new string2[256];
    new save[128];
    if(sscanf(params,"ud",id,level))
    {
    SendClientMessage(playerid,red,"/makeadmin [playerid] [level]");
    return 1;
    }
    new ThePlayer[MAX_PLAYER_NAME];
    GetPlayerName(id,ThePlayer,sizeof(ThePlayer));
    format(string,sizeof(string),"Du wurdest zum Admin level %d gemacht",level);
    format(string2,sizeof(string2),"Du hast %s zum Admin gemacht.",ThePlayer);
    hadmin[id] = level;
    dini_IntSet(save,"admin",hadmin[playerid]);
    SendClientMessage(id,red,string);
    SendClientMessage(playerid,red,string2);


    return 1;
    }


    dcmd_ban(playerid,params[])
    {
    if(hadmin[playerid] < 2)return SendClientMessage(playerid,red,"Du bist kein Admin oder du hast nicht die nötigen Rechte.");
    new
    kGrund[128],
    PlayerID;
    if(sscanf(params, "ds",PlayerID,kGrund)) {
    return SendClientMessage(playerid,red,"/ban [playerid] [grund]");
    }
    if(!IsPlayerConnected(PlayerID)) {
    return SendClientMessage(playerid,red,"Die angegebene ID ist nicht vorhanden.");
    }
    new
    ThePlayer[MAX_PLAYER_NAME],
    string[128];
    GetPlayerName(PlayerID,ThePlayer,sizeof(ThePlayer));
    format(string,sizeof(string),"%s (ID %d) wurde vom Server gebannt,Grund: %s",ThePlayer,PlayerID,kGrund);
    SendClientMessageToAll(red,string);
    Ban(PlayerID);
    return 1;
    }





    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':
    {


    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;
    }







    Problem:
    In meiner ini Datei steht admin=10 trotzdem kommt immer die Meldung: "Du bist kein Admin oder hast nicht die nötigen Rechte."


    Was ist der Fehler in meinem Script?


    mfg

  • new save[128];
    hadmin[playerid] = (dini_Int(save,"admin"));wird nicht gehen, der string ist leer...

  • du brauchst zuerst:
    new name[MAX_PLAYER_NAME];
    new save[40];
    GetPlayerName(playerid,name,sizeof(name));
    format(save,sizeof(save),"%s.ini",name);

    Die deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.


    _____________________________________________________________________________


    Einige Filterscripts von mir...

  • ja so könnte man doch laden, nur ist da kein dateiname...
    //Ops sind halt langsam ;(