/makeleader für Selfmade

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,
    ich wollte fragen, ob mir jemand ein /makeleader Befehl für mein Selfmade schreiben kann.


    Ich hab folgendes schon:

    static gTeam[MAX_PLAYERS];
    static gLeader[MAX_PLAYERS];
    #define TEAM_POLIZEI
    enum SInfo
    {
    Fraktion,
    Adminlevel,
    Leader
    }


    new Spielerinfo[MAX_PLAYERS][SInfo];
    stock LoadAccount(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
    GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
    Spielerinfo[playerid][Adminlevel]=dini_Int(Spielerdatei, "Adminlevel");
    Spielerinfo[playerid][Fraktion]=dini_Int(Spielerdatei,"Fraktion");
    Spielerinfo[playerid][Leader]=dini_Int(Spielerdatei,"Leader");
    return 1;
    }


    stock SpielerSpeichern(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Adminlevel",Spielerinfo[playerid][Adminlevel]);
    dini_IntSet(Spielerdatei,"Fraktion",Spielerinfo[playerid][Fraktion]);
    dini_IntSet(Spielerdatei,"Leader",Spielerinfo[playerid][Leader]);
    return 1;
    }


    stock ResetVariablen(playerid)
    {
    Spielerinfo[playerid][Adminlevel]=0;
    Spielerinfo[playerid][Fraktion]=0;
    Spielerinfo[playerid][Leader]=0;
    return 1;
    }


    LG


    //edit: Ich würde es gerne so haben, dass die Fraktion auch gespeichert wird.

    20€ geschenkt - bei Fragen gerne PN an mich


    Mehr über reCyclix
    reCyclix - more than recycling
    reyCyclix ist ein polnisches Recyclingunternehmen, welches jedem die Möglichkeit bietet, sich an ihrem Geschäftsmodell gewinnbringend zu beteiligen. Normalerweise passiert das, in dem man eine beliebige Summe in Kunststoffmüll investiert, allerdings schenkt reCyclix zur Zeit noch jedem neuem Nutzer 20€, die zur Investition genutzt werden können.

    2 Mal editiert, zuletzt von Key ()

  • static gleader kann weg .....weil du es schon im enum hast


    da du nicht geschrieben hast ob du dcmd oder etwas anderes benutzt mache ich es mal in ocmd...


    ocmd:makeleader(playerid,params[])
    {
    new pID,fID;
    if(sscanf(params,"ud",pID,fID)) return SendClientMessage(playerid,COLOR,"Benutzung: makeleader [ID] [FraktionsID]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR,"Spieler nicht online!");
    Spielerinfo[pID][Leader]=fID;
    return 1;
    }


    und ich hab keine Ahnung was du mit dem speichern meinst ...

  • Eigentlich sollte man, wenn man sich vornimmt, ein komplett eigenes Script zu schreiben, schon in der Lage sein, per Command 2 Variablen umzustellen... :/


    Bei Zabus' Lösung, die mir nebenbei erwähnt exzellent gefällt, benötigst du die Include oCmd, zu beziehen unter http://www.kleiner-opa.de


    Zum Speichern benötigst du für die komfortabelste Methode ein Speichersystem, OpaINI ist empfehlenswert, ebenfalls unter http://www.kleiner-opa.de zu bekommen, Anleitung liegt bei.
    Das ist vor allem schneller und festplattenschonender als z.B. dini.

  • hier so sieht meiner aus aber ich benutze kein gTeam... aber da es leader im enum gibt ist das eig das selbe...


    ocmd:setleader(playerid,params[])
    {
    new pID, level;
    new string[128],fname[40];
    new oname[MAX_PLAYER_NAME],aname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,aname,sizeof aname);
    GetPlayerName(pID,oname,sizeof oname);
    if(IsPlayerConnected(playerid))
    {
    if(Spieler[playerid][Admin] >= 8)
    {
    if(sscanf(params,"ud",pID,level))
    return SendClientMessage(playerid,weiß,"Nutze: /setleader [playerid] [Fraktion]");
    if(!IsPlayerConnected(pID))
    return SendClientMessage(playerid,rot,"ID nicht vergeben");
    if(sscanf(params,"ud",pID,level)) {
    SendClientMessage(playerid,weiß,"Nutze: /setleader [playerid] [Fraktion]");
    return SendClientMessage(playerid,weiß,"Fraktionen/Gangs: 1 = Cops, 2 = Fahrschule, 3 = Medic, 4 = Grove Street, 5 = Präsident\n6 = LS-Media Society, 7 = Los Santos Taxi Company, 8 = Ordnungsamt, 9 = LSIAT\n10 = Hells Angels"); }
    if(level < 1 || level > 10) { return SendClientMessage(playerid,weiß,"Es gibt keine Fraktion/Gangs über 9 oder unter 1"); }
    Spieler[pID][Leader] = level;
    Spieler[pID][Rank] = 8;
    if(level == 1) { SetPlayerSkin(pID,283); Spieler[pID][Skin] = 283; fname = "Polizei"; }
    else if(level == 2) { SetPlayerSkin(pID,172); Spieler[pID][Skin] = 172; fname = "Fahrschule"; }
    else if(level == 3) { SetPlayerSkin(pID,274); Spieler[pID][Skin] = 274; fname = "Medic"; }
    else if(level == 4) { SetPlayerSkin(pID,269); Spieler[pID][Skin] = 269; fname = "Grove Street"; }
    else if(level == 5) { SetPlayerSkin(pID,147); Spieler[pID][Skin] = 147; fname = "Präsidentenamt"; }
    else if(level == 6) { SetPlayerSkin(pID,295); Spieler[pID][Skin] = 295; fname = "Los Santos Media Society"; }
    else if(level == 7) { SetPlayerSkin(pID,255); Spieler[pID][Skin] = 255; fname = "Los Santos Taxi Company"; }
    else if(level == 8) { SetPlayerSkin(pID,275); Spieler[pID][Skin] = 275; fname = "Ordnungsamt"; }
    else if(level == 9) { SetPlayerSkin(pID,187); Spieler[pID][Skin] = 187; fname = "LSIAT"; }
    else if(level == 10) { SetPlayerSkin(pID,100); Spieler[pID][Skin] = 100; fname = "Hells Angels"; }
    format(string,sizeof string,"Du hast %s zum Leader der Fraktion %d [%s] gemacht.",oname,level,fname);
    SendClientMessage(playerid,weiß,string);
    format(string,sizeof string,"Admin %s hat dich zum Leader der Fraktion %d [%s] gemacht.",aname,level,fname);
    SendClientMessage(pID,weiß,string);
    }
    else { return SendClientMessage(playerid,rot,"Du bist nicht befugt diesen Befehl zu benutzen!"); }
    }
    return 1;
    }


    so muss das ca aufgebaut sein :)


    hoffe ich konnte helfen

  • Ich bekomme 2 Errors..

    Code
    D:\Downloads\samp03bsvr_R2_win32 (2)\gamemodes\Selfmade.pwn(159) : error 017: undefined symbol "sscanf"
    D:\Downloads\samp03bsvr_R2_win32 (2)\gamemodes\Selfmade.pwn(163) : error 017: undefined symbol "sscanf"

    20€ geschenkt - bei Fragen gerne PN an mich


    Mehr über reCyclix
    reCyclix - more than recycling
    reyCyclix ist ein polnisches Recyclingunternehmen, welches jedem die Möglichkeit bietet, sich an ihrem Geschäftsmodell gewinnbringend zu beteiligen. Normalerweise passiert das, in dem man eine beliebige Summe in Kunststoffmüll investiert, allerdings schenkt reCyclix zur Zeit noch jedem neuem Nutzer 20€, die zur Investition genutzt werden können.

  • ////////////////////////sscanf//////////////////////////////////////////////////
    /*----------------------------------------------------------------------------*-
    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;
    }
    einfach ganz untern oder so im script reinkopieren man kann garnichts falsch machen
    //edit text vergessen :D