Дорогие пользователи данного форума, хотел вам представить функцию, которая найдет ближайщее авто.
Представлю два способа: с Foreach, без Foreach.
Данный пример с Foreach.
stock GetNearestVehicle (playerid) {
new vehicleid = INVALID_VEHICLE_ID, Float[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
Представлю два способа: с Foreach, без Foreach.
Данный пример с Foreach.
stock GetNearestVehicle (playerid) {
new vehicleid = INVALID_VEHICLE_ID, Float[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; // Возвращаем идентификатор машины.
}
Последнее редактирование модератором: