/o Chat 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
  • Hey, ich habe ein Problem mit meinem Admin Chat,



    Hier mal der Code:


    if(strcmp(cmd, "/o", true) == 0)
    {
    if(IsPlayerAdmin(playerid))
    {
    new name[32];
    new eingabe[128];
    new message[128];
    GetPlayerName(playerid, name, sizeof(name));
    eingabe = bigstrtok(cmdtext, idx);
    format(message,sizeof(message), "Admin %s : %s",name, eingabe);
    SendClientMessageToAll(0x00C2ECFF, message);


    return 1;
    }


    return 0;
    }


    Jedoch bekomme ich diesen Error:



    C:\Users\Willi B\Desktop\Server\gamemodes\DM.pwn(931) : error 017: undefined symbol "bigstrtok"
    C:\Users\Willi B\Desktop\Server\gamemodes\DM.pwn(931) : error 033: array must be indexed (variable "eingabe")


    Bitte hilft mir :)


    Der Klärbar weiß auch nicht weiter :(

  • if(strcmp(cmd, "/o", true) == 0)
    {
    if(IsPlayerAdmin(playerid))
    {
    new name[MAX_PLAYER_NAME];
    new eingabe[128];
    new message[160];
    GetPlayerName(playerid, name, sizeof(name));
    eingabe = bigstrtok(cmd, idx);
    format(message,sizeof(message), "Admin %s : %s",name, eingabe);
    SendClientMessageToAll(0x00C2ECFF, message);


    return 1;
    }


    return 0;
    }


    bigstrtok ist nirgends definiert, gibt er dir unter anderem an.

  • oder versuchs mal so


    oder so


    if(strcmp(cmdtext, "/o", true) == 0)
    {
    if(IsPlayerAdmin(playerid))
    {
    new action[128];
    if(sscanf(params,"s",action))return SendClientMessage(playerid,cRed,"/a [text]");
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof name);
    format(action,sizeof action,"%s: %s",name,action);
    admin(action);
    return 1;
    }
    return 1;
    }


    oder so ohne i-wie admin etc musst du dann anpassen


    if(strcmp(cmdtext, "/o", true) == 0)
    {
    new action[128];
    if(sscanf(params,"s",action))return SendClientMessage(playerid,cRed,"/a [text]");
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof name);
    format(action,sizeof action,"%s: %s",name,action);
    admin(action);
    return 1;
    }

  • füg das mal ganz unten ein
    das ist sccanf


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


  • dann nimm OCMD da OCMD eh schneller ist


    Oben am Script
    #include <ocmd>


    Irgendwo im Script
    ocmd_o(playerid,params[])
    {
    new action[128];
    if(sscanf(params,"s",action))return SendClientMessage(playerid,cRed,"/a [text]");
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof name);
    format(action,sizeof action,"%s: %s",name,action);
    admin(action);
    return 1;
    }


    und hier das OCMD include: Klicken