Pawn :: Основы скриптинга
Перебор значений в массиве
Что если нужно узнать, если определенное число в массиве или нет.
Но функции поиска по массиву в Pawn нет. Что делать?
Поможет только перебор значений.
Для этого нам нужен сам массив и цикл for.
Делаем перебор значений в массиве. И при появлении совпадения, должен выполниться скрипт.
Допустим, у нас есть большой одномерный массив со всеми ID машин, т. е только легкового транспорта.
Но сначала нам нужна новая автовызываемая функция, допустим, она будет называться IsPlayerInBike.
В скобках пишем два параметра – playerid и vehicleid. Функция будет выглядеть следующим образом:
stock IsPlayerInBike(playerid,vehicleid)
{
return 0;
}
Поскольку функция не нуждается в таймере, то есть ее не нужно выполнять по истечению определенного количества времени или повторять, то лучше сделать эту функцию не через public, а через stock.
Функция должна возвращать 0, потому что мы делаем функцию проверки и соответственно функция должна возвращать либо true, либо false. Внутри функции мы добавим одномерный массив.
stock IsPlayerInBike(playerid,vehicleid)
{
new IsBikeA[10] = {581,523,462,521,463,522,461,448,468,586};
return 0;
}
Теперь нам нужно присвоить второму аргументу нашей функции vehicleid - ID транспорта, в котором сидит игрок.
Чтобы узнать ID машины, существует функция GetPlayerVehicleID, которая возвращает ID транспорта, в котором сидит игрок. Для этого мы присвоим аргументу значение, которое возвратит нам вышеуказанная функция.
Делаем это следующим образом, под массивом мы добавляем следующую строку:
1 vehicleid = GetPlayerVehicleID(playerid);
Дальше нам нужно проверить сидит ли игрок в машине с указанным ID. Функция IsPlayerInVehicle, проверяет: сидит ли игрок в транспорте с указанным во 2 аргументе функции ID транспорта. На следующей строчке пишем следующую условную конструкцию;
if(IsPlayerInVehicle(playerid,vehicleid))
{
}
В теле этой условной конструкции будет располагаться цикл, который будет искать требуемое значение в массиве.
Условие цикла должно быть следующее, если I < 10.
Переменная I у нас, это переменная счетчик, как в любом цикле.
То есть мы должны выполнить цикл 10 раз, так как в массиве у нас всего 10 ячеек или ID 10 мотоциклов.
for(new i = 0; i < 10; i++)
{
if(GetVehicleModel(vehicleid) == IsBikeA[i]) return true;
}
Если совпадение найдено, функция должна вернуть true, если нет false. Под циклом обязательно должен быть return 0, так как если совпадений не найдется, функция возвратит false.
|
|
|