Respawn at nearest Hospital script not working correctly -
Aerotactics - 22.02.2014
Quote:
The script works, but when I die right next to one hospital, it will still respawn me at the other hospital. Changing distance doesn't really do anything except anything over 2000 and it will go to hospital 1, or under 2000 and it will go to hospital 2, or something like that.
pawn Код:
stock SpawnToHospital(playerid) { dead[playerid] = 0; static const Float:hspawns[][4] = { {2034.1670,-1406.0623,17.2181,150.4297}, {1177.3391,-1324.2300,14.0658,268.3749} }; new Float:spawndist[2]; // Change to the number of hospital spawnpoints you use. new Float:distance = 1000.0, closestspawn; spawndist[0] = GetPlayerDistanceFromPoint(playerid, 2034.1670,-1406.0623,17.2181); spawndist[1] = GetPlayerDistanceFromPoint(playerid, 1177.3391,-1324.2300,14.0658); for(new i = 0; i < sizeof(spawndist); i++) { if(spawndist[i] < distance) distance = spawndist[i], closestspawn = i; } SetPlayerPos(playerid, hspawns[closestspawn][0], hspawns[closestspawn][1], hspawns[closestspawn][2]); SetPlayerFacingAngle(playerid, hspawns[closestspawn][3]); SetCameraBehindPlayer(playerid); }
My new issue is that I only spawn at one of the 2 hospitals after a script revision:
pawn Код:
stock SpawnToHospital(playerid) { dead[playerid] = 0; static const Float:hspawns[][4] = { {2034.1670,-1406.0623,17.2181,150.4297}, {1177.3391,-1324.2300,14.0658,268.3749} }; new Float:spawndist[2]; // Change to the number of hospital spawnpoints you use. new closestspawn; spawndist[0] = GetPlayerDistanceFromPoint(playerid, 2034.1670,-1406.0623,17.2181); spawndist[1] = GetPlayerDistanceFromPoint(playerid, 1177.3391,-1324.2300,14.0658); if(spawndist[0] < spawndist[1]) { closestspawn = 0; } else if (spawndist[0] > spawndist[1]) { closestspawn = 1; } SetPlayerPos(playerid, hspawns[closestspawn][0], hspawns[closestspawn][1], hspawns[closestspawn][2]); SetPlayerFacingAngle(playerid, hspawns[closestspawn][3]); SetCameraBehindPlayer(playerid); return 1; }
|
After yet another script revision, I still come up with the same results -- sending me to hospital 1, or the second hospital. I'm thinking of just searching for a new script bit since I can't seem to get this one to work. I checked my coords and they are not the issue:
pawn Код:
stock SpawnToHospital(playerid)
{
dead[playerid] = 0;
static const Float:hspawns[][4] =
{
{2034.1670,-1406.0623,17.2181,150.4297},
{1177.3391,-1324.2300,14.0658,268.3749}
};
new Float:spawndist[2]; // Change to the number of hospital spawnpoints you use.
new closestspawn;
spawndist[0] = GetPlayerDistanceFromPoint(playerid, 2034.1670,-1406.0623,17.2181);
spawndist[1] = GetPlayerDistanceFromPoint(playerid, 1177.3391,-1324.2300,14.0658);
if (spawndist[0] <= spawndist[1])
{
spawndist[0] = closestspawn;
closestspawn = 0;
print("hos 0 is closer");
}
if (spawndist[1] <= spawndist[0])
{
spawndist[1] = closestspawn;
closestspawn = 1;
print("hos 1 is closer");
}
SetPlayerPos(playerid, hspawns[closestspawn][0], hspawns[closestspawn][1], hspawns[closestspawn][2]);
SetPlayerFacingAngle(playerid, hspawns[closestspawn][3]);
SetCameraBehindPlayer(playerid);
return 1;
}
Re: Respawn at nearest Hospital script not working correctly -
]Rafaellos[ - 22.02.2014
Create 2 more checks that will check if he is in range at 100 or something for each hospital, if is not then will check with the code that you have above. This is will be a possible fix I think, not that great, but something untill you find the main problem.
Re: Respawn at nearest Hospital script not working correctly -
RajatPawar - 22.02.2014
Instead of a check against 1000 units of distance, why don't you search for the closest hospital within THEMSELVES? Use sorting techniques or make your own, it's not difficult!
1) Get distance of each hospital from player
2) In a loop, get the smallest distance at index 0 by sorting (or simply temp vars)
3) Spawn at gArray[ 0 ][ 0 ]....
Re: Respawn at nearest Hospital script not working correctly -
Aerotactics - 22.02.2014
Quote:
Originally Posted by ]Rafaellos[
Create 2 more checks that will check if he is in range at 100 or something for each hospital, if is not then will check with the code that you have above. This is will be a possible fix I think, not that great, but something untill you find the main problem.
|
Quote:
Originally Posted by Rajat_Pawar
Instead of a check against 1000 units of distance, why don't you search for the closest hospital within THEMSELVES? Use sorting techniques or make your own, it's not difficult!
1) Get distance of each hospital from player
2) In a loop, get the smallest distance at index 0 by sorting (or simply temp vars)
3) Spawn at gArray[ 0 ][ 0 ]....
|
I basically used Rajat's idea by dumbing the code down to something I understood. It's still only spawning me at 1 of the 2 hospitals. Updating the topic.
Re: Respawn at nearest Hospital script not working correctly -
Aerotactics - 22.02.2014
Still need help, bump.
AW: Respawn at nearest Hospital script not working correctly -
Nero_3D - 22.02.2014
The code seems fine only, it would only break if you are over 1000 units away
You could at least try to print both distances and check for yourself why your code did what it did
That would be a version which uses an additional function
Basically put everything into an function if you want to reuse it more than once
pawn Код:
stock SpawnToHospital(playerid) {
static const Float: hspawns[][] = {
{2034.1670,-1406.0623,17.2181,150.4297},
{1177.3391,-1324.2300,14.0658,268.3749}
};
new
closest = GetClosestFromPlayer(playerid, hspawns)
;
if(closest != -1) {
dead[playerid] = false;
SetPlayerPos(playerid, hspawns[closest][0], hspawns[closest][1], hspawns[closest][2]);
SetPlayerFacingAngle(playerid, hspawns[closest][3]);
return SetCameraBehindPlayer(playerid);
}
return false;
}
pawn Код:
GetClosestFromPlayer(playerid, const {_, Float}: data[][], Float: distance = 0.0, size = sizeof data) {
if((distance = GetPlayerDistanceFromPoint(playerid, data[0][0], data[0][1], data[0][2]))) {
new
closest,
Float: tmp
;
while(--size) {
tmp = GetPlayerDistanceFromPoint(playerid, data[size][0], data[size][1], data[size][2]);
if(tmp < distance) {
distance = tmp;
closest = size;
}
}
return closest;
}
return -1;
}
Re: Respawn at nearest Hospital script not working correctly -
Aerotactics - 22.02.2014
Ugh, why do you write your script in that style lol it makes my scripting OCD kick in. It also seems like an overuse of stocks if I only need 2 or 3 hospital spawns. Thanks for your help though.
Re: Respawn at nearest Hospital script not working correctly -
Aerotactics - 22.02.2014
Updated Issue again.