Перейти к содержанию
Авторизация  
Devin Coleman

Урок №13 – Перебор значений в массиве

Рекомендуемые сообщения

Devin Coleman

Что если нужно узнать, если определенное число в массиве или нет. Но функции поиска по

массиву в Pawn нет. Что делать? Поможет только перебор значений. Для этого нам нужен сам

массив и цикл for. Вы уже знакомы с массивами и циклами из прошлых уроков. Сейчас я на

простом примере покажу, как сделать перебор значений в массиве. И при появлении совпадения,

должен выполниться скрипт.

Допустим у нас есть большой одномерный массив со всеми ID машин, т.е только легкового

транспорта. Но сначала нам нужна новая автовызываемая функция, допустим, она будет

называться IsPlayerInAuto. В скобках пишем два параметра – playerid и vehicleid. Функция будет

выглядеть следующим образом:

public IsPlayerInAuto(playerid,vehicleid)
{
return 0;
}
Внутрь этой функции добавляем одномерный массив.

 

public IsPlayerInAuto(playerid,vehicleid)
{
new IsCarA[141] = {
445,602,416,485,568,429,433,499,424,536,496,504,422,609,498,401,575,518,402,
541,482,431,438,457,527,483,524,415,542,589,437,532,480,596,599,597,598,578,
486,507,562,585,427,419,587,490,528,533,544,407,565,455,530,526,466,604,492,
474,588,434,502,503,494,579,545,411,546,559,508,571,400,517,410,551,500,418,
572,423,414,516,582,467,443,470,404,603,600,413,426,436,547,489,441,594,564,
479,534,432,505,442,440,475,543,605,495,567,428,405,535,458,580,439,561,409,
560,550,506,601,574,566,549,420,459,576,525,531,408,583,451,558,552,540,491,
412,478,421,529,555,456,554,477};
return 0;
}
У нас есть параметр vehicleid надо присвоить ему id машины в которой сидит игрок. Под

массивом добавляем такую строку:

vehicleid = GetPlayerVehicleID(playerid);
После этой строки пишем проверку на нахождение игрока в любом транспорте. Функция

проверки называется IsPlayerInVehicle – проверяет игрока, находится ли он в любом транспорте.

Внутри этой условной конструкции пишем цикл for.

if(IsPlayerInVehicle(playerid,vehicleid))
{
for(new i = 0; i < 141; i++)
{
if(GetVehicleModel(vehicleid) == IsCarA[i])
{
return true;
}
}
}
141 – это количество ячеек в массиве. Ставим такое условие если ID машины в которой

сидит игрок, равен значению в ячейке массива. Цикл перебирает каждую ячейку и как только

находится совпадение условие выполняется. Принцип работы этого цикла следующий:

1. Допустим, игрок сидит в машине Infernus. GetVehicleModel – становится равным 411. Цикл

проверяет ячейку ссылка, на которую IsCarA[0], потому что i по умолчанию равно 0. А

IsCarA[0] = 445.

2. 445 не равно 411, условие не выполняется и цикл повторяется.

3. Цикл проверяет следующую ячейку ссылка на которую IsCarA[1], а она = 602.

4. 602 не равно 411, условие не выполняется и цикл повторяется.

5. Так продолжается по кругу пока i не станет равным 65. А IsCarA[65] = 411.

6. Условие выполняется, так как 411 = 411.

Код функции проверки будет выглядеть в целом так:

 

public IsPlayerInAuto(playerid,vehicleid)
{
new IsCarA[141] = {
445,602,416,485,568,429,433,499,424,536,496,504,422,609,498,401,575,518,402,
541,482,431,438,457,527,483,524,415,542,589,437,532,480,596,599,597,598,578,
486,507,562,585,427,419,587,490,528,533,544,407,565,455,530,526,466,604,492,
474,588,434,502,503,494,579,545,411,546,559,508,571,400,517,410,551,500,418,
572,423,414,516,582,467,443,470,404,603,600,413,426,436,547,489,441,594,564,
479,534,432,505,442,440,475,543,605,495,567,428,405,535,458,580,439,561,409,
560,550,506,601,574,566,549,420,459,576,525,531,408,583,451,558,552,540,491,
412,478,421,529,555,456,554,477};
return 0;
}
vehicleid = GetPlayerVehicleID(playerid);
if(IsPlayerInVehicle(playerid,vehicleid))
{
for(new i = 0; i < 141; i++)
{
if(GetVehicleModel(vehicleid) == IsCarA[i])
{
return true;
}
}
}
return 0;
}
Но он не будет работать если его не вызвать в нужный момент. Также не забудьте, указать

для него forward в начале скрипта, т.е объявить данную функцию как новую.

forward IsPlayerInAuto(playerid,vehicleid);
Проверку можно вызвать, например, с помощью команды. Для начала создаем переменную

getthecar, которая будет хранить ID машины, в которую сел игрок. Затем пишем такое условие:

new getthecar;
if(IsPlayerInAuto(playerid,getthecar)){
}
Т.е. игрок садится в машину. Переменная Getthecar – принимает значение ID машины, в

которую сел игрок и это значение отправляет в функцию IsPlayerInAuto. А функция начинает

перебор значений до тех пор пока не найдет совпадения. Перебор происходит моментально. После

перебора значений, результат возвращается и если есть совпадение, то условие выполняется.

 

Автор Cloud

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.