Becsléseim szerint működik, leszámítva ha valamelyik szám értéke
pontosan nulla - arra viszont elég kevés esély van, hogy gyakorlatban bármelyik koordináta is pontosan nulla legyen.
stock GetPositiveValue(Float:x1, Float:x2)
{
new Float:value = 0;
if(x1 > 0 && x2 > 0)
{
if(x1 > x2)
{
value = x1-x2;
}
else
{
value = x2-x1;
}
}
if(x1 < 0 && x2 > 0)
{
value = x2+(-x1);
}
if(x1 > 0 && x2 < 0)
{
value = x1+(-x2);
}
if(x1 < 0 && x2 < 0)
{
if(x1 < x2)
{
value = x2-(x1);
}
else
{
value = x1-(x2);
}
}
return float:value;
}
Én az alábbi paranccsal teszteltem le az összes lehetőséget, és tízből tíz alkalommal megfelelő értéket adott vissza.
COMMAND:getdistance(playerid, params[])
{
new Float:X1, X2;
if(sscanf(params, \"ff\", X1, X2)) return SendClientMessage(playerid, -1, \"[{3884FF}INFO{FFFFFF}] Usage: /getdistance [x1] [x2]\");
format(Str, sizeof(Str), \"[{3884FF}INFO{FFFFFF}] The distance between the coordinates is: %f\", GetPositiveValue(X1, X2));
SendClientMessage(playerid, -1, Str);
return 1;
}