public OnPlayerText(playerid, text[])
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
new message[128],rpname[255],string[128];
rpname = RemoveUnderscore(SpielerDaten[playerid][player_RPName]);
format(message, sizeof(message), "%s sagt: {FFFFFF}%s", rpname, text);
new chat_color;
for(new i=0; i<GetPlayerPoolSize(); i++)
{
if(!SpielerDaten[i][player_Eingeloggt]) continue;
if(!IsPlayerInRangeOfPoint(i, CHAT_RADIUS, x, y, z))continue;
new Float:distance = GetPlayerDistanceFromPoint(i, x, y, z);
if(distance < CHAT_RADIUS / CHAT_FADES)
{
chat_color = COLOR_CHAT;
}
else if(distance < CHAT_RADIUS / CHAT_FADES * 2)
{
chat_color = COLOR_FADE1;
}
else if(distance < CHAT_RADIUS / CHAT_FADES * 3)
{
chat_color = COLOR_FADE2;
}
else if(distance < CHAT_RADIUS / CHAT_FADES * 4)
{
chat_color = COLOR_FADE3;
}
else if(distance <= CHAT_RADIUS / CHAT_FADES * 5)
{
chat_color = COLOR_FADE4;
}
SendClientMessage(i, chat_color, string);
}
return 0;
}
Alles anzeigen
Verwende bei Loops bei denen du durch alle Spieler loopst entweder GetPlayerPoolSize (Das ist die Anzahl der verbundenen Spieler) oder nutze das foreach Include.
Wie hast du denn CHAT_RADIUS und CHAT_FADES definiert?
Muss es if(!SpielerDaten[player_Eingeloggt](i)) continue; sein oder ohne (i)?
Das (i) in Klammern macht dort keinen Sinn, da du ja auf deine Spielerdaten zugreifen willst die in einem enum gespeichert sind, und nicht eine Funktion aufrufst. Also muss es if(!SpielerDaten[i][player_Eingeloggt]) continue; sein.