Beiträge von Scott_Mitchell

    Fehler von mir, dass unten im Script einfügen:
    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;
    }

    Hast da, denke ich ein wenig was vertauscht.
    Schließlich soll die pID die Nachricht erhalten und der Name ausgegeben werden, welcher den Schein erhalten hat.
    Würde das also folgendermaßen machen:
    if(strcmp(cmd, "/givesfpass", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] < 4) return SendClientMessage(playerid, 0xFFFFFFFF, "Du hast nicht die Rechte!");
    new pID,sendername[MAX_PLAYER_NAME],giveplayer[MAX_PLAYER_NAME];
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,-1," /givesfpass [playerid / Name]");
    if(IsPlayerConnected(pID))
    {
    GetPlayerName(playerid, sendername, sizeof(sendername));
    GetPlayerName(pID, giveplayer, sizeof(giveplayer));
    format(string, sizeof(string), "Sie haben %s den Führerschein gegeben.",giveplayer); //hier giveplayer anstatt pID
    SendClientMessage(playerid, -1, string);
    format(string, sizeof(string), "Admin %s hat ihnen den Führerschein gegeben.",sendername);
    SendClientMessage(pID, -1, string); //hier pID anstatt giveplayer
    PlayerInfo[pID][pSFPass] = 1;
    return 1;
    }
    return 1;
    }

    Ich empfehle dir kein Aldi-Tarif.
    Du wirst dort nur ins Fluchen kommen und 500MB ist auch nicht gerade viel.


    Damit guckst du ein paar Videos und spielst ein wenig GTA oder sonst was und schon ist der Traffic überschritten und Videos können gar nicht mehr geschaut werden und das Spielen macht auch keinen Spaß mehr. (Das macht es auch so nicht...)

    Was ist, wenn man folgende Situation hätte?
    - Der Mietpreis kostet zuerst 150 €, dann werden noch 20 % hinzugefügt. Wie viel kostet es nun?
    - Der Mietpreis kostet zuerst 150 €, dann wird 20 % "billiger".

    Bei beiden Aufgaben gibt es eine Gemeinsamkeit und die besteht darin, dass der Mietpreis von 150€ gleich der Grundpreis und der Prozentsatz somit 100% ist.
    Würde beim Kreuzen wie folgt aussehen:
    100%
    150€


    Bei der ersten Aufgabe werden zwanzig Prozent zu dem Grundpreis (100%) hinzugefügt.
    Und da der Preis gesucht ist, wird der Prozentsatz zum Verhältnis des gesuchten Preises genommen:
    120%
    x


    Sieht also, wie folgt aus:
    100% = 120%
    150€ = x



    In der anderen Aufgaben stellen, werden von den 100% einfach die 20% abgezogen, was dann, wie folgt aussieht:
    100% = 80%
    150€ = x

    Alles ...

    Fangen wir mal mit Aufgabe 1 an.
    Ich hoffe, dass ich es verständlich genug für dich erkläre.


    Aufgabe 1
    Der Mietpreis wurde um 20% erhöht, Nun kostet es 150€. Wie viel Euro hat es zuvor gekostet?


    Erstmal markieren wir uns wichtige Dinge, die gegeben sind:
    - zum einen die 20% Erhöhung
    - zum anderen die 150€


    Rechnung:
    Da es sich hier um eine Erhöhung von Kosten handelt, existiert durch die 20% Aufschlag keine 100% mehr, welche den Grundpreis wiedergeben, sondern es muss zu diesen die 20% hinzugefügt werden, wobei wir folgenden Prozentsatz hätten: 120%
    120% stehen somit im Verhältnis zu 150€.
    Da wir wissen wollen, wie viel Miete vorher gezahlt wurde, wird der Grundpreis gesucht.
    Wie wir wissen ist der Prozentsatzes des Grundpreises 100%.
    Jetzt haben wir drei Werte, welche uns dabei helfen den gesuchten Mietpreis zu ermitteln.
    Nennen wir diesen ganz einfach x.
    Mit dem Kreuzungsschema lässt sich dies am einfachsten bewerkstelligen:
    120% = 100%
    150€ = x


    Durch das Kreuzen ergibt sich folgende Gleichung:
    x= 150€*100%
    120%
    x= 125€


    Versuche dies nun mit der Aufgabe 2. :>


    %d steht nicht für double sondern für dezimal.


    und bei deinem Beispiel ist die Variable string überflüssig...da kann man direkt name verwenden ;)


    mfg. :thumbup:

    Tut mir leid, bin noch zu sehr an Java gewöhnt, aber im Prinzip gibt beides das selbe aus.
    Eine Dezimalzahl. :)

    Erstmal ist der Name nicht vom Datentyp double, sondern String, weshalb du auch mit diesem arbeiten musst.
    Dann musst du dies wie folgt abändern:
    new name[MAX_PLAYER_NAME],string[26];
    GetPlayerName(playerid,name,sizeof(name));
    format(string,sizeof(string),"%s",name);
    ShowPlayerDialog(playerid,DIALOG_TESTER,DIALOG_STYLE_MSGBOX,"{FAFAFA}Statistik",string,"Okay","Abbruch");
    Was habe ich nun gemacht?
    Der String, von dem eben die Rede war, wurde formatiert, sodass mit diesem im ShowPlayerDialog gearbeitet werden kann.
    Außerdem habe ich den definieren Namen zurückgeben lassen, mit der Funktion GetPlayerName, welcher dann im formatieren String abgerufen wird.
    Nebenbei habe ich den DIALOG_STYLE geändert, da eine Messagebox das ganze besser aussehen lässt und zudem mehr Sinn macht, als eine Listenbox.