Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Система GPS [GTA V]

Статус
В этой теме нельзя размещать новые ответы.

This_RKV

Дебютант
Доброго времени суток дамы и господа :3
Сегодня я вам покажу как сделать систему GPS подобную GTA 4 and GTA 5.
В данном мануале мы будем использовать плагин RouteConnector by Gamer_Z. Скачать плагин

Установка плагина RouteConnector:

1. Скачать архив RouteConnector (Ссылка в шапке темы)
2. Содержимое архива переместить в папку с сервером.
3. В server.cfg в конец строки plugins добавить RouteConnectorPlugin (RouteConnectorPlugin.so)

И так начнем. Ко всем new добавьте:

PHP:
enum RouteInformation
{
	Destination,
	Zones[1024],
	bool:calculating,
	Lenght,
	GPS_Polygon,
	bool:IsInGPS_Polygon
};
new PlayerRoute[MAX_PLAYERS][RouteInformation];
Подключите инклуид:

PHP:
#include <RouteConnector>
Далее в OnPlayerConnect вставьте:

PHP:
PlayerRoute[playerid][Destination] = -1;
В конец мода вставьте:

PHP:
public OnPlayerClosestNodeIDChange(playerid,old_NodeID,new_NodeID)
{
	if(new_NodeID != -1)
	{
		if(PlayerRoute[playerid][Destination] != -1)
		{
			if(PlayerRoute[playerid][Destination] == new_NodeID)
			{
				DisableGPS(playerid);
			}
			else
			{
				if(!PlayerRoute[playerid][IsInGPS_Polygon])
				{
				    if(!PlayerRoute[playerid][calculating])
				    {

						if(CalculatePath(new_NodeID, PlayerRoute[playerid][Destination], playerid, .CreatePolygon = true, .GrabNodePositions = true))
						{
							DisableGPS(playerid);
							PlayerRoute[playerid][calculating] = true;
						}
				    }
				}
			}
		}
	}
	return 1;
}
stock DisableGPS(playerid)
{
	if(PlayerRoute[playerid][Destination] != -1)
	{
		for(new i = 0; i < PlayerRoute[playerid][Lenght]; ++i)
		{
			GangZoneDestroy(PlayerRoute[playerid][Zones][i]);
			GangZoneHideForAll(PlayerRoute[playerid][Zones][i]);
		}
		PlayerRoute[playerid][Lenght] = 0;
		PlayerRoute[playerid][Destination] = -1;
		gps_RemovePlayer(playerid);
		DestroyDynamicArea(PlayerRoute[playerid][GPS_Polygon]);
		PlayerRoute[playerid][GPS_Polygon] = -1;
		PlayerRoute[playerid][IsInGPS_Polygon] = false;
	}
	return 1;
}

public GPS_WhenRouteIsCalculated(routeid,node_id_array[],amount_of_nodes,Float:distance,Float:Polygon[],Polygon_Size,Float:NodePosX[],Float:NodePosY[],Float:NodePosZ[])
{
	PlayerRoute[routeid][calculating] = false;
	if(amount_of_nodes > 1)
	{
	    for(new i = 0; i < amount_of_nodes; ++i)
	    {
			PlayerRoute[routeid][Zones][i] = GangZoneCreate(NodePosX[i]-24,NodePosY[i]-9,NodePosX[i]-9,NodePosY[i]+14);
			GangZoneShowForAll(PlayerRoute[routeid][Zones][i],0xBC2C2CFF);
	    }
	    PlayerRoute[routeid][Lenght] = amount_of_nodes;
		PlayerRoute[routeid][Destination] = node_id_array[amount_of_nodes-1];
	    PlayerRoute[routeid][GPS_Polygon] = CreateDynamicPolygon(Polygon,.maxpoints = Polygon_Size,.playerid = routeid);
	    PlayerRoute[routeid][IsInGPS_Polygon] = IsPlayerInDynamicArea(routeid,PlayerRoute[routeid][GPS_Polygon]) == 1;
	    gps_AddPlayer(routeid);
	}
	else
	{
	}
	return 1;
}

public OnPlayerEnterDynamicArea(playerid, areaid)
{
	if(areaid == PlayerRoute[playerid][GPS_Polygon])
	{
	    PlayerRoute[playerid][IsInGPS_Polygon] = true;
	}
	return 1;
}

public OnPlayerLeaveDynamicArea(playerid, areaid)
{
	if(areaid == PlayerRoute[playerid][GPS_Polygon] && PlayerRoute[playerid][IsInGPS_Polygon])
	{
		if(!PlayerRoute[playerid][calculating])
		{
		    new PlayerClosest = NearestPlayerNode(playerid);
		    if(PlayerClosest != -1)
		    {
				if(CalculatePath(PlayerClosest, PlayerRoute[playerid][Destination], playerid, .CreatePolygon = true, .GrabNodePositions = true))
				{
				    DisableGPS(playerid);
					PlayerRoute[playerid][calculating] = true;
				}
		    }
		}
	    PlayerRoute[playerid][IsInGPS_Polygon] = false;
	}
	return 1;
}
Пример использования GPS:

PHP:
CMD:gps(playerid)
{
	if(PlayerRoute[playerid][calculating])
	{
	    SendClientMessage(playerid,0xFFFF00FF,"Пожалуйста, подождите, прежде чем выбрать ваш следующий пункт назначения!");
		return 1;
	}
	if(PlayerRoute[playerid][Destination] != -1)
	{
		DisableGPS(playerid);
	}
	new PlayerClosest = NearestPlayerNode(playerid);
	new TempDestination = NearestNodeFromPoint(1345.2018,746.1505,10.2350);
	if(PlayerClosest == -1)
	{
		SendClientMessage(playerid,0xFFFF00FF,"Ваше текущее местоположение неизвестно, GPS не может быть активирован");
		return 1;
	}
	if(TempDestination == -1)
	{
		SendClientMessage(playerid,0xFFFF00FF,"Выбранное направление не известно GPS, пожалуйста, попробуйте еще раз!");
		return 1;
	}
	if(CalculatePath(PlayerClosest,TempDestination,playerid, .GrabNodePositions = true))
	{
		PlayerRoute[playerid][calculating] = true;
		SendClientMessage(playerid,0xFFFF00FF,"Подключение к спутникам.. пожалуйста, подождите.");
	}
	else
	{
		SendClientMessage(playerid,0xFFFF00FF,"Произошла ошибка... Попробуйте еще раз!");
	}
	return true;
}
PHP:
new TempDestination = NearestNodeFromPoint(1345.2018,746.1505,10.2350); // Координаты до пункта назначения

Изобрел: Nas
Реализовал: This_RKV and Gamer_Z


С данным плагином можно реализовать многое... Наприме Автопилот, GPS через Google Translate типа (Поверните на лево, на право), и еще много чего другого!

---------- Post added at 10:22 ---------- Previous post was at 10:12 ----------

Багов не обнаружено, но корректная работа при большом онлайне не гарантируется !
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу