Immer ID 0 ? :S

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
  • Tag,


    Ich hab ein problem mit meinem Selfmade es wird bei wirklich jedem CMD (wo man eine ID angibt) immer ID 0 ausgesucht (anfangs hatte ich das Problem nicht)
    Beispiel CMD´s
    ocmd:kick(playerid,params[])
    {
    new pID,grund[128],string[128];
    if(!isPlayerAnAdmin(playerid,1))
    if(sscanf(params,"ui",pID,grund))return SendClientMessage(playerid,WEIß,"Nutze: /kick [ID] [Grund]");
    format(string,sizeof(string),"AdmCmd: %s wurde von %s gekickt. Grund: %s",SpielerName(pID),SpielerName(playerid),grund);
    SendClientMessageToAll(ROT,string);
    Kick(playerid);
    return 1;
    }
    ocmd:ban(playerid,params[])
    {
    new pID,grund[128],string[128];
    if(!isPlayerAnAdmin(playerid,1))
    if(sscanf(params,"ui",pID,grund))return SendClientMessage(playerid,WEIß,"Nutze: /ban [ID] [Grund]");
    format(string,sizeof(string),"AdmCmd: %s wurde von %s gebannt. Grund: %s",SpielerName(pID),SpielerName(playerid),grund);
    SendClientMessageToAll(ROT,string);
    SpielerInfo[pID][pGebannt] = 1;
    return 1;
    }


    MFG

  • Ich hab nicht wirklich ahnung von sscanf aber habe das im script
    stock sscanf(string[],format[],{Float,_}:...){
    new formatPos=0,stringPos=0,paramPos=2,paramCount=numargs();
    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(ch>='0'&&ch<='9'){num=(num*10)+(ch-'0');}else{return 1;}
    }while((ch=string[stringPos])&&ch!=' ');setarg(paramPos,0,num*neg);}
    case 'h','x':{
    new ch,num=0;while((ch=string[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));}
    case ' ':{break;}default:{return 1;}}
    }setarg(paramPos,0,num);}
    case 'c':{setarg(paramPos,0,string[stringPos++]);}
    case 'f':{
    new tmp[25];
    strmid(tmp,string,stringPos,stringPos+sizeof(tmp)-2);
    setarg(paramPos,0,_:floatstr(tmp));}
    case 's','z':{
    new i=0,ch;
    if(format[formatPos]){
    while ((ch=string[stringPos++])&&ch!=' '){
    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]!=' '){stringPos++;}
    while(string[stringPos]==' '){stringPos++;}
    paramPos++;}
    while(format[formatPos]=='z')formatPos++;
    return format[formatPos];
    }

  • am besten aus "u" ein "d" machen dann ist alles gut
    nur das man da nur die playerid eintragen kann zb. 0, 4 usw.
    Aber mann kan nicht so was machen zb. /ban mskamilor bla bla sodern mann kann da nur die playerid id eintragen /ban 1 bla bla
    Ich hoffe das hilf dir weiter ;d

  • Vielleicht solltest du wirklich mal dein sscanf updaten.
    Heißt Sscanf2 und ist eine Include.
    Findest du hier mit der SuFU

    Main: CPU: Intel Core i5-4440 @ 3,10 GHz | CPU-Cooling: Matterhorn -PURE- | RAM: 16GB Crucial Ballistix Sport DDR3-1600 DIMM CL9-9-9-24 |
    Motherboard: ASRock B85M Pro4 | GPU: Sapphire Radeon R9 390X Nitro 8GB GDDR5 |

    SSD: Samsung SSD 840 Evo 500GB | Power Supply: 550 Watt Corsair CS Series Modular 80+ Gold | Case: beQuiet! Silent Base 800


    As I walk through the valley of the shadow of death
    I take a look at my life and realize there's nothin' left.

  • Nimm den ;)


    ocmd:ban(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,2))return SendClientMessage(playerid,ROT,"Du bist kein Admin.");
    new pID, reason[128],string[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,BLAU,"/ban [id] [grund]");
    format(string,sizeof(string),"Admin-CMD: {58FA07}>> %s << {FAFA07}Was banned by >> %s << {FA0707}REASON: %s",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessageToAll(ROT,string);
    SetPVarInt(pID,"Baned",1);
    Kick(pID);
    return 1;
    }
    ocmd:kick(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,2))return SendClientMessage(playerid,ROT,"Du bist kein Admin.");
    new pID, reason[128],string[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,BLAU,"/kick [id] [grund]");
    format(string,sizeof(string),"Admin-CMD: {58FA07}>> %s << {FAFA07}Was kicked by >> %s << {FA0707}REASON: %s",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessageToAll(ROT,string);
    Kick(pID);
    return 1;
    }

  • Dann muss ich fast alle meine CMD´s updaten kann mir nicht jemand einfach die neue sscanf schicken?


    //edit2
    gibts eigentlich ein Deutsches gut erklärtes TuT zu sscanf?


    //edit
    Hab nun die sscanf die hatte ich vorher auch drinne
    stock sscanf(sstring[], format[], {Float,_}:...)
    {
    #if defined isnull
    if (isnull(sstring))
    #else
    if (sstring[0] == 0 || (sstring[0] == 1 && sstring[1] == 0))
    #endif
    {
    return format[0];
    }
    #pragma tabsize 4
    new
    formatPos = 0,
    sstringPos = 0,
    paramPos = 2,
    paramCount = numargs(),
    delim = ' ';
    while (sstring[sstringPos] && sstring[sstringPos] <= ' ')
    {
    sstringPos++;
    }
    while (paramPos < paramCount && sstring[sstringPos])
    {
    switch (format[formatPos++])
    {
    case '\0':
    {
    return 0;
    }
    case 'i', 'd':
    {
    new
    neg = 1,
    num = 0,
    ch = sstring[sstringPos];
    if (ch == '-')
    {
    neg = -1;
    ch = sstring[++sstringPos];
    }
    do
    {
    sstringPos++;
    if ('0' <= ch <= '9')
    {
    num = (num * 10) + (ch - '0');
    }
    else
    {
    return -1;
    }
    }
    while ((ch = sstring[sstringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num * neg);
    }
    case 'h', 'x':
    {
    new
    num = 0,
    ch = sstring[sstringPos];
    do
    {
    sstringPos++;
    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 = sstring[sstringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num);
    }
    case 'c':
    {
    setarg(paramPos, 0, sstring[sstringPos++]);
    }
    case 'f':
    {


    new changestr[16], changepos = 0, strpos = sstringPos;
    while(changepos < 16 && sstring[strpos] && sstring[strpos] != delim)
    {
    changestr[changepos++] = sstring[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(sstring, format[formatPos], false, sstringPos)) == -1)
    {
    if (format[end + 1])
    {
    return -1;
    }
    return 0;
    }
    format[end] = '\'';
    sstringPos = ch + (end - formatPos);
    formatPos = end + 1;
    }
    case 'u':
    {
    new
    end = sstringPos - 1,
    id = 0,
    bool:num = true,
    ch;
    while ((ch = sstring[++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
    sstring[end] = '\0';
    num = false;
    new
    name[MAX_PLAYER_NAME];
    id = end - sstringPos;
    foreach (Player, playerid)
    {
    GetPlayerName(playerid, name, sizeof (name));
    if (!strcmp(name, sstring[sstringPos], true, id))
    {
    setarg(paramPos, 0, playerid);
    num = true;
    break;
    }
    }
    if (!num)
    {
    setarg(paramPos, 0, INVALID_PLAYER_ID);
    }
    sstring[end] = ch;
    #if defined __SSCANF_FOREACH__
    #undef foreach
    #undef __SSCANF_FOREACH__
    #endif
    }
    sstringPos = end;
    }
    case 's', 'z':
    {
    new
    i = 0,
    ch;
    if (format[formatPos])
    {
    while ((ch = sstring[sstringPos++]) && ch != delim)
    {
    setarg(paramPos, i++, ch);
    }
    if (!i)
    {
    return -1;
    }
    }
    else
    {
    while ((ch = sstring[sstringPos++]))
    {
    setarg(paramPos, i++, ch);
    }
    }
    sstringPos--;
    setarg(paramPos, i, '\0');
    }
    default:
    {
    continue;
    }
    }
    while (sstring[sstringPos] && sstring[sstringPos] != delim && sstring[sstringPos] > ' ')
    {
    sstringPos++;
    }
    while (sstring[sstringPos] && (sstring[sstringPos] == delim || sstring[sstringPos] <= ' '))
    {
    sstringPos++;
    }
    paramPos++;
    }
    do
    {
    if ((delim = format[formatPos++]) > ' ')
    {
    if (delim == '\'')
    {
    while ((delim = format[formatPos++]) && delim != '\'') {}
    }
    else if (delim != 'z')
    {
    return delim;
    }
    }
    }
    while (delim > ' ');
    return 0;
    }