Simon2202:
- Nicht das Rad neu erfinden und einfach auf y_ini umsteigen. Besser noch: Direkt auf ein Datenbanksystem umsteigen, denn früher oder später wird man mit Filesystemen an Grenzen stoßen.
- Bei der bekannten ProxDetector() Funktion wird viel unnötig berechnet und eine Unmenge an Variablen unnötig erstellt. Ich halte dies (eigene Kreation) für besser:
stock Float:getDistanceBetweenCoordinates(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2) {
return floatsqroot(floatpower(floatabs(floatsub(x2, x1)), 2) + floatpower(floatabs(floatsub(y2, y1)), 2) + floatpower(floatabs(floatsub(z2, z1)), 2));
}
sendLocalMessage(msg[], Float:posX, Float:posY, Float:posZ, Float:radius, interior, vw, color) {
new Float:X,
Float:Y,
Float:Z,
Float:distance;
if(color != 0) {
foreach(new i : playerIterator) {
if(GetPlayerInterior(i) == interior && GetPlayerVirtualWorld(i) == vw) {
GetPlayerPos(i, X, Y, Z);
distance = getDistanceBetweenCoordinates(posX, posY, posZ, X, Y, Z);
if(distance < radius) {
SendClientMessage(i, color, msg);
}
}
}
} else {
new Float:radiusStep = radius / 6;
foreach(new i : playerIterator) {
if(GetPlayerInterior(i) == interior && GetPlayerVirtualWorld(i) == vw) {
GetPlayerPos(i, X, Y, Z);
distance = getDistanceBetweenCoordinates(posX, posY, posZ, X, Y, Z);
if(distance < radiusStep) {
SendClientMessage(i, COLOR_WHITE, msg);
} else if(distance < radiusStep * 2) {
SendClientMessage(i, COLOR_FADE1, msg);
} else if(distance < radiusStep * 3) {
SendClientMessage(i, COLOR_FADE2, msg);
} else if(distance < radiusStep * 4) {
SendClientMessage(i, COLOR_FADE3, msg);
} else if(distance < radiusStep * 5) {
SendClientMessage(i, COLOR_FADE4, msg);
} else if(distance < radiusStep * 6) {
SendClientMessage(i, COLOR_FADE5, msg);
}
}
}
}
}