Проверка городов
#1

Как сделать проверку на нахождения игрока в Los Santos, San Fierro или Las Venturas ??
Reply
#2

PlayerToKvadrat
функция говно, других не знаю
Reply
#3

Код:
stock PlayerInZone(playerid, Float: minx, Float: miny, Float: maxx, Float: maxy, Float: minz, Float: maxz)
{
	new Float: x, Float: y, Float: z;
	GetPlayerPos(playerid, x, y, z);
	if(x > minx && x < maxx && y > miny && y < maxy && z > minz && z < maxz)
	{
	return 1;
	}
	else
	{
	return 0;
	}
}
както так
Reply
#4

Ещё вариант:

Код:
public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
    if(IsPlayerConnected(playerid))
	{
		new Float:oldposx, Float:oldposy, Float:oldposz;
		new Float:tempposx, Float:tempposy, Float:tempposz;
		GetPlayerPos(playerid, oldposx, oldposy, oldposz);
		tempposx = (oldposx -x);
		tempposy = (oldposy -y);
		tempposz = (oldposz -z);
		if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
		{
			return 1;
		}
	}
	return 0;
}
Reply
#5

Quote:
Originally Posted by -Stranger-
Посмотреть сообщение
Ещё вариант:

Код:
public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
    if(IsPlayerConnected(playerid))
	{
		new Float:oldposx, Float:oldposy, Float:oldposz;
		new Float:tempposx, Float:tempposy, Float:tempposz;
		GetPlayerPos(playerid, oldposx, oldposy, oldposz);
		tempposx = (oldposx -x);
		tempposy = (oldposy -y);
		tempposz = (oldposz -z);
		if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
		{
			return 1;
		}
	}
	return 0;
}
Удали и больше ни когда не показывай этого, эта функция аналог встроенной IsPlayerInRangeOfPoint но гораздо медленнее!
Reply
#6

Можно типа этого:
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);
}
Reply
#7

Stepashka, не спорю что функция старая и не актуальна при 0.3c. Но как пример...

Но возвращаясь к вопросу автора: Проверки на город в SAMP нету.
Поэтому: Если нада сделать круглую зону, то можно использовать IsPlayerInRangeOfPoint (ex. PlayerToPoint), а если прямоугольную, что что-то типа PlayerInZone.
Reply
#8

надеюсь уважаемый Hawkins понимает, что как круглых так и квадратных зон контроля может быть не одно...
Reply
#9

И дополняя ответ Alllexxx, при желании можно сделать достаточно точное определение города\сельской местности.
Как это сделать? Можно воспользоваться фотошопом и этой картинкой >> 6,3 MБ <<
Картинка имеет размер 6000px, и игровой мир имеет размер 6000 (чего-то там). Далее всё просто:
Игровая координата X = Координата_на_рисунке - 3000;
Игровая координата У = 3000 + Координата_на_рисунке;

Далее думаю всё понятно...
Reply
#10

Кто-то выкладывал функцию определения нахождения игрока в многоугольнике... Поищите.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)