В этом уроке мы рассмотрим функцию random().
Начнем.
1. Предисловие.
Для начала мы должны понять для чего предназначена данная функция. Random в переводе с английского — случайный. Следовательно, данная функция возвращает нам случайное значение.
2. Как работает?
Информация в данном пункте чисто для расширения Вашего кругозора.
Числа получаемые с помощью данной функции псевдо случайны, и вычисляются на основе формулы с некоторым начальным значением, которое может быть как функция времени.
Подробнее о алгоритме генератора случайным чисел Вы можете познакомиться здесь.
Также одним из алгоритмов генератора случайных чисел является линейный конгруэнтный метод
3. Как применять данную функцию?
Рассмотрим несколько примеров:
1) Создадим команду, которая выводит случайное число от 1 до 10 (включая 1 и 10).
if(strcmp("/random", cmdtext, true, 10) == 0) { new string[64]; // создаем строку, которая выведется на экран. format(string, sizeof(string), "Случайное число: %d", random(10) + 1); /* заполняем строку. Немного объясню как все выполняется. Функция random() ведет отсчет от нуля. Т.е. random(10) вывело бы число от 0 до 9. Следовательно, мы прибавили единицу, чтобы строка заполнилась числом от 1 до 10. */ SendClientMessage(playerid, 0xFFFFFF, string); // выводим сообщение пользователю return 1; }

На основе этого примера можно сделать азартные игры (например бросание костей, блек-джек и многое другое).
2) Рассмотрим другой пример. Сделаем рэндомный телепорт (сейчас много тем про это):
if (strcmp("/randomtp", cmdtext, true, 10) == 0) { 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); /* аналогично. Внимание: это не действущие координаты, вы должны заменить их на свои */ } return 1; }

На основе этого примера можно сделать, например, телепорт в рэндомную камеру при аресте, рэндомный спавн или телепорт на рэндомную ДМ-зону.
И еще, если вы используете более 10 разных координат для телепортов лучше всего использовать массив. Например рэндомный спавн из grandlarc'a :
new Float: gRandomPos[][4] = { {1751.1097, -2106.4529, 13.5469, 183.1979}, // El-Corona - Outside random house {2652.6418, -1989.9175, 13.9988, 182.7107}, // Random house in willowfield - near playa de seville and stadium {2489.5225, -1957.9258, 13.5881, 2.3440}, // Hotel in willowfield - near cluckin bell {2689.5203, -1695.9354, 10.0517, 39.5312}, // Outside stadium - lots of cars {2770.5393, -1628.3069, 12.1775, 4.9637}, // South in east beach - north of stadium - carparks nearby {2807.9282, -1176.8883, 25.3805, 173.6018}, // North in east beach - near apartments {2552.5417, -958.0850, 82.6345, 280.2542}, // Random house north of Las Colinas {2232.1309, -1159.5679, 25.8906, 103.2939}, // Jefferson motel {2388.1003, -1279.8933, 25.1291, 94.3321}, // House south of pig pen {2481.1885, -1536.7186, 24.1467, 273.4944}, // East LS - near clucking bell and car wash {2495.0720, -1687.5278, 13.5150, 359.6696}, // Outside CJ's house - lots of cars nearby {2306.8252, -1675.4340, 13.9221, 2.6271}, // House in ganton - lots of cars nearby {2191.8403, -1455.8251, 25.5391, 267.9925}, // House in south jefferson - lots of cars nearby {1830.1359, -1092.1849, 23.8656, 94.0113}, // Mulholland intersection carpark {2015.3630, -1717.2535, 13.5547, 93.3655}, // Idlewood house {1654.7091, -1656.8516, 22.5156, 177.9729}, // Right next to PD {1219.0851, -1812.8058, 16.5938, 190.0045}, // Conference Center {1508.6849, -1059.0846, 25.0625, 1.8058}, // Across the street of BANK - lots of cars in intersection carpark {1421.0819, -885.3383, 50.6531, 3.6516}, // Outside house in vinewood {1133.8237, -1272.1558, 13.5469, 192.4113}, // Near hospital {1235.2196, -1608.6111, 13.5469, 181.2655}, // Backalley west of mainstreet {590.4648, -1252.2269, 18.2116, 25.0473}, // Outside "BAnk of San Andreas" {842.5260, -1007.7679, 28.4185, 213.9953}, // North of Graveyard {911.9332, -1232.6490, 16.9766, 5.2999}, // LS Film Studio {477.6021, -1496.6207, 20.4345, 266.9252}, // Rodeo Place {255.4621, -1366.3256, 53.1094, 312.0852}, // Outside propery in richman {281.5446, -1261.4562, 73.9319, 305.0017}, // Another richman property {790.1918, -839.8533, 60.6328, 191.9514}, // Mulholland house {1299.1859, -801.4249, 84.1406, 269.5274}, // Maddoggs {1240.3170, -2036.6886, 59.9575, 276.4659}, // Verdant Bluffs {2215.5181, -2627.8174, 13.5469, 273.7786}, // Ocean docks 1 {2509.4346, -2637.6543, 13.6453, 358.3565} // Ocean Docks spawn 2 }; public OnPlayerSpawn(playerid) { new rand_spawn = random(sizeof(gRandomPos)); SetPlayerPos(playerid, gRandomPos[rand_spawn][0], gRandomPos[rand_spawn][1], gRandomPos[rand_spawn][2]); SetPlayerFacingAngle(playerid, gRandomPos[rand_spawn][3]); return 1; }

3) Сделаем совсем 'безобидную' функцию с помощью рэндома. Каждую секунду цвет машины в которой сидит игрок будет меняться.
Добавляем к глобальным переменным:
new changecolortimer;

Далее:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) { KillTimer(changecolortimer); changecolortimer = SetTimerEx("changecolor",1000,1,"i",vehicleid); return 1; }

И добавляем фунцию смены цвета с нашим рэндомом:
forward changecolor(i); public changecolor(i) { ChangeVehicleColor(i, random(120), random(120)); // меняет color1 и color2 на случайные цвета от 0 до 120 return 1; }

Можно привести еще тысячи подобных примеров, но все равно невозможно показать все прелести рэндома, не попробовав самому составить пару функций, используя его.
4. Заключение.
Вот и подошел мой 'урок' к концу. Я думаю, Вы уже сделали вывод, что без данной функции многого было бы 'трудновато' осуществить.
Спасибо за внимание, автор урока - manok.