ocmd oder dcmd

  • ich glaub das werd ich auch jetz nehmen,
    finde es auch besser.
    und wie ist das mit sscanf, weil ich das auch im selfmade drinne hab.
    kann man das schon reinmachen, weil dcmd und ocmd gleichzeitig is
    ja etwas doof

  • 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;
    }
    Den Code fügste ganz unten im Script ein dann brauchste auch kein sscnaf inc mehr


    Und nicht das definen von dcmd vergessen ganz oben das hier..


    //*DCMD Define
    #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1


    EDIT : DCMD

    Mit freundlichen Grüßen

    Hozzn


    Aktuell:


    -> Verkaufe Woltlab Suite 5.0.25 <- Klick



    "die besten Momente fangen mit den Worten "..halt mal kurz mein Bier" an"

  • ocmd ist eigenlicht gut musst nichts bei Onplayercommand eintragen ^^

  • if (strcmp("/gotols", cmdtext, true, 10) == 0)
    {
    if(!isPlayerAnAdmin(playerid,2))return SendClientMessage(playerid,Rot,"Du bist kein Admin oder dein Level ist zu niedrig!.");
    SetPlayerPos(playerid, 1536.0193,-1672.1040,13.3828);
    SendClientMessage(playerid, Gelb, "Du hast dich erfolgreich teleportiert!");
    ShowPlayerDialog(playerid, DIALOG_ABUSE, DIALOG_STYLE_MSGBOX,"ABUSE","Bitte das Porten nicht ausnutzen","OK","CLOSE");
    return 1;
    }
    was ist das eigl dass ist ganz normal unter den publics einfach oder ?
    also nicht ocmd oder so zeugs eben

  • Das ist unter OnPlayerCommand
    bei ocmd
    musst du irgendwo wo du laune hast das mache comd:befehl....

  • Einen DCMD baut man wie folgt auf..



    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(help,4,cmdtext); //Hier definierst du den CMD, die 4 steht für die Buchstabenlänge in diesem Fall 4 weil help 4 buchstaben hat.
    SendClientMessage(playerid,COLOR_LIGHTRED,"Diesen Befehl gibt es nicht !"); //Wenn es den Befehl noch nicht gibt, wird diese Message verschickt.
    return 1;
    }


    // Jetzt schreibst du einfach immer unter diese Zeile ^(siehe oben) deinen Befehl.. z.b der help Befehl.


    dcmd_help(playerid,params[])
    [pwn]
    #pragma unused params //Definiert params zu jeden Befehl den playerid also du benutzt immer das hin schreiben.
    {
    SendClientMessage(playerid,COLOR_YELLOW2,"** ALLGEMEIN ** : /help , /report , /admins , /buy");
    SendClientMessage(playerid,COLOR_YELLOW2,"** ALLGEMEIN ** : /help , /report , /admins , /buy");
    SendClientMessage(playerid,COLOR_YELLOW2,"** CHAT ** : /help , /report , /admins , /buy");
    return 1;
    }



    Das heißt diesen Mist hier brauchst du nicht mehr ...


    if (strcmp("/gotols", cmdtext, true, 10) == 0)

    Mit freundlichen Grüßen

    Hozzn


    Aktuell:


    -> Verkaufe Woltlab Suite 5.0.25 <- Klick



    "die besten Momente fangen mit den Worten "..halt mal kurz mein Bier" an"

  • und bei OCMD wäre es nur



    ocmd:help(playerid,params[])
    {
    SendClientMessage(playerid,COLOR_YELLOW2,"** ALLGEMEIN ** : /help , /report , /admins , /buy");
    SendClientMessage(playerid,COLOR_YELLOW2,"** ALLGEMEIN ** : /help , /report , /admins , /buy");
    SendClientMessage(playerid,COLOR_YELLOW2,"** CHAT ** : /help , /report , /admins , /buy");
    return 1;
    }

  • Nein Muss man nicht wie es bei mir steht musst du das machen^^

  • Ja sind leicht wenn du mit sscanf arbeitest ist das dann so



    ocmd:givemoney(playerid,params[])
    {
    new pID,geld;
    if(sscanf(params,"ud",pID,geld)) return SendClientMessage(playerid, COLOR_Error, "Benutze: /givemoney [ID] [(-)Betrag]");
    if(Spieler[playerid][pAdmin] <= 3) return SendClientMessage(playerid, COLOR_Error, "Kein Admin!");
    GivePlayerMoney(pID,geld);
    return 1;
    }

  • Ich Arbeite mit sscanf und ocmd das ist meiner Meinung nach sehr leicht,
    und schnell zu Lernen.

  • if (strcmp("/gotols", cmdtext, true, 10) == 0)
    {
    if(!isPlayerAnAdmin(playerid,2))return SendClientMessage(playerid,Rot,"Du bist kein Admin oder dein Level ist zu niedrig!.");
    SetPlayerPos(playerid, 1536.0193,-1672.1040,13.3828);
    SendClientMessage(playerid, Gelb, "Du hast dich erfolgreich teleportiert!");
    ShowPlayerDialog(playerid, DIALOG_ABUSE, DIALOG_STYLE_MSGBOX,"ABUSE","Bitte das Porten nicht ausnutzen","OK","CLOSE");
    return 1;
    }


    ich will wissen ob ich diese befehle als dcmd machen muss oder so lassen kann..
    und was sind params eigl ?