[FilterScript] xNavigator - Navigation System ~ with Direction Arrow!
#1

Hi everyone,

With this system you can use a nice navigation feature on your server.
In addition to marking the selected location on the map, you can also see the direction of the location by the arrow on the top of the vehicle.


» Features
  • You can easily add your locations by typing {"Location Name", X, Y, Z} in the location list in the script.
  • You can open and use the navigation by typing /nav in the game.
  • After selecting a location, the selected position is marked on the map, and also you can see the direction of the location by the arrow that appears on the vehicle.
  • You can also see how much distance to the destination with textdraw, which is shown on the screen.
  • Navigation closes when you get out of the car, when you type /navclose or when you reach the destination.
» Images






» Download

» MediaFire «


» Note

I used zcmd as a command system when coding the system. I’ve also added it in the rar.
Reply
#2

It reminds me of the Need For Speed Underground 2 for some reason haha, even tho the arrow in that game was blue as far as I remember. You done a good job.
Reply
#3

Never check if floats are equal to a specific value! Always <= or >=

Code:
if (yc == 0.0 || xc == 0.0)
	{
		if(yc == 0 && xc > 0) angle = 0.0;
		else if(yc == 0 && xc < 0) angle = 180.0;
		else if(yc > 0 && xc == 0) angle = 90.0;
		else if(yc < 0 && xc == 0) angle = 270.0;
		else if(yc == 0 && xc == 0) angle = 0.0;
	}
Why bother making extra variables and assignments here? This can be useful when you have more code but this is just a short bit of code why bother?

Code:
	pPos[0] = NavData[pNavID[playerid]][NAV_X];
	pPos[1] = NavData[pNavID[playerid]][NAV_Y];
	pPos[2] = NavData[pNavID[playerid]][NAV_Z];
Where is OnFilterScriptExit() with clean up code?

How do you know that will work for all vehicles and look good?
Code:
AttachObjectToVehicle(ok[playerid], GetPlayerVehicleID(playerid), 0.000000, 0.000000, 1.399998, 0.000000, 90.0, rot + 180);
Alright that is nice but what about checking if the player is a driver?
Code:
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, -1, "{FF0000}<!> You must be in a vehicle to use navigation!");
Always define your dialog id's! That way if there is a collision all you have to do is change the id once.
Code:
ShowPlayerDialog(playerid, 112, DIALOG_STYLE_LIST, "[Navigation] Locations", string, "Select", "Close");
Critical issue here.
Code:
if(IsValidObject(ok[playerid])) DestroyObject(ok[playerid]);
If you have the dialog open and you exit a vehicle that object will be destroyed. Now if someone creates an object for any reason and it takes that id and it so happens the player was put back into a vehicle then there is the potential for objects to be deleted.

Always avoid creating player textdraws when a player connects. Reason being, maybe they disconnect. Maybe they fail to log in. What is the point of creating textdraws that majority of the time probably won't be used? Create when a player types a command or when a player actually logs in (gamemodes).

Code:
public OnPlayerConnect(playerid)
{
	NAVpTD[playerid] = CreatePlayerTextDraw(playerid, 405.724487, 415.166564, "Distance Left: ~y~0000.00m");
	PlayerTextDrawLetterSize(playerid, NAVpTD[playerid], 0.179326, 1.109999);
	PlayerTextDrawAlignment(playerid, NAVpTD[playerid], 1);
	PlayerTextDrawColor(playerid, NAVpTD[playerid], -1);
	PlayerTextDrawSetShadow(playerid, NAVpTD[playerid], 0);
	PlayerTextDrawSetOutline(playerid, NAVpTD[playerid], 0);
	PlayerTextDrawBackgroundColor(playerid, NAVpTD[playerid], 255);
	PlayerTextDrawFont(playerid, NAVpTD[playerid], 2);
	PlayerTextDrawSetProportional(playerid, NAVpTD[playerid], 1);
	PlayerTextDrawSetShadow(playerid, NAVpTD[playerid], 0);
	return 1;
}
Reply
#4

Quote:
Originally Posted by Pottus
View Post
Why bother making extra variables and assignments here? This can be useful when you have more code but this is just a short bit of code why bother?

Code:
	pPos[0] = NavData[pNavID[playerid]][NAV_X];
	pPos[1] = NavData[pNavID[playerid]][NAV_Y];
	pPos[2] = NavData[pNavID[playerid]][NAV_Z];
Where is OnFilterScriptExit() with clean up code?
I wrote this system a long time ago for my gamemode. Now I took it from the gm. So there could be useless codes that overlooked. Sorry about them. Thanks for the info. I’ll be more carefull next time.
Reply
#5

Quote:
Originally Posted by XpDeviL
View Post
I wrote this system a long time ago for my gamemode. Now I took it from the gm. So there could be useless codes that overlooked. Sorry about them. Thanks for the info. I’ll be more carefull next time.
There is a lot in this most of it is harmless but a few critical mistakes.
Reply
#6

Quote:
Originally Posted by Pottus
View Post
There is a lot in this most of it is harmless but a few critical mistakes.
Nice analyse by the way I should use you as my compiler
Reply
#7

Quote:
Originally Posted by XpDeviL
View Post
Nice analyse by the way I should use you as my compiler
Yeah I am really good at knowing what to look for when looking at a script of where the break points/bugs are.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)