04.11.2011, 07:18
Можно типа этого:
Не очень удобно но вычислений меньше.
Но для этого есть конвертатор из максимальных/минимальных значений.
pawn Код:
stock IsPlayerInRangeOfCube(playerid,Float:x,Float:y,Float:z,Float:rad)
{
new Float:px,Float:py,Float:pz;
GetPlayerPos(playerid,px,py,pz);
if(floatabs(px-x)>rad)return 0;
if(floatabs(py-y)>rad)return 0;
if(floatabs(pz-z)>rad)return 0;
return 1;
}
stock IsPlayerInRangeOfParallepiped(playerid,Float:x,Float:y,Float:z,Float:radx,Float:rady,Float:radz)
{
new Float:px,Float:py,Float:pz;
GetPlayerPos(playerid,px,py,pz);
if(floatabs(px-x)>radx)return 0;
if(floatabs(py-y)>rady)return 0;
if(floatabs(pz-z)>radz)return 0;
return 1;
}
Но для этого есть конвертатор из максимальных/минимальных значений.
pawn Код:
stock ConvertMMCToCentralC(filename[],Float:minX,Float:maxX,Float:minY,Float:maxY,Float:minZ,Float:maxZ,comment[])
{
new str[128];
format(str,128,"%s_list.txt",filename);
new File:f=fopen(str,io_append);
if(maxX-minX == maxY-minY && maxX-minX==maxZ-minZ)
{
format(str,128,"IsPlayerInRangeOfCube(playerid,%f,%f,%f,%f);//%s\n",(maxX+minX)/2,(maxY+minY)/2,(maxZ+minZ)/2,maxX-minX,comment);
}
else
{//
format(str,128,"IsPlayerInRangeOfParallepiped(playerid,%f,%f,%f,%f,%f,%f);//%s\n",(maxX+minX)/2,(maxY+minY)/2,(maxZ+minZ)/2,maxX-minX,maxY-minY,maxZ-minZ,comment);
}
fwrite(f,str);
fclose(f);
}