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. А функция начинает перебор значений до тех пор пока не найдет совпадения. Перебор происходит моментально. После перебора значений, результат возвращается и если есть совпадение, то условие выполняется.
я вернулся
|
|
| |