SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese

Reply
 
Thread Tools Display Modes
Old 05/08/2020, 07:29 AM   #1
Nexuss
Little Clucker
 
Join Date: Feb 2020
Posts: 16
Reputation: 0
Default Verificar coordenadas e encontrar ponto mais próximo

Estou usando um código que verifica qual é o ponto mais próximo entre várias coordenadas feito pelo RodrigoMSR, porém estou tendo um problema. A única posição em que o jogador está sendo colocado é a segunda (hospital de Jefferson). Nenhuma outra está "funcionando".
Gostaria de saber se tem algo de errado nas modificações que fiz no código.
Code:
public OnPlayerRequestClass(playerid, classid)
{
	if(Ferido[playerid] == 1)
	{
		new Float:Hosp[7][3] =
		{
			{1172.8112, -1321.5280, 15.3990}, // Hospital de Market - Los Santos
			{2034.0315, -1402.2512, 17.2935}, // Hospital de Jefferson - Los Santos
			{1583.1184,1769.0341,10.8203}, // Hospital de Las Venturas
			{-2655.0159,639.2107,14.4531}, // Hospital de San Fierro
			{-2203.7517,-2309.7395,31.3750}, // Hospital de Angel Pine
			{-1514.7605,2519.5847,56.0662}, // Hospital de El Quebrados
			{-321.6696,1048.9684,20.3403} // Hospital de Fort Carson
		};

		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;
		    }
		    SetPlayerPos(playerid, Hosp[hosp][0], Hosp[hosp][1], Hosp[hosp][2]);
		}
	}
    return 0;
}
Código original: https://forum.sa-mp.com/showthread.php?t=632118
Nexuss is offline   Reply With Quote
Old 05/08/2020, 01:16 PM   #2
Khivory
Huge Clucker
 
Khivory's Avatar
 
Join Date: Feb 2020
Posts: 362
Reputation: 23
Default Re: Verificar coordenadas e encontrar ponto mais próximo

Você está spawnando o jogador dentro do loop amigo.

Porque o i + 1? Você está fazendo um loop que percorre a quantidade de elementos na array 'Hosp', se você utilizar i + 1 o primeiro hospital nunca vai ser escolhido e caso ele chegue no último você irá receber o erro 'Array index of bouts'.

PHP Code:
public OnPlayerRequestClass(playeridclassid) {
    if(
Ferido[playerid] == 1) {
        new 
Float:Hosp[7][3] = {
            {
1172.8112, -1321.528015.3990}, // Hospital de Market - Los Santos
            
{2034.0315, -1402.251217.2935}, // Hospital de Jefferson - Los Santos
            
{1583.1184,1769.0341,10.8203}, // Hospital de Las Venturas
            
{-2655.0159,639.2107,14.4531}, // Hospital de San Fierro
            
{-2203.7517,-2309.7395,31.3750}, // Hospital de Angel Pine
            
{-1514.7605,2519.5847,56.0662}, // Hospital de El Quebrados
            
{-321.6696,1048.9684,20.3403// Hospital de Fort Carson
        
};

        new 
Float:distFloat:ldisthosp;

        for(new 
isizeof(Hosp); i++) {
            
dist GetPlayerDistanceFromPoint(playeridHosp[i][0], Hosp[i][1], Hosp[i][2]);

            if(
dist ldist || == 0)
                
ldist disthosp i;
        }

       
SetPlayerPos(playeridHosp[hosp][0], Hosp[hosp][1], Hosp[hosp][2]);
    }
    return 
0;


Last edited by Khivory; 06/08/2020 at 12:25 AM.
Khivory is offline   Reply With Quote
Old 06/08/2020, 02:36 PM   #3
Nexuss
Little Clucker
 
Join Date: Feb 2020
Posts: 16
Reputation: 0
Default Re: Verificar coordenadas e encontrar ponto mais próximo

Quote:
Originally Posted by Khivory View Post
Você está spawnando o jogador dentro do loop amigo.

Porque o i + 1? Você está fazendo um loop que percorre a quantidade de elementos na array 'Hosp', se você utilizar i + 1 o primeiro hospital nunca vai ser escolhido e caso ele chegue no último você irá receber o erro 'Array index of bouts'.

PHP Code:
public OnPlayerRequestClass(playeridclassid) {
    if(
Ferido[playerid] == 1) {
        new 
Float:Hosp[7][3] = {
            {
1172.8112, -1321.528015.3990}, // Hospital de Market - Los Santos
            
{2034.0315, -1402.251217.2935}, // Hospital de Jefferson - Los Santos
            
{1583.1184,1769.0341,10.8203}, // Hospital de Las Venturas
            
{-2655.0159,639.2107,14.4531}, // Hospital de San Fierro
            
{-2203.7517,-2309.7395,31.3750}, // Hospital de Angel Pine
            
{-1514.7605,2519.5847,56.0662}, // Hospital de El Quebrados
            
{-321.6696,1048.9684,20.3403// Hospital de Fort Carson
        
};

        new 
Float:distFloat:ldisthosp;

        for(new 
isizeof(Hosp); i++) {
            
dist GetPlayerDistanceFromPoint(playeridHosp[i][0], Hosp[i][1], Hosp[i][2]);

            if(
dist ldist || == 0)
                
ldist disthosp i;
        }

       
SetPlayerPos(playeridHosp[hosp][0], Hosp[hosp][1], Hosp[hosp][2]);
    }
    return 
0;

Entendi.
Valeu pela ajuda!
Nexuss is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Ajuda] [PHP verificar] Verificar senha para login SadZW Português/Portuguese 5 06/12/2017 07:24 PM
[Ajuda] Como Pegar Coordenadas de um Local Mais Próximo! Poseidon4625 Português/Portuguese 4 02/12/2017 01:06 AM
[Ajuda] [PHP verificar] Verificar senha para login idegod Português/Portuguese 9 28/03/2017 04:52 AM
[Ajuda] Org por ponto mateus1546 Português/Portuguese 1 23/08/2014 09:59 PM
[ajuda] /encontrar bugado n aparece no mapa o ponto vermelhor coringa_smith157 Português/Portuguese 6 28/03/2012 05:26 PM


All times are GMT. The time now is 12:14 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.