[Selfmade Befehl] Ein Selfmade Befehl von mir ;)

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 Breadfish,
    Ich habe mal einen SELFMADE /tarn befehl geschrieben für die Hitmans.
    Da ich diese Fraktion sehr mag.. und so ^^
    Was dieser Befehl kann..?
    Dieser Befehl erlaubt es den Hitmans sich so zu kleiden wie andere User..
    z.B. ein Cop ist Online.. Und der Hitman schreibt "/tarn [SpielerID]"
    Dan bekommt der Hitman genau den gleichen Skin und Namen Farbe wie der Cop..
    Auch wen er Schreibt. Wird sein Name Blau angezeigt.
    Sprich: Er sieht genau aus wie der Cop / (Irgend ein User)


    Ich würde mich sehr über ein Gutes Feedback freuen ^^


    Hier noch ein How to Einfügen:
    Als Erstes. geht ihr oben zu den "Includes".
    Und fügt folgendes ein..


    #include <ocmd>


    Also Ocmd. Ist halt sowas damit könnt ihr auch Befehle machen ^^ Also halt so wie if(strcmp....


    Also dan braucht ihr noch sscanf.
    Ihr könnt es entweder auch mit #include <sscanf> einfügen aber es geht auch wen ihr Den stock hier Ganz unten im Script einfügt:


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


    So und dan.. fügt ihr da runter oder darüber ist eig Egal Den Befehl ein..


    ocmd:tarn(playerid, params[])
    {
    new uid, uname[35];
    if(!isPlayerInFrak(playerid,6))return SendClientMessage(playerid,ROT,"> Du bist kein Mitglied der Hitmen!!!");
    else if(sscanf(params, "%s", uname))
    {
    SendClientMessage(playerid,ROT, "> Benutze: /tarn [Name/SpielerID]");
    } else {
    uid = GetUserID(uname);
    if(!IsPlayerConnected(uid))
    {
    SendClientMessage(playerid,ROT, "> Dieser Spieler ist nicht online.");
    } else {
    SetPlayerSkin(playerid, GetPlayerSkin(uid));
    Success(playerid);
    SetPlayerColor(playerid, GetPlayerColor(uid));
    SendClientMessage(playerid,GRÜN, "> Skin und Farbe gewechselt.");
    }
    }
    return 1;
    }


    Höchst wahrscheinlich bekommt ihr Errors weil ihr halt einige Sachen die ich habe anders in eurem Script habt..
    Bei Errors oder Problemen / Fragen einfach unten rein Posten helfe euch so schnell wie möglich ;)


    Freue mich über Netten / Guten Feedback...


    Mfg.

  • Sehr Nice nur ein Fehler bei SendClientMessage :d
    Du schreibst Hitmen --> Hitman :D


    Egal spaß bei Seite.
    Sehr NIce 9/10


    Mfg

  • Ist wenn dann ein Codeschnipsel, und gehört dem entsprechend auch in den Thread. Nützliche Codeschnipsel


    Noch dazu fehlen zb das Callback "Succes" und die Funktion "GetUserID", welche du anscheinend benutzt aber nicht mit gegeben hast ;)


    Ja also das mit den Codeschnipseln wusste ich net ^^ sry bin neu hier
    Und Succes ist garnicht soo wichtig aber hier wers halt haben will ^^


    Einmal das hier einfach unter den Includes einfügen ;)
    forward Success(i);


    Und dan einfach irgend wo im Script.. (Am besten ganz unten) Das hier einfügen


    public Success(i)
    {
    PlayerPlaySound(i, 1054, 0.0, 0.0, 0.0);
    return 1;
    }


    Dan noch GetUserID ^^


    Dies ist halt ein stock einfach auch zu den anderen stocks hinzufügen falls ihr welche habt wen nicht einfach ganz unten im Script einfügen
    stock GetUserID(str[])
    {
    new plname[MXPN];
    for(new i = 0; i < MXP; i++)
    {
    GetPlayerName(i, plname, MXPN);
    if(!strcmp(plname, str, true) && strlen(plname) > 0)
    return i;
    }
    new val = strval(str);
    if(val == 0 && strlen(str) > 1)
    return -1;
    else
    return val;
    }


    Mfg.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • @Shixx
    Ja hast recht ^^ Setze mich sofort dran ;)
    Und danke für die ganzen guten Bewertungen.


    Mfg.


    //Edit:
    So habs fertig gestellt ist zwar nicht ocmd aber Naja ^^


    Hier der Befehl:
    if(!strcmp(cmdtext,"/untarn",true))
    {
    if(!isPlayerInFrak(playerid,6))
    {
    emsg(playerid, "> Du bist kein Mitglied der Hitman.");
    } else {
    SetPlayerSkin(playerid, PI[playerid][skin]);
    imsg(playerid, "> Skin gewechselt.");
    Success(playerid);
    }
    return 1;
    }


    Bitte schön ^^
    Hoffe konnte euch helfen und freue mich immer wieder über ein Feedback.


    Mfg.