Beiträge von bl4der

    Mach das am besten mit dcmd und scanff.




    dcmd und scanff ist eine art um commandos mit parametern zu erstellen. (also wie zb. /giveplayermoney [ID][betrag], oder auch /jail[ID])




    weiteres über dcmd und scanff hier:


    [ SCRIPTING ] Commands mit Parametern


    das ist ein echt klasse tutorial von Goldkiller dazu.






    so für das script musst du dcmd definiert haben.




    dazu fügst du folgendes unter deine defines ein




    #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




    dann mach das noch am besten ganz unten ins script




    /*----------------------------------------------------------------------------*-
    Function:
    sscanf
    Params:
    string[] - String to extract parameters from.
    format[] - Parameter types to get.
    {Float,_}:... - Data return variables.
    Return:
    0 - Successful, not 0 - fail.
    Notes:
    A fail is either insufficient variables to store the data or insufficient
    data for the format string - excess data is disgarded.
    A string in the middle of the input data is extracted as a single word, a
    string at the end of the data collects all remaining text.
    The format codes are:
    c - A character.
    d, i - An integer.
    h, x - A hex number (e.g. a colour).
    f - A float.
    s - A string.
    z - An optional string.
    pX - An additional delimiter where X is another character.
    '' - Encloses a litteral string to locate.
    u - User, takes a name, part of a name or an id and returns the id if they're connected.
    Now has IsNumeric integrated into the code.
    Added additional delimiters in the form of all whitespace and an
    optioanlly specified one in the format string.
    -*----------------------------------------------------------------------------*/
    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;
    }
    stock strget(strx[], pos, search = ' ') {
    new arg, ret[128], idxx;
    for (new i = 0; i < strlen(strx); i++) {
    if(strx[i] == search || i == strlen(strx) || strx[i + 1] == 10) {
    arg++;
    if (arg == pos + 1){
    ret[i-idxx] = EOS;
    return ret;
    } else if (arg == pos)
    idxx= i+1;
    }
    else if (arg == pos)
    ret[i - idxx] = strx[i];
    }
    return ret;
    }




    so dcmd ist definiert




    jetzt gehts an das command.




    bei onplayercommandtext schreibst du am besten auch unten rein:


    dcmd(givemoney,9,cmdtext);




    dann kommt das command an sich ausserhalb der publics




    dcmd_givemoney(playerid,params[])
    {
    new
    betrag, // hier erstellen wir die parameter. in deinem fall den betrag des geldes das gegeben wird und pID ist der spieler der das ganze erhalten soll
    pID;


    if(sscanf(params, "di",pID,betrag))
    {
    return SendClientMessage(playerid,COLOR_RED,"Nutze: /givemoney [ID] [betrag]"); // hier wird abgefragt ob beide parameter angegeben werden. wenn nein returnt das ganze mit der nachricht
    }
    if(!IsPlayerConnected(pID))
    {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online"); // hier wird abgefragt ob der Spieler mit der angegebenen Id online ist
    }


    if(GetPlayerMoney(playerid)>=betrag) // dast ist zwar nicht unbedingt notwendig, sollte aber drin sein. da wird überprüft ob der spieler genügend geld hat. deswegen wird abgefragt ob das geld das er gerade hat (getplayermoney) größer oder gleich (>=) wie der angegebene betrag ist.
    {
    new name[MAX_PLAYER_NAME],nachricht[64];
    GetPlayerName(playerid,name,sizeof(name)); // das ist einfach für die Nachricht damit der Spieler der das geld bekommt informiert wird wie viel und von wem er geld bekommen hat.
    format(nachricht,sizeof(nachricht),"%s gab dir %i €",name,betrag);



    SendClientMessage(pID,weiß,nachricht); //das ist der wesentliche teil: die geldübergabe. hier wird die nachricht gesendet
    GivePlayerMoney(pID,betrag); // hier wird pID, also dem spieler der angegeben wurde das geld in höhe von betrag gegeben
    GivePlayerMoney(playerid,-betrag); // und hier wird dem spieler der das commando ausführt der betrag abgezogen (-betrag)
    }


    return 1;
    }




    so das wars auch schon.




    ich hoffe ich konnte dir weiterhelfen (gab bei mir keine errors und funktionierte auch)




    mfg




    shorty123

    @ hardcore



    die ip ist deshalb gleich gewesen, weil sich skyspirit eingeloggt hatte, und danach mit meinem weil er wie gesagt noch nicht genügend beiträge hatte..das ganze bei sich zuhause..ausserdem wurde sein account wegen spammen gebannt.




    das war nicht mein account man der kann das bestätigen.




    und dass lässt sich sicher auch beweisen in dem man mal schaut unter welcher ip der shorty123 immer eingeloggt war und unter welcher der skyspirit



    edit: empfänger info angefügt

    nein wird es leider nicht, den in meinem fall wurde auch beim ersten mal gebannt



    ich meine ich hab echt nicht gedacht das das verfolgt wird mit dem account benutzen weil es ja irgendwo auch die sache des users ist wer seine daten bekommt. nun weis ich es und werde es auch sicher nicht mehr machen. um diesen account nun nicht mehr zu brauchen (und einen unnötigen doppelaccount zu vermeiden ;) ) würde ich einfach noch ein letztes mal bitten das ich wieder freigeschaltet werde.

    ihr wollt mir doch nicht im ernst erzählen dass sich jeder die regeln 100%ig durchgelesen hat seit doch mal ehrlich



    ist das ein grund mich aus dem forum zu bannen weil ich einmal jemanden sich einloggen ließ?





    ich kann nur noch einmal sagen: bitte gebt mich frei

    Was ist denn daran überhaupt schlimm?






    Es war kein Doppelaccount weil der garnicht mir gehört hat also ist der tatbestand im grunde schon einmal aufgehoben.


    Und ich wüsste nicht das es verboten ist wenn sich jemand EINMAL bei einem account eingeloggt hat mit erlaubniss oder?



    EDIT: was denn für ne billige ausrede es ist einfach so. was hätte ich denn für einen grund gehabt einen doppelaccount anzulegen wie gesagt der hat sich ein mal eingeloggt..




    toll einen neuen acc damit ich dann wieder als anfänger da stehe...super

    nicht gegeben sondern die accountdaten gegeben damit er kurz reingehen kann. das bedeutet nicht das ich ihm meinem account vermacht habe.



    aber sein account hatte noch keine beiträge und sonst hätte er spammen müssen.

    dann ist das ein missverständnis



    [SR]Skyspirit ist ein freund von mir mit dem ich meinen samp server betreibe.



    er hat gespammt so viel weis ich aber das ist und war nicht mein account. weil sein account gesperrt wurde habe ich ihm meine accountdaten gegeben um für den server werbung zu machen ist aber kein doppelaccount gewesen.



    mfg

    hi..



    heute mittag konnte ich noch mit meinem samp account ("shorty123") online und hab noch leuten versucht zu helfen in der scripting base



    ich hatte nie schwierigkeiten mit admins oder moderatoren, ich habe niemanden beleidigt und ich hab auch nicht gespammt.



    ich hatte ein einziges mal eine verwarnung weil ich mal einen edit nicht begründet hatte sonst gab es NIE probleme..



    und vorher wollte ich mich in meinen samp acc einloggen und auf einmal sehe ich das ich nicht die nötigen rechte hätte oder so.



    ein blick auf mein profil verriet mir dann das mein account gesperrt ist.



    ich wurde nichtmal über einen grund, oder per e-mail darüber benachrichtigt.




    ich hatte so um die 120 beiträge also war ich auch nicht einer derjenigen die sich anmelden um zu spammen und auch ein weiterer blick auf das alte profil zeigte dass seit dem letzten mir bekannten post auch kein weiterer mehr getätigt wurde



    also würde ich euch (samp.breadfish team) darum bitten wenn das noch geht meinen account wieder freizugeben, denn ich habe wie gesagt nichts getan..



    mfg bl4der (aka shorty123)