Форум Pawn.Wiki - Воплоти мечту в реальность!: GetClosestVehicleFromPlayer - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Pawn ]
GetClosestVehicleFromPlayer

#1
Пользователь офлайн   JackMineua 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Почему-то пишет везде 0 и машину не чинит (тобишь не находит). Что не так?...

forward GetClosestVehicleFromPlayer(playerid);
public GetClosestVehicleFromPlayer(playerid)
{
    new Float:dis = 6.0;
    new veh = -1;
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    for(new i; i < GetVehiclePoolSize(); i++)
    {
        new Float:distance = GetVehicleDistanceFromPoint(i, x, y, z);
        if(distance < dis)
        {
			dis = distance;
                        veh = i;
			SCF(playerid, -1, "%d",i);
			SCF(playerid, -1, "%f",distance);
			break;
        }
        else continue;
    }
    return veh;
}

Сообщение отредактировал JackMineua: 10 января 2025 - 18:27

0

#2
Пользователь офлайн   R.SHAD0W 

  • Новичок
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияJackMineua (10 января 2025 - 18:26) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

forward GetClosestVehicleFromPlayer(playerid);
public GetClosestVehicleFromPlayer(playerid)
{
	new Float:dis = 6.0;
	new veh = -1;
	new Float:x, Float:y, Float:z;
	GetPlayerPos(playerid, x, y, z);
	for(new i = 1, j = GetVehiclePoolSize(); i <= j; i++)
	{
		new Float:distance = GetVehicleDistanceFromPoint(i, x, y, z);
		if(distance < dis)
		{
			dis = distance;
			veh = i;
			break;
		}
	}
	return veh;
}


Ид т/с начинаются с 1, а GetVehiclePoolSize возвращает максимальный ид, который был на сервере. Вероятно, у тебя был только один т/с с ид 1, а по условию i < GetVehiclePoolSize() цикл выполнился только для i = 0, поэтому и не могло найти.

Сообщение отредактировал R.SHAD0W: 10 января 2025 - 20:52

2

#3
Пользователь офлайн   JackMineua 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияR.SHAD0W (10 января 2025 - 20:35) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


Я продебажил GetVehiclePoolSize, он выдает 140 т/с. Так что проблема не в этом(
0

#4
Пользователь офлайн   JackMineua 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияR.SHAD0W (10 января 2025 - 20:35) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


Хотя, я поспешил с выводами, и оно вправду помогло. Спасибо!
0

#5
Пользователь офлайн   Hunter-Killer 

  • Проходимец
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияJackMineua (10 января 2025 - 20:53) писал:

Я продебажил GetVehiclePoolSize, он выдает 140 т/с. Так что проблема не в этом(

Эта функция возвращает максимальный занятый ID каким либо транспортом.
0

#6
Пользователь офлайн   Gene 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Твоя проблема что ты не проверяешь на валидность машину IsValidVehicle и если машина не существует GetVehicleDistanceFromPoint - вернут 0

forward GetClosestVehicleFromPlayer(playerid);
public GetClosestVehicleFromPlayer(playerid)
{
    new Float:dis = 6.0;
    new veh = -1;
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    for(new i = 1; i < GetVehiclePoolSize(); i++)
    {
        if (!IsValidVehicle(i))
        {
                continue;
        }

        new Float:distance = GetVehicleDistanceFromPoint(i, x, y, z);
        if(distance < dis)
        {
                dis = distance;
                veh = i;
        }
    }
    return veh;
}

Сообщение отредактировал Gene: 11 января 2025 - 14:16

0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика