Areacheck
From SA-MP
Ok, i will show everybody here, how to create a function to check if a player, enters an area.
First, you should now, that this script, works like this...
_________________ Point 2;
| |
| This is |
| the area that |
| you want |
| to define! |
|________________|
Point 1;
Now, this script will be useful, in situations where you want to detect if a player has entered in certain area, like for example and "Admin area".
I will show you some photos of how to do this
Ok, here you have a photo of the Golf Club located on Las Venturas. In my case, I made this area privated, with some REALLY nice tuned cars inside, only for Admin use. So, how to do this?. Easy.
The first thing to do, is to get the X and Y coordinates of the WHITE CROSS and the GREEN CROSS (the ones that defines our area corner.
One easy way to get those coordinates, is to add in your gamemode/filterscript a little command to get player position, like this.
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/pos", cmdtext, true, 10) == 0)
{
new string1[256];
new Float:X,Float:Y,Float:Z;
GetPlayerPos(playerid,X,Y,Z);
format(string1,sizeof(string1),"Position = X: %.0f , Y: %.0f , Z: %.0f",X,Y,Z);
SendClientMessage(playerid,COLOR_GREEN,string1);
return 1;
}
return 0;
}
Now, when you type /pos. You will get a message saying "Position = number, number, number". And then, with that data, we can move on to the next step.
Now that we know how to retrieve player's position. We should take our player to the White and Green crosses, and get the X and Y coordinate of each one. Once you finish this, we're ready to script the function.
Ok, this is the first you need to add, under the #define functions on your gamemode
forward isPlayerInArea();
That tells the game, that you're going to use a new public declaration.
Nest thing whe should add, is the creation of the timer which is going to check if a player has entered the area.
SetTimer("isPlayerInArea",1000, 1);
Ok, we have just set the timer to check if a player entered the area every 1 second.
Next we're going to create the public declaration.
public isPlayerInArea()
{
new Float:X, Float:Y, Float:Z; //We use this to store player position
for(new i=0; i < MAX_PLAYERS; i++) //This line defines a name for all player, the name is "i"
{
GetPlayerPos(i, X, Y, Z); //Here we are storing the player position on the variables X, Y, and Z defined previously
if (X <= -3915 && X >= -3694 && Y <= 401 && Y >= 37)
/* This line is the important one!. Here, is where you change those numbers, by the ones
you get from the /pos command. As you can see, those coordinates, are only the X and Y ones, the Z
doesnt matter*/
{
SetPlayerHealth(i, -999999.9); //This will ensure, that our player gets killed if he tries to enter
}
}
}
Ok, now with this, if a player enters the area, between X= -3915 and -3694 || Y= 401 and 37. He will die.
Ok, that's all, and I really hope that this tutorial would help someone.
Web

