Pawn :: Основы скриптинга
Функция Random
Рассмотрим примеры получения случайного числа, двумя различными функциями Random.
Первая функция стандартная, вторая – сторонняя разработанная функция.
Начнем со стандартной функции, синтаксис функции таков:
1 random(max); //случайное число между 0 и max
Вот пример простейшей команды с выводом случайного числа в чат:
if(strcmp("/random", cmdtext, true, 10) == 0)
{
new string[64]; // создаем строку, которая выведется на экран.
format(string, 64, "Случайное число: %d", random(10));
SendClientMessage(playerid, 0xFFFFFF, string); // выводим сообщение пользователю
return 1;
}
Но, что если нам нужно получить случайное число не от нуля, а от единицы до десяти.
Тут мы заранее прибавим к случайному числу единицу.
То есть строка 4, в вышеуказанном коде выглядела бы следующим образом.
1 format(string, 64, "Случайное число: %d", random(10)+1);
Но есть и не стандартная функция, которая уже имеет два параметра: минимальное и максимальное число диапазона, из которого будет браться случайное число. Функция выглядит следующим образом:
stock Random(min, max)
{
new a = random(max - min) + min; return a;
}
Теперь четвертая строка выглядела бы следующим образом:
1 format(string, 64, "Случайное число: %d", random(1,10);
Данную функцию можно использовать в других различных функциях, например в операторе switch, как это показано на примере ниже:
switch(random(4)) // генерируем число от 0 до 3 (включая)
{
case 0: SetPlayerPos(playerid, X1,Y1,Z1); // телепортируем игрока в координаты X1,Y1,Z1
case 1: SetPlayerPos(playerid, X2,Y2,Z2); // ...
case 2: SetPlayerPos(playerid, X3,Y3,Z3); // ...
case 3: SetPlayerPos(playerid, X4,Y4,Z4); // аналогично.
}
Выше перечисленный скрипт больше подходит для создания какой-нибудь азартной игры.
Допустим, вы хотите сделать рандомный спавн игроков.
Возьму за основу стандартный пример из скрипта LVDM (идущий в комплект с сервером SAMP).
1 new Float:gRandomPlayerSpawns[23][3] = {
У нас есть вышеуказанный массив. Теперь нам нужно получить случайные координаты из массива. Для этого мы берем случайное число от количества строк массива. То есть берем случайное число от 0 до 22
new rand = random(sizeof(gRandomPlayerSpawns));
SetPlayerPos(playerid, gRandomPlayerSpawns[rand][0], gRandomPlayerSpawns[rand][1],
gRandomPlayerSpawns[rand][2]); // Warp the player
В вышеуказанном примере мы получаем случайное число строки массива и записываем его в переменную rand, которую потом используем при телепортации игрока к месту спавна.
|
|
|