Moin!
Ich war gerade dabei ein Makeadmin - Befehl zu erstellen (mit strget).
Das hat auch alles super funktioniert, aber da der Befehl rund 40 Zeilen braucht,
wollte ich das Suchen nach dem Spieler in einen Stock packen.
Hier der eigentliche Befehl:
if(strcmp(strget(cmdtext,0),"/makeadmin",true)==0)
{
if(Spieler[playerid][Adminlevel]!=5) return SendClientMessage(playerid,ERROR,"Du bist dazu nicht berechtigt.");
if(strlen(strget(cmdtext,1))==0||strlen(strget(cmdtext,2))==0) return SendClientMessage(playerid,ERROR,"Benutze: /makeadmin [Spieler] [Rank]");
new Rank;
new pID;
Rank=strval(strget(cmdtext,2));
SpielerSuchen(playerid,strget(cmdtext,1),pID);
Spieler[pID][Adminlevel]=Rank;
new string[50];
format(string,sizeof(string),"%s hat %s zum Admin %i gemacht.",SpielerName(playerid),SpielerName(pID),Rank);
SendClientMessageToAll(ERROR,string);
format(string,sizeof(string),"%s hat dich zum Admin %i gemacht.",SpielerName(playerid),Rank);
SendClientMessage(pID,ERROR,string);
return 1;
}
Hier der eigen erstellte Stock:
stock SpielerSuchen(playerid,text[],pssaaas)
{
if(IsNumeric(text)) pssaaas=strval(text);
else
{
new anzahl;
new stringpID[MAX_PLAYER_NAME+1];
format(stringpID,sizeof(stringpID),"%s",text);
for(new ID=0;ID<MAX_PLAYERS;ID++)
{
if(IsPlayerConnected(ID))
{
if(strfind(SpielerName(ID),stringpID,true,0)!=-1)
{
anzahl++;
pssaaas=ID;
}
}
}
if(anzahl!=1) return SendClientMessage(playerid,ERROR,"Spieler wurde nicht gefunden.");
else if(!IsPlayerConnected(pssaaas)) return SendClientMessage(playerid,ERROR,"Spieler wurde nicht gefunden.");
}
return pssaaas;
}
Das Problem:
Sobald ein Error kommt (Kein Spieler gefunden, die ID nicht gefunden etc.) wird der Stock beendet
und pID wird als ID ausgeführt. da eine neue Variable standartmäßig 0 ist,
wird dann zwar der Text "Spieler wurde nicht gefunden" angezeigt, aber Spieler mit der ID 0 bekommt
den Admintitel den man angibt.
Danke für die Hilfe
// Push bitte!