shape1
shape2
shape3
shape4
shape7
shape8

GetNearestVehicle(playerid)


Статус
Закрыто для дальнейших ответов.

Kostyaev

Магистр
Пользователь
19.07.2014
1 123
274
0
26
Дорогие пользователи данного форума, хотел вам представить функцию, которая найдет ближайщее авто.

Представлю два способа: с Foreach, без Foreach.

Данный пример с Foreach.

stock GetNearestVehicle (playerid) {
new vehicleid = INVALID_VEHICLE_ID, Float:p[5]; // Переменные
p[3] = (float) 500; // Говорим переменной p с иденификатором 3, что она равна 500.
GetPlayerPos (playerid, p[0], p[1], p[2]); // Узнаем положения игрока, относительно координат x, y, z

foreach (new i : VehiclesInStream) { /* Данная функция для каждого автомобиля в зоне радиуса выполнит специальную функцию */
p[4] = GetVehicleDistanceFromPoint (i, p[0], p[1], p[2]); /* Говорим переменной p с иденификатором 4, что она равна дистанции для любой машины в зоне стрима, относительно игрока. */
p[4] < p[3] && (p[3] = p[4], vehicleid = i); /* Проверяем, если переменная p с иденификатором 4 меньше переменной p с иденификатором 3, то записываем значения. */
}

return vehicleid; // Возвращаем идентификатор машины.
}

при этом, нужно знать, что такое iterator и вставить его:

#include<foreach>

new Iterator:VehiclesInStream[MAX_VEHICLE]<MAX_VEHICLE>;

public OnGameModeInit () {
Iter_Init (VehiclesInStream);
return true;
}

public OnVehicleStreamIn (vehicleid, forplayerid) {
Iter_Add (VehiclesInStream[forplayerid], vehicleid);
return true;
}

public OnVehicleStreamOut (vehicleid, forplayerid) {
Iter_Remove (VehiclesInStream[forplayerid], vehicleid);
return true;
}

Другой пример, уже без Foreach

Код:
stock GetNearestVehicle (playerid) {
	new vehicleid = INVALID_VEHICLE_ID, Float:p[5]; // Переменные
	p[3] = (float) 500; // Говорим переменной p с иденификатором 3, что она равна 500.
	GetPlayerPos (playerid, p[0], p[1], p[2]); // Узнаем положения игрока, относительно координат x, y, z

	for (new i = 0; i < MAX_VEHICLES; i++) { /* Данная функция для каждого автомобиля в зоне радиуса выполнит специальную функцию */
		!IsVehicleStreamedIn (i, playerid) && continue;
		p[4] = GetVehicleDistanceFromPoint (i, p[0], p[1], p[2]); /* Говорим переменной p с иденификатором 4, что она равна дистанции для любой машины в зоне стрима, относительно игрока. */
		p[4] < p[3] && (p[3] = p[4], vehicleid = i); /* Проверяем, если переменная p с иденификатором 4 меньше переменной p с иденификатором 3, то записываем значения.  */
	}
	
	return vehicleid; // Возвращаем идентификатор машины.
}
 
Последнее редактирование модератором:
Статус
Закрыто для дальнейших ответов.