605 lines
21 KiB
PHP
605 lines
21 KiB
PHP
|
#include <a_samp>
|
||
|
/*
|
||
|
ROUTER PLUGIN
|
||
|
- GPS ADDITION TO SA-MP
|
||
|
- Made By Gamer_Z a.k.a. grasmanek94 , Rafal Grasman
|
||
|
|
||
|
October-2011
|
||
|
|
||
|
|
||
|
contact: gzx@live.nl
|
||
|
|
||
|
http://gpb.googlecode.com/
|
||
|
*/
|
||
|
|
||
|
#if defined ROUTE_CONNECTOR_PLUGIN_INCLUDED
|
||
|
#endinput
|
||
|
#endif
|
||
|
|
||
|
#define MAX_NODES (32768)
|
||
|
#define MAX_CONNECTIONS (5)
|
||
|
|
||
|
#define CONNECT_TYPE_BOTH (0)
|
||
|
#define CONNECT_TYPE_One_To_Two (1)
|
||
|
|
||
|
#define INCLUDE_VERSION (184)
|
||
|
|
||
|
#define ROUTE_CONNECTOR_PLUGIN_INCLUDED
|
||
|
#pragma library "RouteConnectorPlugin"
|
||
|
|
||
|
native AddNode(Float:X,Float:Y,Float:Z,AddToPathFinder = 0, AddToScanner = 0);
|
||
|
/*
|
||
|
Function:
|
||
|
AddNode
|
||
|
Description:
|
||
|
Adds a node into the memory of the plugin,
|
||
|
This node will be unavailable in route calculations.
|
||
|
Parameters:
|
||
|
Position as X Y Z
|
||
|
AddToPathFinder - if set to 1 it will also make sure the graph will be updated so when searching for a route it will be added to the list.
|
||
|
AddToScanner - If set to 1 the node will be available in OnPlayerClosestNodeIDChange, else not.
|
||
|
Returns the added nodeID, -1 if failed.
|
||
|
Note:
|
||
|
NEVER EVER set AddToPathFinder to 1 when a calculation is in progress! THAT IS YOUR OWN RESPOSIBILITY IF IT HAPPENS.
|
||
|
*/
|
||
|
native AddNodeEx(ID,Float:X,Float:Y,Float:Z,AddToPathFinder = 0);
|
||
|
/*
|
||
|
Function:
|
||
|
AddNodeEx
|
||
|
Description:
|
||
|
The only difference with AddNode is that you can specify your own NodeID here AND the node will be automaticly added to the appropriate area.
|
||
|
Gaps may be present (eg AddNodeEx(0,0.0,0.0,0.0,0),AddNodeEx(6,0.0,0.0,0.0,0);).
|
||
|
Parameters:
|
||
|
ID as Custom NodeID
|
||
|
Position as X Y Z
|
||
|
AddToPathFinder - if set to 1 it will also make sure the graph will be updated so when searching for a route it will be added to the list.
|
||
|
Returns the added nodeID, -1 if failed.
|
||
|
Note:
|
||
|
NEVER EVER set AddToPathFinder to 1 when a calculation is in progress! THAT IS YOUR OWN RESPOSIBILITY IF IT HAPPENS.
|
||
|
*/
|
||
|
native ConnectNodes(NodeID_one,NodeID_two,AddToPathFinder = 0,direction = 0);
|
||
|
/*
|
||
|
Function:
|
||
|
ConnectNodes
|
||
|
Description:
|
||
|
This will connect two nodes stored in memory, same rules as for AddNode(Ex), it won't be available in path calculations.
|
||
|
When you connect NodeID_one with NodeID_two it will automaticly connect the opposite, no distance suplying is needed as the XYZ are supplied at node creation.
|
||
|
Parameters:
|
||
|
NodeID_one and NodeID_two as NodeID's
|
||
|
AddToPathFinder - if set to 1 it will also make sure the graph will be updated so when searching for a route it will be added to the list.
|
||
|
direction - you can choose to only connect nodeID one with nodeID two (One_To_Two = 1) or to connect them together (BOTH = 0)
|
||
|
Returns:
|
||
|
-1 - NodeOne is out of boundaries
|
||
|
-2 - NodeTwo is out of boundaries
|
||
|
-3 - NodeOne equals NodeTwo
|
||
|
-4 - NodeOne doesn't exist
|
||
|
-5 - NodeTwo doesn't exist
|
||
|
-6 - NodeOne already connected with NodeTwo
|
||
|
-7 - NodeTwo already connected with NodeOne
|
||
|
-8 - No more connection slots left on one of the nodes or direction does not equal 1 or 0
|
||
|
Anything above or equal to 0 means success (the NodeOne[connectid] is retuned).
|
||
|
Note:
|
||
|
NEVER EVER set AddToPathFinder to 1 when a calculation is in progress! THAT IS YOUR OWN RESPOSIBILITY IF IT HAPPENS.
|
||
|
*/
|
||
|
native NearestPlayerNode(playerid,Float:MaxDist=9999.99,IgnoreNodeID=(-1),UseAreas = 0);
|
||
|
/*
|
||
|
Function:
|
||
|
NearestPlayerNode
|
||
|
Description:
|
||
|
This function will get the closest player node, if you used AddNode(Ex) this nodes will also be considered.
|
||
|
Parameters:
|
||
|
playerid - the playerid to count from
|
||
|
MaxDist - the maximal distance to search from the player
|
||
|
IgnoreNodeID - this node ID will not be returned as the closest one, it will be ignored in the search.
|
||
|
UseAreas - if set to 0 it will go through all nodes in memory, else if to 1 it will do just the nodes in the area where the player is (not so accurate)
|
||
|
Returns the closest nodeID, -1 if no node Id is found in range
|
||
|
*/
|
||
|
native NearestNodeFromPoint(Float:X,Float:Y,Float:Z,Float:MaxDist=9999.99,IgnoreNodeID=(-1),UseAreas = 0);
|
||
|
/*
|
||
|
Function:
|
||
|
NearestNodeFromPoint
|
||
|
Description:
|
||
|
Same as NearestPlayerNode, but here you can supply an point instead of an playerid
|
||
|
Parameters:
|
||
|
XYZ - the position of the point to search from
|
||
|
MaxDist - the maximal distance to search from the player
|
||
|
IgnoreNodeID - this node ID will not be returned as the closest one, it will be ignored in the search.
|
||
|
UseAreas - if set to 0 it will go through all nodes in memory, else if to 1 it will do just the nodes in the area where the player is (not so accurate)
|
||
|
Returns the closest nodeID, -1 if no node Id is found in range
|
||
|
*/
|
||
|
native WriteNodesToFile(filename[]);
|
||
|
/*
|
||
|
Function:
|
||
|
WriteNodesToFile
|
||
|
Description:
|
||
|
Write all nodes, connections, contents of the memory into an loadable file,
|
||
|
can be used by ReadNodesFromFile later.
|
||
|
Parameters:
|
||
|
filename - the "path/filename.extension" to store the information in,
|
||
|
note that if you want to make a file in the scriptfiles folder you need to supply:
|
||
|
WriteNodesToFile("scriptfiles/your.file.name");
|
||
|
Returns 1 on success, 0 on failure.
|
||
|
*/
|
||
|
native ReadNodesFromFile(filename[]);
|
||
|
/*
|
||
|
Function:
|
||
|
ReadNodesFromFile
|
||
|
Description:
|
||
|
Read all nodes, connections, contents of the file into the memory,
|
||
|
This function will automaticly create nodes, connect them, create the virtual graph to search paths on
|
||
|
after it has been loaded into the memory.
|
||
|
Parameters:
|
||
|
filename - the "path/filename.extension" to read the information from,
|
||
|
note that if you want to read a file in the scriptfiles folder you need to supply:
|
||
|
ReadNodesFromFile("scriptfiles/your.file.name");
|
||
|
Warning:
|
||
|
It is not recommended to use this funcion, use at your own risk.
|
||
|
The plugin calls this function only at server startup, however I have included it for you.
|
||
|
You still can make aditional nodes with it (if you analyse the project source code correctly, you will know what I mean)
|
||
|
Returns 1 on success, 0 on failure.
|
||
|
*/
|
||
|
native GetNodePos(NodeID,&Float:X,&Float:Y,&Float:Z);
|
||
|
/*
|
||
|
Function:
|
||
|
GetNodePos
|
||
|
Description:
|
||
|
Get the XYZ position of the supplied NodeID
|
||
|
Parameters:
|
||
|
NodeID - The NodeID to get the XYZ from
|
||
|
(returns) X Y Z - The XYZ positions.
|
||
|
Returns 0 on failure (Out Of Range?), -1 if node doesn't exist, 1 on success.
|
||
|
*/
|
||
|
native CalculatePath(Start,End,routeID = 0,bool:CreatePolygon=false,Float:PolygonWidth=7.5,bool:GrabNodePositions=false);//Threaded calculating, everything done here will be added to an Queue
|
||
|
/*
|
||
|
Function:
|
||
|
CalculatePath
|
||
|
Description:
|
||
|
Submits information to the plugins' queue to calculate a path between the desired points
|
||
|
Parameters:
|
||
|
Start - The start NodeID
|
||
|
End - the destination NodeID
|
||
|
routeID (optional) - [custom integer supply] Here you can specify an integer value that will be passed
|
||
|
to the callback, along with the calculated path information, for example the PlayerID.
|
||
|
182:
|
||
|
CreatePolygon - creates a polygon around the path if set to true
|
||
|
PolygonWidth - the width from the node lines to the edge of the polygon
|
||
|
183:
|
||
|
GrabNodePositions - makes sure the NodePos[][] array is filled with usefull information.
|
||
|
|
||
|
Please note that this can increase the needed stack size extremely.
|
||
|
For storing the nodes, a polygon and all positions you need:
|
||
|
amount_of_nodes*4096*8+4096 bytes. The max amount of nodes I ever calculated wasn't higher than 1000. so:
|
||
|
3280896 bytes would be needed for the stack. Make sure to use
|
||
|
#pragma dynamic 4194304 //2^21 < 32772096 < 2^22, so we choose 2^22 bytes, this is 4MB of memory, so look out!
|
||
|
Also make sure you know how much heap you will need (global variables etc) and add this amount to the calculated value and round up to nearest power of two
|
||
|
Note:
|
||
|
if you will be using the routeID parameter for recognizing routes, make sure they all are unique,
|
||
|
once started route search cannot be aborted and will just be queued and the callback will still be called.
|
||
|
|
||
|
This function is Threaded, this means that if the CalculatePath search takes 3 seconds, it won't lagg your server.
|
||
|
Your server will continue to work normally.
|
||
|
|
||
|
Only the callback in the script which calls the plugin will get executed with this, if you do CalculatePath in Script1,
|
||
|
and have your callback in Script2 then it won't get executed, however if you need that, make in script1 CallRemoteFunction in the callback to call the other script.
|
||
|
|
||
|
Returns 1 on success, 0 when fails.
|
||
|
*/
|
||
|
native IsNodeIntersection(NodeID);
|
||
|
/*
|
||
|
Function:
|
||
|
IsNodeIntersection
|
||
|
Description:
|
||
|
Check if a node has 3 or more connections
|
||
|
Parameters:
|
||
|
NodeID - The ID of the node
|
||
|
Return 1 if true, 0 if false, -1 if node doesn't exist.
|
||
|
*/
|
||
|
native Float:GetAngleBetweenNodes(NodeID_one,NodeID_middle_aka_two,NodeID_three);
|
||
|
/*
|
||
|
Function:
|
||
|
GetAngleBetweenNodes (Returns Float)
|
||
|
Description:
|
||
|
Gets the angle between 3 nodes (2 connections/lines).
|
||
|
Parameters:
|
||
|
NodeID* - The ID of the node
|
||
|
Return 0.0 if one of the three nodes doesn't exist
|
||
|
*/
|
||
|
native GetConnectedNodes(NodeID);
|
||
|
/*
|
||
|
Function:
|
||
|
GetConnectedNodes
|
||
|
Description:
|
||
|
returns the amount of other nodes that are connected to this node, max is 5
|
||
|
Parameters:
|
||
|
NodeID* - The ID of the node
|
||
|
Returns amount of nodes connected (0 to 5), on failure -1.
|
||
|
*/
|
||
|
native GetNextEmptyNodeID();
|
||
|
/*
|
||
|
Function:
|
||
|
GetNextEmptyNodeID
|
||
|
Description:
|
||
|
returns the closest empty node ID (closest starting from 0 to up);
|
||
|
Note:
|
||
|
Example:
|
||
|
|
||
|
new id = GetNextEmptyNodeID();
|
||
|
if(id != -1)AddNodeEx(id,X,Y,Z);
|
||
|
|
||
|
However this example results in:
|
||
|
|
||
|
AddNode(X,Y,Z);
|
||
|
Returns -1 if no more available node slots.
|
||
|
*/
|
||
|
native GetQueueSize();
|
||
|
/*
|
||
|
Function:
|
||
|
GetQueueSize
|
||
|
Description:
|
||
|
gets the size of all queued path calculations to do.
|
||
|
Update R184: Returns amount of calculations pending
|
||
|
*/
|
||
|
native GetConnectedNodeID(NodeID,ConnectID);
|
||
|
/*
|
||
|
Function:
|
||
|
GetConnectedNodeID
|
||
|
Description:
|
||
|
gets the ID of an connection to NodeID, -1 if ConnectID has no connection, connectid must be between 0 and (MAX_CONNECTIONS-1), however there is OFB prevention check.
|
||
|
*/
|
||
|
native Float:GetConnectedNodeDistance(NodeID,ConnectID);
|
||
|
/*
|
||
|
Function:
|
||
|
GetConnectedNodeDistance (Returns Float)
|
||
|
Description:
|
||
|
gets the distance to a connected node (ConnectID) from the selected node (NodeID).
|
||
|
*/
|
||
|
native Float:GetDistanceBetweenNodes(NodeID_one,NodeID_two);
|
||
|
/*
|
||
|
Function:
|
||
|
GetDistanceBetweenNodes (Returns Float)
|
||
|
Description:
|
||
|
gets the distance between the two nodes (NOT VIA OTHER NODES, THIS JUST DOES THE X Y Z POSITION CALCULATION).
|
||
|
*/
|
||
|
native IsNodeInPathFinder(NodeID);
|
||
|
/*
|
||
|
Function:
|
||
|
IsNodeInPathFinder
|
||
|
Description:
|
||
|
Checks if NodeID is added to the routecalculator.
|
||
|
Returns -1 if the NodeID is invalid and 0 if node is not in the route calculator, 1 if yes.
|
||
|
*/
|
||
|
native GetRouteArray(ID,destination[],size = sizeof(destination));
|
||
|
/*
|
||
|
Function:
|
||
|
GetRouteArray
|
||
|
Description:
|
||
|
Stores an saved array with assigned ID to destination[]
|
||
|
Returns the amount of nodes in array at ID, Returns 0 if array is empty or ID doesn't exist.
|
||
|
*/
|
||
|
native GetRouteAtPos(ID,Array_Pos,&amount_of_nodes=0);
|
||
|
/*
|
||
|
Function:
|
||
|
GetRouteAtPos
|
||
|
Description:
|
||
|
Returns the NodeID in array[Array_Pos] at ID.
|
||
|
Optionally you can specify an variable to store the amount of nodes in it.
|
||
|
*/
|
||
|
native StoreRouteArray(amount_of_nodes,array[]);
|
||
|
/*
|
||
|
Function:
|
||
|
StoreRouteArray
|
||
|
Description:
|
||
|
Stores an array to the plugins vector memory,
|
||
|
returns the ID you can use in GetRouteArray or DeleteArray.
|
||
|
*/
|
||
|
native DeleteArray(ID);
|
||
|
/*
|
||
|
Function:
|
||
|
DeleteArray
|
||
|
Description:
|
||
|
Remove contents of the memory at ID.
|
||
|
*/
|
||
|
native AddExistingNodeToPathFinder(NodeID);
|
||
|
/*
|
||
|
Function:
|
||
|
AddExistingNodeToPathFinder
|
||
|
Description:
|
||
|
Adds an created node to the routecalculator.
|
||
|
Returns -1 if the NodeID is invalid and 0 if node id does not exist or is already added, 1 on success.
|
||
|
*/
|
||
|
native RemoveNode(NodeID);
|
||
|
/*
|
||
|
Function:
|
||
|
RemoveNode
|
||
|
Description:
|
||
|
Deletes an node from the memory, to use in Write data, nodes loaded into the calculator won't be deleted, connections too.
|
||
|
Returns -1 if the NodeID is invalid and 0 if node id does not exist, 1 on success.
|
||
|
*/
|
||
|
native DisconnectNodeFromNode(NodeIDOne,NodeIDTwo);
|
||
|
/*
|
||
|
Function:
|
||
|
DisconnectNodeFromNode
|
||
|
Description:
|
||
|
Disconnects Node ID One from Two, please see RemoveNode for information about the calculator memory.
|
||
|
Returns -1 if the NodeID is invalid and 0 if node id does not exist, 1 on success.
|
||
|
*/
|
||
|
native DisconnectAllFromNode(NodeID);
|
||
|
/*
|
||
|
Function:
|
||
|
DisconnectAllFromNode
|
||
|
Description:
|
||
|
Disconnects all other nodes from NodeID, and NodeID from them.
|
||
|
Returns -1 if the NodeID is invalid and 0 if node id does not exist, 1 on success.
|
||
|
*/
|
||
|
native DeleteNodeSystemAtNode(NodeID,array[],size = sizeof(array));
|
||
|
/*
|
||
|
Function:
|
||
|
DeleteNodeSystemAtNode
|
||
|
Description:
|
||
|
Get ALL nodeIDs that are CONNECTED IN ANY WAY, ALSO VIA OTHER NODES to NodeID into the array[].
|
||
|
Usefull for deleting big-not-connected chunks of nodes.
|
||
|
Returns 0 on failure, the array size on success.
|
||
|
*/
|
||
|
native GetNodeDirectionToConnect(NodeID,ConnectID);
|
||
|
/*
|
||
|
Function:
|
||
|
GetNodeDirectionToConnect
|
||
|
Description:
|
||
|
Get the direction this node[connectid] is connected in,
|
||
|
0 means that :
|
||
|
connectid is connected to nodeid
|
||
|
nodeid is connected to connectid
|
||
|
1 means that:
|
||
|
nodeid is connected to connectid
|
||
|
connectid is NOT connected to nodeid
|
||
|
2 means that:
|
||
|
nodeid is NOT connected to connectid
|
||
|
connectid is connected to nodeid
|
||
|
Note:
|
||
|
Usefull for making 'left and right' road sides.
|
||
|
Returns -1 on failure.
|
||
|
*/
|
||
|
native SetNodeDirectionToConnect(NodeID,ConectID,Direction);
|
||
|
/*
|
||
|
Function:
|
||
|
SetNodeDirectionToConnect
|
||
|
Description:
|
||
|
See GetNodeDirectionToConnect, this SETS the direction manually.
|
||
|
It automaticly get the nodeID of 'ConectID' and sets the connection_direction to the good value.
|
||
|
Returns 0 on failure, 1 on success.
|
||
|
*/
|
||
|
native NodeExists(NodeID);
|
||
|
/*
|
||
|
Function:
|
||
|
NodeExists
|
||
|
Description:
|
||
|
Checks if the given nodeID exists in the memory.
|
||
|
Returns 0 if not, 1 if yes, -1 on failure.
|
||
|
*/
|
||
|
native RemoveAllRouteIDFromQueue(/*routeid*/);
|
||
|
/*
|
||
|
Function:
|
||
|
RemoveAllRouteIDFromQueue
|
||
|
Description:
|
||
|
Removes all pending calculations with 'routeid' from the queue.
|
||
|
R181 update: clears the WHOLE queue.
|
||
|
Returns -1 if the Queue is locked/accessed, else it returns the amount of entries deleted.
|
||
|
R181 update: always returns 1.
|
||
|
*/
|
||
|
forward GPS_WhenRouteIsCalculated(routeid,node_id_array[],amount_of_nodes,Float:distance,Float:Polygon[],Polygon_Size,Float:NodePosX[],Float:NodePosY[],Float:NodePosZ[]);//Every processed Queue will be called here
|
||
|
/*
|
||
|
Called when a path finding calculation is done.
|
||
|
|
||
|
routeid - the id you specified for recognition of calls
|
||
|
node_id_array - this array is up to 1792 cells long
|
||
|
it is build from the following information:
|
||
|
|
||
|
node_id_array[0] ... node_id_array[1791] -
|
||
|
all points (Node ID's) on the route
|
||
|
in following order:
|
||
|
from start, to end
|
||
|
amount_of_nodes - this is the amount of nodes the total path is, is set to 0 when it's impossible to calculate the route.
|
||
|
distance - the total distance all nodes take, rounded to an integer, is -1 if it's impossible to calculate the route.
|
||
|
so you can do:
|
||
|
public GPS_WhenRouteIsCalculated(...)
|
||
|
{
|
||
|
for(new i = 0; i < amount_of_nodes; ++i)
|
||
|
{
|
||
|
printf("Point(%d)=NodeID(%d), Position(X;Y;Z):{%f;%f;%f}",i,node_id_array[i:NodePosX[i],:NodePosY[i],:NodePosZ[i]);
|
||
|
}
|
||
|
return 1;
|
||
|
}
|
||
|
Polygon - the polygon around the path, only given if you specified it at calculatepath
|
||
|
Polygon_Size/2 = amount of points in polygon
|
||
|
*/
|
||
|
forward OnPlayerClosestNodeIDChange(playerid,old_NodeID,new_NodeID);
|
||
|
/*
|
||
|
Called when a player's closest nodeID changes.
|
||
|
|
||
|
playerid - the id of the player
|
||
|
old_NodeID and new_NodeID - the node ID's, old and new.
|
||
|
new_NodeID is 'now' the closest node ID.
|
||
|
|
||
|
*/
|
||
|
native GetGPSdatVersion();
|
||
|
/*
|
||
|
Function:
|
||
|
GetGPSdatVersion
|
||
|
Description:
|
||
|
Gets the file version of GPS.dat
|
||
|
Returns -1 if getting the GPS.dat version failed, else it returns the version number, this function is only available since package 162
|
||
|
*/
|
||
|
native GetPluginVersion();
|
||
|
/*
|
||
|
Function:
|
||
|
GetPluginVersion
|
||
|
Description:
|
||
|
Gets the plugin version
|
||
|
Returns the plugin version, this function is only available since package 162
|
||
|
*/
|
||
|
stock GetIncludeVersion()
|
||
|
{
|
||
|
return INCLUDE_VERSION;
|
||
|
}
|
||
|
/*
|
||
|
Function:
|
||
|
GetIncludeVersion
|
||
|
Description:
|
||
|
Gets the include file version
|
||
|
Returns the inclde file version, this function is only available since package 162
|
||
|
*/
|
||
|
native gps_AddPlayer(playerid);
|
||
|
/*
|
||
|
Function:
|
||
|
gps_AddPlayer
|
||
|
Description:
|
||
|
adds the player to the update check.
|
||
|
Returns 1 on success, 0 on failure, 2 if player already in list.
|
||
|
*/
|
||
|
native gps_RemovePlayer(playerid);
|
||
|
/*
|
||
|
Function:
|
||
|
gps_RemovePlayer
|
||
|
Description:
|
||
|
removes the player from the update check.
|
||
|
Returns 1 on success, 0 on failure.
|
||
|
*/
|
||
|
native GetRouteArrayFromTo(ID,From,To,dest[],size=sizeof(dest));
|
||
|
/*
|
||
|
Function:
|
||
|
GetRouteArrayFromTo
|
||
|
Description:
|
||
|
Please see GetRouteArray, the only difference is you can specify an range, from to, to extract.
|
||
|
Returns amount of nodes put into dest[].
|
||
|
*/
|
||
|
native GetRouteArraySize(ID);
|
||
|
/*
|
||
|
Function:
|
||
|
GetRouteArraySize
|
||
|
Description:
|
||
|
returns the amount of nodes in the <ID>array.
|
||
|
Returns returns the amount of nodes in the <ID>array.
|
||
|
*/
|
||
|
native GetNextNodeInArray(ArrayID,mark_done = 0);//return nodeid, else -1
|
||
|
/*
|
||
|
Function:
|
||
|
GetNextNodeInArray
|
||
|
Description:
|
||
|
returns the first node with mark_done == 0 from ArrayID , else -1 on failure
|
||
|
*/
|
||
|
native IsNodeInArray(ArrayID,NodeID);//Return 1 else 0
|
||
|
/*
|
||
|
Function:
|
||
|
IsNodeInArray
|
||
|
Description:
|
||
|
returns 1 if nodeid is in ArrayID, else 0
|
||
|
*/
|
||
|
native SetNodeIDMarkInArray(ArrayID,NodeID,mark_done,mark_all_prevous_same=0);//return 1 on success
|
||
|
/*
|
||
|
Function:
|
||
|
SetNodeIDMarkInArray
|
||
|
Description:
|
||
|
Marks the nodeID in ArrayID to the value you set (1 or 0) eg player already visited the nodeID
|
||
|
mark_all_prevous_same if set to 1 will mark all NodeID's before the selected NodeID@index also to the same value you set mark_done to.
|
||
|
*/
|
||
|
native SetIndexMarkInArray(ArrayID,Index,mark_done,mark_all_prevous_same=0);//returns 1 on on success
|
||
|
/*
|
||
|
Function:
|
||
|
SetIndexMarkInArray
|
||
|
Description:
|
||
|
Marks the Index (instead check if nodeid, just Marked[index] = mark_done) in ArrayID to the value you set (1 or 0) eg player already visited the Index according to NodeID
|
||
|
mark_all_prevous_same if set to 1 will mark all NodeID's before the selected NodeID@index also to the same value you set mark_done to.
|
||
|
*/
|
||
|
native EnableOnPlayerNodeIDChange();
|
||
|
/*
|
||
|
Function:
|
||
|
EnableOnPlayerNodeIDChange
|
||
|
Description:
|
||
|
Enables OnPlayerClosestNodeIDChange callback.
|
||
|
*/
|
||
|
native DisableOnPlayerNodeIDChange();
|
||
|
/*
|
||
|
Function:
|
||
|
DisableOnPlayerNodeIDChange
|
||
|
Description:
|
||
|
Disables OnPlayerClosestNodeIDChange callback.
|
||
|
*/
|
||
|
native NodeChangeScanAllNodes();
|
||
|
/*
|
||
|
Function:
|
||
|
NodeChangeScanAllNodes
|
||
|
Description:
|
||
|
Goes through all nodes when checking the closest nodeID in the callback.
|
||
|
*/
|
||
|
native NodeChangeScanAreaOnly();
|
||
|
/*
|
||
|
Function:
|
||
|
NodeChangeScanAreaOnly
|
||
|
Description:
|
||
|
Goes only through nodes in player area when checking the closest nodeID in the callback.
|
||
|
*/
|
||
|
native GetNodeIDMarkInArray(ArrayID,NodeID);//return 1 on true, 0 on false, -1 on failure
|
||
|
/*
|
||
|
Function:
|
||
|
GetNodeIDMarkInArray
|
||
|
Description:
|
||
|
The get function of the Set equilivant
|
||
|
*/
|
||
|
native GetIndexMarkInArray(ArrayID,Index);//return 1 on true, 0 on false, -1 on failure
|
||
|
/*
|
||
|
Function:
|
||
|
GetIndexMarkInArray
|
||
|
Description:
|
||
|
The get function of the Set equilivant
|
||
|
*/
|
||
|
native ChangeOPCNIURate(TickRate = 55);
|
||
|
/*
|
||
|
Function:
|
||
|
ChangeOPCNIURate
|
||
|
Description:
|
||
|
Sets the OnPlayerClosestNodeIDChanged callback update rate in ticks
|
||
|
*/
|
||
|
native NearestNodeFromPointInArray(ArrayID,Float:X,Float:Y,Float:Z,Float:MaxDist=9999.99,IgnoreNodeID=(-1),IgnoreMarkedNodes=0);
|
||
|
/*
|
||
|
Function:
|
||
|
NearestNodeFromPointInArray
|
||
|
Description:
|
||
|
Gets the closest node to the specified XYZ coordinates which are in the route array ArrayID.
|
||
|
IgnoreNode ignores the specified node, IgnoreMarkedNodes makes sure it skips nodes that are marked in the array
|
||
|
Returns -1 if there is no closest node to this point (eg all nodes are marked, no such array id or other problems)
|
||
|
*/
|
||
|
native NearestNodeFromPlayerInArray(playerid,ArrayID,Float:MaxDist=9999.99,IgnoreNodeID=(-1),IgnoreMarkedNodes=0);
|
||
|
/*
|
||
|
Function:
|
||
|
NearestNodeFromPlayerInArray
|
||
|
Description:
|
||
|
Gets the closest node to the specified player in the route array ArrayID.
|
||
|
IgnoreNode ignores the specified node, IgnoreMarkedNodes makes sure it skips nodes that are marked in the array
|
||
|
Returns -1 if there is no closest node to this point (eg all nodes are marked, no such array id or other problems)
|
||
|
*/
|
||
|
native RebuildGraph();
|
||
|
/*
|
||
|
Function:
|
||
|
RebuildGraph
|
||
|
Description:
|
||
|
Rebuilds the internal node data for the pathfinder, usefull for use after AddNode without AddToPathFinder and ConnectNodes, change node positions, etc.
|
||
|
Returns:
|
||
|
1 on success, 0 on failure
|
||
|
*/
|
||
|
native GetAmountOfFreeNodeSlots();
|
||
|
/*
|
||
|
Function:
|
||
|
GetAmountOfFreeNodeSlots
|
||
|
Description:
|
||
|
Gets the amount of nodes which are available for creation
|
||
|
Returns:
|
||
|
amount of nodes left to create
|
||
|
*/
|
||
|
forward GPS_GetPlayerPosEnablerUn();
|
||
|
public GPS_GetPlayerPosEnablerUn()
|
||
|
{
|
||
|
new Float:____GPS_GetPlayerPosEnablerUn;
|
||
|
GetPlayerPos(0,____GPS_GetPlayerPosEnablerUn,____GPS_GetPlayerPosEnablerUn,____GPS_GetPlayerPosEnablerUn);
|
||
|
return 1;
|
||
|
}
|