Salut,
je relance ce topic:
//trop souvent mal conçue, ici on teste bel et bien une distance
function isPlayerInRange(playerid, radius, x, y, z)
{
local pos = getPlayerCoordinates(playerid);
pos[0] -= x;
pos[1] -= y;
pos[2] -= z;
return ((pos[0] * pos[0] + pos[1] * pos[1] + pos[2] * pos[2]) <= (radius * radius));//préfère ne pas utiliser x, y et z comme je ne suis pas sur de la façon dont les paramètres sont passés...
}
//même chose avec deux points connus
function pointToPoint(x, y, z, x2, y2, z2, radius)
{
local tmpX, tmpY, tmpZ;
tmpX = x - x2;
tmpY = y - y2;
tmpZ = z - z2;
return ((tmpX * tmpX + tmpY * tmpY + tmpZ * tmpZ) <= (radius * radius));
}
Et voici une version mieux codée du ProxDetector:
//j'ai conservé l'ordre des paramètres même si je ne l'approuve pas tellement...
function ProxDetector(radius, playerid, string,col1,col2,col3,col4,col5)
{
local dist;
local radi = radius * radius;
local tmpPos;
local pos = getPlayerCoordinates(playerid);
for(local i = 0; i < MAX_PLAYERS; i++)//es-ce que les ID commencent à 1? j'ai changé pour ça...
{
if(isPlayerConnected(i))
{
tmpPos = getPlayerCoordinates(i);//récupère la position du joueur
tmpPos[0] -= pos[0];
tmpPos[1] -= pos[1];
tmpPos[2] -= pos[2];
dist = (tmpPos[0] * tmpPos[0] + tmpPos[1] * tmpPos[1] + tmpPos[2] * tmpPos[2]);//calcul de la distance entre les deux joueurs, le tout est exposant 2
if (dist < radi/256)//équivalent à 1/16 car exposant 2
{
sendPlayerMessage(i, string, col1);
}
else if (dist < radi/64)//équivaut à 1/8
{
sendPlayerMessage(i, string, col2);
}
else if (dist < radi/16)//équivaut 1/4
{
sendPlayerMessage(i, string, col3);
}
else if (dist < radi/4)
{
sendPlayerMessage(i, string, col4);
}
else if (dist < radi)
{
sendPlayerMessage(i, string, col5);
}
}
}
return 1;
}
(Il est possible que ces fonctions comportent des erreurs de syntaxe comme je ne connais pas tellement le Squirrel..., j'ai fait en regardant certains codes sur le forum officiel...)
++Sim++