Das so zu machen ( Nemesus Jr: Fabi.StaR
ist keine gute Idee. In einem Befehl mag es zwar funktionieren, da ja dann mindestens ein Spieler online ist, aber setzt man es in einen Timer und kein Spieler ist online, dann hat man eine Endlosschleife, was zur Folge hat, dass auch niemand mehr den Server betreten kann.
Außerdem kann es theoretisch sein, dass es sehr sehr viele Wiederholungen bei der Methode gibt, denn wenn nur ein Spieler online ist, man aber 500 Slots hat, besteht jedes mal nur eine Chance von 1 zu 499 Chance, dass der Wert getroffen wird. Bei 2000 Wiederholungen ist immer noch eine 2%'ige Chance, dass noch kein Spieler gefunden wurde (2000 ist zwar nicht viel, trotzdem sollte man keine theoretischen Lücken lassen).
Kaliber: Deine Methode wird auch nicht, bzw. nicht richtig, funktionieren, wenn nur ein/kein Spieler online ist, da ein random aus 0 keinen Sinn gibt.
Für @Mausibiba: ist es sicher am einfachsten und am leichtesten zu verstehen, eine Funktion zu verwenden, die einfach eine random ID ausgibt, ohne viel Code drum herum (fehleranfällig!).
stock GetRandomPlayer(playerid)
{
new onlinecount = 0, oID[MAX_PLAYERS];
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && !IsPlayerNPC(i) && i != playerid)
{
oID[onlinecount] = i;
onlinecount++;
}
}
if(onlinecount > 0) return oID[random(onlinecount)];
else return INVALID_PLAYER_ID;
}
Wäre dann ganz einfach zu verwenden:
new player1 = GetRandomPlayer(playerid);
if(player1 == INVALID_PLAYER_ID) return SendClientMessage(playerid, 0xFF0000FF, "Es ist kein Spieler außer dir online!");
SetPlayerPos(player1, x, y, z);
