Beiträge von Slash™

    bei der sscanf meldung unten das ins script


    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;
    }
    bei den anderen heißt das das es undefiniert is, also oben definieren, weiß aber leider nicht wie, da ich das script nicht kenne
    oder im m_bot sehen ob da ob du die defines siehst und die in den GM kopieren

    int ist integer, da wird eine zahl gespeichert
    bei float wird ein wert mit einem punbkt also 100.0 wie bei dem heal,


    aber mach doch einfach ein textdokument und mach am ende statt .txt .sql drauß. öffne es mit notpad++
    und bau die tabelle so auf


    DROP TABLE IF EXISTS `accounts`;
    CREATE TABLE `accounts` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `Name` varchar(24) NOT NULL, //für int
    `Heal` float(24) NOT NULL, //für floats
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=220 DEFAULT CHARSET=latin1;

    Guten Morgen ihr lieben,


    Ich möchte einen GTA -San Andreas "SA:MP" Reallife Server eröffnen.Nur da ich bis Dato zu dumm war zum Scripten und ich Nemesus,MrMonatTutorials Runtergeladen und gebrannt habe damit ich sie mir immer wieder anschauen kann.Das hat mir allerdings auch nicht weitergeholfen.Die Grundlagen habe ich bisschen Drauf mein lehrer müsste mir nur erklären wie ich frakkautos z.b nicht im script bunkere sondern in einer Datei,Wie man Fraktionen Erstellt(Ordentlich),Wie man Gang fight Gebiete erstellt,Gang Gebiete,usw.Da ich aber kein geld habe würde ich mich sehr freuen wenn einer sich erbahmen würde und mit mir ein RL Script aufsetzten Würde oder mir einfach sagen was ich dahinschreiben soll und dann erklären was es mir bringt.


    ansehen ist schlecht, les dir mal paar tuts hier im fprum durch, und probiere selber aus. und wenn du die grundlagen hast sehe dir die funktionen auf samp wiki an.
    da lernt man einiges mehr durchs ansehen

    wenn du mit mysql arbeitest müsste das in etwa so aussehen, ungetestet


    forward armygII();


    ocmd:rangeban(playerid,params[])
    {
    if(IstSpielerAdmin(playerid, 5))//anpassen
    {
    new pID, reason[128], string[128]; //die defines die wir später brauchen
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid, 0xAFAFAFAA, "Benutze: /prison [ID] [Grund]");
    format(string,sizeof(string),"[ADMCMD]: %s wurde von Admin %s ins Admin Prison geschickt Grund: %s", SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessageToAll(0xFF4122FF,string);
    SetPlayerPos(i,//koordinate vom AP);
    SetTimer("Prison",60000,true);//timer geht 60 min
    SpielerInfo[i][Prison]=1;
    }
    else
    {
    SendClientMessage(playerid,0xAFAFAFAA,"Du bist kein Admin!");
    }
    return 1;


    }
    so jetzt brauchst du noch das es abgespeichert wird und was passiert
    unten im script machst du den.


    public prison()
    {
    SpielerInfo[i][Prisontime]+=1; //in die spieler datei wird jeweils jede minute +1 gemacht
    {
    if(SpielerInfo[i][Prisontime]==60) //ist dann der wert auf 60 kommt dies
    {
    SetPlayerPos(i,//koordinaten zum rauskommen);
    SpielerInfo[i][Prisontime]=0;
    SpielerInfo[i][Prison]=0;



    }
    }
    return 1;
    }


    dann noch in dein enum das es abgespeichert wird


    Prison,
    Prisontime,


    nun muss du es noch laden und speichern


    beim ladenstock machst du
    SpielerInfo[playerid][Prison] = mysql_GetInt("accounts", "Prison", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][Prisontime] = mysql_GetInt("accounts", "Prisontime", "Name", SpielerInfo[playerid][pName]);


    beim speicherstock
    mysql_SetInt("accounts", "Prison", SpielerInfo[playerid][Prison], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Prisontime", SpielerInfo[playerid][Prisontime], "Name", SpielerInfo[playerid][pName]);


    dann noch bei onplayerconnect


    if(SpielerInfo[playerid][Prison]==1)
    {
    Kick(playerid);
    }
    else
    {}


    wiegesagt ungetestet söllte aber funktionieren.


    falls du mit Dini arbeitest einfach uimschereiben


    MfG Music4You


    find ich auch ^^ aber naja hauptsache es geht, so versteh ich das wenigstens :D