Четверг, 17.07.2025, 18:12
Приветствую Вас Гость | RSS
[•X•X•X•X•X•X•X•X•X• SRK •X•X•X•X•X•X•X•X•X•] - 193.107.179.214:7777
Главная | Урок №13 - Форум | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: DimanCC, Awesome, [Tuner_Life]Nikotin  
Урок №13
AwesomeДата: Вторник, 21.02.2012, 03:28 | Сообщение # 1
Генерал-майор
Группа: Проверенные
Сообщений: 70
Награды: 14
Репутация: 25
Статус: Offline
Что если нужно узнать, если определенное число в массиве или нет. Но функции поиска по
массиву в Pawn нет. Что делать? Поможет только перебор значений. Для этого нам нужен сам
массив и цикл for. Вы уже знакомы с массивами и циклами из прошлых уроков. Сейчас я на
простом примере покажу, как сделать перебор значений в массиве. И при появлении совпадения,
должен выполниться скрипт.
Допустим у нас есть большой одномерный массив со всеми ID машин, т.е только легкового
транспорта. Но сначала нам нужна новая автовызываемая функция, допустим, она будет
называться IsPlayerInAuto. В скобках пишем два параметра – playerid и vehicleid. Функция будет
выглядеть следующим образом:
Code
public IsPlayerInAuto(playerid,vehicleid)    
{    
return 0;    
}


Внутрь этой функции добавляем одномерный массив.

Code
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 машины в которой сидит игрок. Под
массивом добавляем такую строку:
Code
vehicleid = GetPlayerVehicleID(playerid);


После этой строки пишем проверку на нахождение игрока в любом транспорте. Функция
проверки называется IsPlayerInVehicle – проверяет игрока, находится ли он в любом транспорте.
Внутри этой условной конструкции пишем цикл for.
Code
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.
Код функции проверки будет выглядеть в целом так:

Code
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 в начале скрипта, т.е объявить данную функцию как новую.
Code
forward IsPlayerInAuto(playerid,vehicleid);

Проверку можно вызвать, например, с помощью команды. Для начала создаем переменную
getthecar, которая будет хранить ID машины, в которую сел игрок. Затем пишем такое условие:
Code
new getthecar;    
if(IsPlayerInAuto(playerid,getthecar)){    
}


Т.е. игрок садится в машину. Переменная Getthecar – принимает значение ID машины, в
которую сел игрок и это значение отправляет в функцию IsPlayerInAuto. А функция начинает
перебор значений до тех пор пока не найдет совпадения. Перебор происходит моментально. После
перебора значений, результат возвращается и если есть совпадение, то условие выполняется.




я вернулся
 
  • Страница 1 из 1
  • 1
Поиск:

Поддержка пишите на наш форум:Walter & alisa