/makeleader Problem

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
  • Guten Tag Breadfish,
    Ich habe mir einen /makeleader Befehl zusammen gebastelt.
    Nur wenn jemand /makeleader [User ID] [frakid] eingibt dann mit den entsprechenden zahlen dann wird nur ID 0 der Leader egal welche User ID man ein gibt
    Also nur der ID 0 kann dann leader werden.
    Wenn ich die ID 0 habe und jemanden Leader machen möchte werde ich der Leader.


    ocmd:makeleader(playerid,params[])
    {
    new pID, ldlv, string[128];
    if(sscanf(params, "ui", pID, ldlv))return SendClientMessage(playerid, COLOR_GRAD2, "FEHLER: /makeleader [SpielerID/Name] [FrakID](/fraktionen)");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid, COLOR_WHITE, "Spieler ist nicht online");
    new ldtext[46];
    if(ldlv == 0){ ldtext ="Zivilist-Leader"; if(Spieler[pID][Geschlecht] == 1){ Spieler[pID][Skin] = 12;} else if(Spieler[pID][Geschlecht] == 2){ Spieler[pID][Skin] = 2;}}
    else if(ldlv == 1){ ldtext ="SAPD-Leader"; Spieler[pID][Skin] = 283;}
    else if(ldlv == 2){ ldtext ="FBI-Leader"; Spieler[pID][Skin] = 286;}
    else if(ldlv == 3){ ldtext ="Sanitäter-Leader"; Spieler[pID][Skin]=274;}
    else if(ldlv == 4){ ldtext ="Hitman-Leader"; Spieler[pID][Skin]=294;}
    else if(ldlv == 5){ ldtext ="News Reporter-Leader"; Spieler[pID][Skin]=57;}
    else if(ldlv == 6){ ldtext ="Transport GmbH-Leader"; Spieler[pID][Skin]=133;}
    else if(ldlv == 7){ ldtext ="Ordnungsamt-Leader"; Spieler[pID][Skin]=50;}
    else if(ldlv == 8){ ldtext ="Russenmafia-Leader"; Spieler[pID][Skin]=124;}
    else if(ldlv == 9){ ldtext ="Yakuza-Leader"; Spieler[pID][Skin] = 186;}
    else if(ldlv == 10){ ldtext ="Ballas-Leader"; Spieler[pID][Skin] = 102;}
    else if(ldlv == 11){ ldtext ="Grove Street-Leader"; Spieler[pID][Skin] = 105;}
    else if(ldlv == 12){ ldtext ="San Fierro Rifas-Leader";Spieler[pID][Skin]=116;}
    SetPlayerSkin(pID, Spieler[playerid][Skin]);
    Spieler[pID][Leader] = ldlv;
    Spieler[pID][Team] = ldlv;
    Spieler[pID][Rank] = 6;
    format(string, sizeof(string), "* Head-Administrator %s hat dich zum %s gemacht.", SpielerName(playerid), ldtext);
    SendClientMessage(pID, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "* Du hast %s zum %s gemacht.", SpielerName(pID), ldtext);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    SpawnPlayer(pID);
    new da, mont, yea, hou, minut;
    getdate(yea, mont, da);
    gettime(hou, minut);
    format(string, sizeof(string), "%s macht %s zum %s (%d) Date: %d.%d.%d Time: %02d:%02d", SpielerName(playerid), SpielerName(pID), ldtext, ldlv, da, mont, yea, hou, minut);
    MakeLeaderLog(string);
    return 1;
    }


    mfg

  • So mach ich es:


    ocmd:makeleader(playerid,params[])
    {
    new pID, ldlv, string[128], tmp[256], tmp2[256], idx;
    tmp = strtok(params, idx); tmp2 = strtok(params, idx);
    if(!IsNumeric(tmp2))return SendClientMessage(playerid, COLOR_GRAD2, "FEHLER: /makeleader [SpielerID/Name] [FrakID](/fraktionen)");
    if(IsNumeric(tmp)) pID = strval(tmp);
    else pID = ReturnPlayerID(tmp);
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid, COLOR_WHITE, "Spieler ist nicht online");
    ldlv = strval(tmp2);
    new ldtext[46];
    if(ldlv == 0){ ldtext ="Zivilist-Leader"; if(Spieler[pID][Geschlecht] == 1){ Spieler[pID][Skin] = 12;} else if(Spieler[pID][Geschlecht] == 2){ Spieler[pID][Skin] = 2;}}
    else if(ldlv == 1){ ldtext ="SAPD-Leader"; Spieler[pID][Skin] = 283;}
    else if(ldlv == 2){ ldtext ="FBI-Leader"; Spieler[pID][Skin] = 286;}
    else if(ldlv == 3){ ldtext ="Sanitäter-Leader"; Spieler[pID][Skin]=274;}
    else if(ldlv == 4){ ldtext ="Hitman-Leader"; Spieler[pID][Skin]=294;}
    else if(ldlv == 5){ ldtext ="News Reporter-Leader"; Spieler[pID][Skin]=57;}
    else if(ldlv == 6){ ldtext ="Transport GmbH-Leader"; Spieler[pID][Skin]=133;}
    else if(ldlv == 7){ ldtext ="Ordnungsamt-Leader"; Spieler[pID][Skin]=50;}
    else if(ldlv == 8){ ldtext ="Russenmafia-Leader"; Spieler[pID][Skin]=124;}
    else if(ldlv == 9){ ldtext ="Yakuza-Leader"; Spieler[pID][Skin] = 186;}
    else if(ldlv == 10){ ldtext ="Ballas-Leader"; Spieler[pID][Skin] = 102;}
    else if(ldlv == 11){ ldtext ="Grove Street-Leader"; Spieler[pID][Skin] = 105;}
    else if(ldlv == 12){ ldtext ="San Fierro Rifas-Leader";Spieler[pID][Skin]=116;}
    SetPlayerSkin(pID, Spieler[playerid][Skin]);
    Spieler[pID][Leader] = ldlv;
    Spieler[pID][Team] = ldlv;
    Spieler[pID][Rank] = 6;
    format(string, sizeof(string), "* Head-Administrator %s hat dich zum %s gemacht.", SpielerName(playerid), ldtext);
    SendClientMessage(pID, COLOR_LIGHTBLUE, string);
    format(string, sizeof(string), "* Du hast %s zum %s gemacht.", SpielerName(pID), ldtext);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    SpawnPlayer(pID);
    new da, mont, yea, hou, minut;
    getdate(yea, mont, da);
    gettime(hou, minut);
    format(string, sizeof(string), "%s macht %s zum %s (%d) Date: %d.%d.%d Time: %02d:%02d", SpielerName(playerid), SpielerName(pID), ldtext, ldlv, da, mont, yea, hou, minut);
    MakeLeaderLog(string);
    return 1;
    }


    Und einfach das 1x im Code deklarieren:
    stock ReturnPlayerID(PlayerName[])
    {
    for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i)) if(!strcmp(pName(i),PlayerName, true)) return i;
    for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i)) if(strfind(pName(i),PlayerName,true)!=-1) return i;
    return INVALID_PLAYER_ID;
    }


    stock IsNumeric(const string[]) {
    new l=strlen(string);
    if(l==0) return false;
    for(new i = 0; i < l; i++) if ((string[i] > '9' || string[i] < '0') return false;
    return true;
    }


    //From dutils.inc
    stock strtok(const string[], &index,seperator=' ')
    {
    new length = strlen(string);
    new offset = index;
    new result[256];
    while ((index < length) && (string[index] != seperator) && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    if ((index < length) && (string[index] == seperator))
    {
    index++;
    }
    return result;
    }


    Ja, ich benutze strtok und ich stehe dazu. Weil es meiner Meinung nach besser ist.

  • dcmd_makeleader(playerid,params[])
    {
    new pid, frakid;
    if(sscanf(params,"ud",pid,frakid))
    {
    return SendClientMessage(playerid,GRAU,"INFO: /makleader [ID] [Fraktions ID]");
    }
    if(frakid > 6)
    {
    return SendClientMessage(playerid,ADMINROT,"Soviele Fraktionen gibt es nicht!");
    }
    if(IstSpielerAdmin(playerid, 6))
    {
    if(pid == INVALID_PLAYER_ID)
    {
    return SendClientMessage(playerid,ADMINROT,"Ungültiger Spieler!");
    }
    if(IstSpielerInFraktion(pid,frakid) == frakid)
    {
    return SendClientMessage(playerid,ADMINROT,"Der angegebene Spieler ist schon in dieser Fraktion!");
    }
    else
    {
    sSpieler[pid][Fraktion] = frakid;
    SendClientMessage(pid,DGRÜN,"Du bist nun in einer Fraktion!");
    SendClientMessage(pid,DGRÜN,"Du hast den angegeben Spieler in eine Fraktion gepackt!");
    }
    }
    else
    {
    return SendClientMessage(playerid,ADMINROT,"Du bist kein Administrator!");
    }
    return 1;}


    ich hab das noch nicht ganz raus wie man das richtig einfügt