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.