PDA

View Full Version : [Help] Hospital System


Arxalan
11/01/2015, 04:59 AM
Hello , i want to know how to make Hospital system so that when player die he spawn at front of nearest hospital ?

Michael B
11/01/2015, 05:42 AM
You could use this filterscript, which is made by Rodney Francalim.

Link: On SA-MP Scripts, URL: /post/Hospital_system-Rodney_Francalim-filterscript_systems-10508/

P.S. SA-MP forums block the link, so you will have to introduce it manually.

Arxalan
11/01/2015, 06:22 AM
Give me the full link .

CalvinC
11/01/2015, 08:19 AM
It's easy making him spawn infront of the hospital.

Alright, first we need to create a variable so we can check if the player died before he spawned, by putting this at the top of our script(underneath the includes):
new Hospital[MAX_PLAYERS];

Then we store "1" in the variable when a player dies.
public OnPlayerDeath(playerid, killerid, reason)
{
Hospital[playerid] = 1;
return 1;
}

Then when the player spawns, we check if the variable is set to "1".
And if it is, then we set the players position infront of the hospital, and we set the variable to "0" again.
public OnPlayerSpawn(playerid)
{
if(Hospital[playerid] == 1)
{
SetPlayerPos(playerid, 1172.8644, -1323.3914, 15.3996); // You can replace this with any coordinates you want, i placed it at the All Saints General Hospital
Hospital[playerid] == 0;
}
return 1;
}

Arxalan
11/01/2015, 08:28 AM
Setting it to single hospital is easy but i want it to multiple i mean player will spawn at nearest hospital e.g. San Fierro hospital if he is in sf or LV hospital etc if he is in lv.

CalvinC
11/01/2015, 08:56 AM
Oh sorry, i misread your post then.
Create a new variable again then:
new ClosestHospital[MAX_PLAYERS];
Then create a switch to check what has been put in the variable, under OnPlayerSpawn:
public OnPlayerSpawn(playerid)
{
switch(ClosestHospital[playerid])
{
case 0: SetPlayerPos(playerid, /* Insert coordinates of hospital 0*/);
case 1: SetPlayerPos(playerid, /* Insert coordinates of hospital 1*/);
case 2: SetPlayerPos(playerid, /* Insert coordinates of hospital 2*/);
}
return 1;
}
Then we need to check which is the closest of these 3 hospitals, and then store 0, 1 or 2 in the variable.
We can do that with this stock:
stock RespawnToHospital(playerid)
{
new Float:Hospital[3]; // Creates 3 floats, which we then use underneath to check the distance the player has from those points
Hospital[0] = GetPlayerDistanceFromPoint(playerid,/* Insert coordinates of hospital 0 here */);
Hospital[1] = GetPlayerDistanceFromPoint(playerid, /* Insert coordinates of hospital 1 here */);
Hospital[2] = GetPlayerDistanceFromPoint(playerid, /* Insert coordinates of hospital 2 here */);
if(Hospital[0] <= Hospital[1] && Hospital[0] <= Hospital[3]) // We use this to detect if hospital 0 is closer than both other
{
ClosestHospital[playerid] = 0; // We store "0" in the variable if hospital 0 is closest
}
else if(Hospital[1] <= Hospital[0] && Hospital[1] <= Hospital[3]) // If hospital 0 isn't closest, we check hospital 1, if that's closer than both the other
{
ClosestHospital[playerid] = 1; // We store "1" in the variable if hospital 0 is closest
}
else if(Hospital[2] <= Hospital[0] && Hospital[2] <= Hospital[1]) // If none of those are closest, we check if hospital 2 is closest.
{
ClosestHospital[playerid] = 2; // We store "2" in the variable if hospital 0 is closest
}
return 1;
}
And then we call this stock by putting this under OnPlayerDeath:
RespawnToHospital(playerid);

Arxalan
11/01/2015, 12:53 PM
What to Add in GetPlayerDistanceFromPoint?

CalvinC
11/01/2015, 03:16 PM
The coordinates of the hospitals.