Hallo ich habe mal ne frage:
Ich kann ja aus der id denn Name ableiden mit dem Stock SpielerName(playerid);
kann ich auch aus denn namen die spieler id abfragen zb ist ein spieler mit dem Namen online?
Hallo ich habe mal ne frage:
Ich kann ja aus der id denn Name ableiden mit dem Stock SpielerName(playerid);
kann ich auch aus denn namen die spieler id abfragen zb ist ein spieler mit dem Namen online?
Klar, du kannst durch alle spielerIDs loopen und dann pen gesuchten Namen mit dem Namen der Spieler vergleichen (strcmp). Den Namen dann innerhalb des Schleifenrumpfs per GetPlayerName() ermitteln.
ID: %d, Name: %s, Level: %d, Ping: %d
meinst du sowas also wen du /id eingibst und den Spieler name oder?
stock GetPlayerIdFromName(playername[])
{
for(new i=0;i<GetMaxPlayers();i++)
{
if(IsPlayerConnected(i))
{
new playername2[MAX_PLAYER_NAME];
GetPlayerName(i, playername2, sizeof(playername2));
if(strcmp(playername2, playername, true, strlen(playername)) == 0)
{
return i;
}
}
}
return INVALID_PLAYER_ID;
}
for(new i, p=GetMaxPlayers();i<=p;i++)
Das Gleich Zeichen einfügen damit auch der letzte Spieler abgefragt wird und das GetMaxPlayers vorher in einer Variable speichern, damit die Funktion GetMaxPlayers nicht nochmal ausgeführt wird.
Danke Jungs
Nur mal zwei andere möglichkeiten die besser sind:
Falls du sscanf benutzt ( gehe ich mal stark von aus )
stock GetPlayerID(find[])
{
new playerid = INVALID_PLAYER_ID;
sscanf(find,"u",playerid);
return playerid;
}
Falls nicht
stock GetPlayerID(find[])
{
new pName[MAX_PLAYERS];
for(new playerid, j = GetPlayerPoolSize(); playerid <= j; playerid++)
{
if(!IsPlayerConnected(playerid))
continue;
GetPlayerName(playerid,pName,sizeof(pName));
if(!strcmp(find,pName,false,strlen(find)))
return playerid;
}
return INVALID_PLAYER_ID;
}
Warum GetPlayerPoolSize und nicht GetMaxPlayers bzw. MAX_PLAYERS ?
GetMaxPlayers gibt die maximale anzahl von spielern zurück, GetPlayerPoolSize gibt die derzeit höchste ID zurück.
Ich schmeiße auch mal eine Idee von 'ner GetPlayerID Funktion in die Runde :D.
GetPlayerID(playername[])
{
new name[MAX_PLAYER_NAME];
for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
{
if(GetPlayerName(i, name, MAX_PLAYER_NAME) && !strcmp(name, playername, true))
{
return i;
}
}
return INVALID_PLAYER_ID;
}
Alles anzeigen
Vorteil ist halt, dass ein Funktionsausruf wegfällt & GetPlayerName 0 zurückgibt, wenn der Spieler nicht existiert ist. Inwieweit das tauglich und sinnvoller ist stell ich mal mit einem Fragezeichen in den Raum, wollte aber mal eine Alternative bieten :D.