This_RKV
Дебютант
Доброго времени суток дамы и господа :3
Сегодня я вам покажу как сделать систему GPS подобную GTA 4 and GTA 5.
В данном мануале мы будем использовать плагин RouteConnector by Gamer_Z. Скачать плагин
Сегодня я вам покажу как сделать систему 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>
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;
}
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 ----------
Багов не обнаружено, но корректная работа при большом онлайне не гарантируется !
Последнее редактирование:
