[Pedido] Morrer e ir para o hospital mais prуximo.
#1

Pessoal tenho um sistema de hospital em meu servidor, porйm devido modificaзхes preciso colocar pra quando o jogador morrer ele ir para o hospital mais prуximo e eu sei que deve-se usar a funзгo GetPlayerDistanceFromPoint, porйm nem sei como fazer por causa do meu sistema de hospital.

Estas variбveis irб informar em qual hospital o jogador irб apуs morrer.
pawn Код:
Cidade_Que_Morreu[playerid] = 1; // Los Santos
    Cidade_Que_Morreu[playerid] = 2; // San Fierro
    Cidade_Que_Morreu[playerid] = 3; // Las Venturas
Abaixo estгo a posiзгo das entradas do hospital.
pawn Код:
1172.0776, -1323.3926, 15.4031 // Los Santos
1610.9330, 1824.2340, -92.7844 // San Fierro
1607.4191, 1815.4803, 10.8203 // Las Venturas
Quem poder me ajudar ou fazer este cуdigo, ficaria bem grato
Reply
#2

Nгo tenho ideia se vai funcionar, ou nгo.

PHP код:
new Cidade_Que_Morreu[MAX_PLAYERS];

public 
OnPlayerDeath(playeridkilleridreason)
{
    if(
IsPlayerInLosSantos(playerid))
    {    
        
Cidade_Que_Morreu[playerid] = 1// Los Santos
    
}
    if(
IsPlayerInSanFierro(playerid))
    {
        
Cidade_Que_Morreu[playerid] = 2// SanFierro
    
}
    if(
IsPlayerInLasVenturas(playerid))
    {
        
Cidade_Que_Morreu[playerid] = 3// Las Venturas
    
}
    return 
1;
}

static 
stock IsPlayerInLosSantos(playerid)
{
    new 
Float:x,Float:y,Float:z;
    
GetPlayerPos(playeridxyz);
    if(
>= 44.60 && >= -2892.90 && <= 2997.00 && <= -768.00) return 1;
    else return 
0;
}

static 
stock IsPlayerInLasVenturas(playerid)
{
    new 
Float:x,Float:y,Float:z;
    
GetPlayerPos(playeridxyz);
    if(
>= 869.40 && >= 596.30 && <= 2997.00 && <= 2993.80) return 1;
    else return 
0;
}

static 
stock IsPlayerInSanFierro(playerid)
{
    new 
Float:x,Float:y,Float:z;
    
GetPlayerPos(playeridxyz);
    if(
>= -2954.502 && >=  -3012.892 && <= -957.5858 && <= 1436.379) return 1;
    else return 
0;

Reply
#3

Quote:
Originally Posted by IlanZ
Посмотреть сообщение
Nгo tenho ideia se vai funcionar, ou nгo.

PHP код:
new Cidade_Que_Morreu[MAX_PLAYERS];
public 
OnPlayerDeath(playeridkilleridreason)
{
    if(
IsPlayerInLosSantos(playerid))
    {    
        
Cidade_Que_Morreu[playerid] = 1// Los Santos
    
}
    if(
IsPlayerInSanFierro(playerid))
    {
        
Cidade_Que_Morreu[playerid] = 2// SanFierro
    
}
    if(
IsPlayerInLasVenturas(playerid))
    {
        
Cidade_Que_Morreu[playerid] = 3// Las Venturas
    
}
    return 
1;
}
static 
stock IsPlayerInLosSantos(playerid)
{
    new 
Float:x,Float:y,Float:z;
    
GetPlayerPos(playeridxyz);
    if(
>= 44.60 && >= -2892.90 && <= 2997.00 && <= -768.00) return 1;
    else return 
0;
}
static 
stock IsPlayerInLasVenturas(playerid)
{
    new 
Float:x,Float:y,Float:z;
    
GetPlayerPos(playeridxyz);
    if(
>= 869.40 && >= 596.30 && <= 2997.00 && <= 2993.80) return 1;
    else return 
0;
}
static 
stock IsPlayerInSanFierro(playerid)
{
    new 
Float:x,Float:y,Float:z;
    
GetPlayerPos(playeridxyz);
    if(
>= -2954.502 && >=  -3012.892 && <= -957.5858 && <= 1436.379) return 1;
    else return 
0;

Obrigado, mas isso eu jб tenho. Й que em Los Santos possui um hospital e o posto mйdico, no caso o jogador que morre-se em los santos iria pra coordenada que estivesse mais perto dele, isso nгo vai ajudar.
Reply
#4

Separa Los Santos em duas GZ de acordo com o lado do hospital
Reply
#5

Quote:
Originally Posted by IlanZ
Посмотреть сообщение
Separa Los Santos em duas GZ de acordo com o lado do hospital
Isso seria uma boa ideia, mas em a proximidade seria bem mais fбcil para as outras cidades como Tierra roubada, imagine tem que ficar separando isso iria dar um trabalho ruim sabendo que no caso de aproximidade facilita muito e nгo vou colocar apenas esses 3 pontos de hospitais, nas cidades pequenas tambйm.
Reply
#6

O que vocк quer й que o jogador vб para o hospital mais prуximo da cidade que ele estб?
Se sim:
1. Salve todas as coordenadas dos hospitais em uma array separando por cidades;
2. Quando ele morrer obtenha qual cidade ele morreu e faзa um loop pelas coordenadas desta cidade;
3. Veja qual destas posiзхes estб mais perto com a sua funзгo GetPlayerDistanceFromPoint e manda ele pro mais prуximo;

Se vocк quiser que ele vб apenas para o mais prуximo, sem filtro de cidade:
1. Salve todas as coordenadas dos hospitais numa array;
2. Quando ele morrer dк o loop nas coordenadas e veja qual estб mais prуxima com aquela funзгo;

Depois disso й sу fazer ele ir pro hospital daquela coordenada.
Reply
#7

Quote:
Originally Posted by PetrickSchobaPS
Посмотреть сообщение
Pessoal tenho um sistema de hospital em meu servidor, porйm devido modificaзхes preciso colocar pra quando o jogador morrer ele ir para o hospital mais prуximo e eu sei que deve-se usar a funзгo GetPlayerDistanceFromPoint, porйm nem sei como fazer por causa do meu sistema de hospital.

Estas variбveis irб informar em qual hospital o jogador irб apуs morrer.
pawn Код:
Cidade_Que_Morreu[playerid] = 1; // Los Santos
    Cidade_Que_Morreu[playerid] = 2; // San Fierro
    Cidade_Que_Morreu[playerid] = 3; // Las Venturas
Abaixo estгo a posiзгo das entradas do hospital.
pawn Код:
1172.0776, -1323.3926, 15.4031 // Los Santos
1610.9330, 1824.2340, -92.7844 // San Fierro
1607.4191, 1815.4803, 10.8203 // Las Venturas
Quem poder me ajudar ou fazer este cуdigo, ficaria bem grato
Код:
forward GetClosestHospital(playerid);
public GetClosestHospital(playerid)
{
	if(!IsPlayerConnected(playerid))
	{
		return -1;
	}
	new prevhosp;
	new Float:prevdist = 100000.000;
	for(new hospid = 0; hospid < 3; hospid++)
	{
		new Float:dist;
		if(hospid == 0)
		{
			dist = GetPlayerDistanceToPoint(playerid, 1172.0776, -1323.3926, 0.0);
		}
		else if(hospid == 1)
		{
			dist = GetPlayerDistanceToPoint(playerid, 1610.9330, 1824.2340, 0.0);
		}
		else if(hospid == 2)
		{
			dist = GetPlayerDistanceToPoint(playerid, 1607.4191, 1815.4803, 0.0);
		}
		if((dist < prevdist))
		{
			prevdist = dist;
			prevhosp = hospid;
		}
	}
	return prevhosp;
}

coloque isto no onplayerdeath:


	if(GetClosestHospital(playerid) == 0)
	{
		SetSpawnInfo(playerid, 1, SKIN AQUI, 1172.0776, -1323.3926, 15.4031, 0.0, 0, 0, 0, 0, 0, 0);
	}
	else if(GetClosestHospital(playerid) == 1)
	{
		SetSpawnInfo(playerid, 1 , SKIN AQUI, 1610.9330, 1824.2340, -92.7844, 0.0, 0, 0, 0, 0, 0, 0);
	}
	else  if(GetClosestHospital(playerid) == 2)
	{
		SetSpawnInfo(playerid, 1, SKIN AQUI, 1607.4191, 1815.4803, 10.8203, 0.0, 0, 0, 0, 0, 0, 0);
	}
Reply
#8

Po, explica ao cara como faz, nгo da cуdigo zoado nгo.
Reply
#9

Код:
stock HospProx(playerid)
{
	new Float:Hosp[3][3] = {
	{1172.0776, -1323.3926, 15.4031}, // Los Santos
	{1610.9330, 1824.2340, -92.7844}, // San Fierro
	{1607.4191, 1815.4803, 10.8203} // Las Venturas
	};
	
	new Float:dist, Float:ldist = 99999999.0, hosp = 1;
	for(new i = 0; i < sizeof(Hosp); i++)
	{
	    dist = GetPlayerDistanceFromPoint(playerid, Hosp[i][0], Hosp[i][1], Hosp[i][2]);
	    if(dist < ldist)
	    {
			ldist = dist;
			hosp = i+1;
	    }
	}
	return hosp;
}
Код:
Cidade_Que_Morreu[playerid] = HospProx(playerid);
Reply
#10

Agradeзo a ajuda de todos. O cуdigo do rodrigo й o que eu queria. valeu galera
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)